Скорее всего выставлен свойство Style в отличное от csDropDown. В некоторые другие свойства предназначены для ручной отрисовки списков. Если это не используется, то надо выставить правильный стиль.
» Вопросы по Delphi (все версии) - часть 4
Здравствуйте. Подскажите пожалуйста как можно удалить все знаки равно из текстового файла. При этом не удаляя всю строчку. Спасибо.
MsdLamer
Код: [no]sl := TStringList.Create;
sl.LoadFromFile(filename);
for i := 0 to sl.Count - 1 do
sl[i] := StringReplace(sl[i], '=', '', [rfReplaceAll]);
sl.SaveToFile(filename);
sl.Free;[/no]
Код: [no]sl := TStringList.Create;
sl.LoadFromFile(filename);
for i := 0 to sl.Count - 1 do
sl[i] := StringReplace(sl[i], '=', '', [rfReplaceAll]);
sl.SaveToFile(filename);
sl.Free;[/no]
Спасибо. И еще один вопрос как можно сделать если имеется текстовый файлик следующего содержания:
2 // числа могут быть обсолютно разными но 3 цифры это максимум
22434234234234 // по любому больше 3-х цифр.
234234234234
56565656565
24
09099999999999
104
989898989898
777878787
67667676767676
можно сделать так чтобы это один большой файл разбить на маленькие:
Допустим 2.тхт содержит
2
22434234234234
23423423423423
24.тхт содержит
24
09099999999999
и.т.д т.е . чтобы верхний номер был названием файла. Спасибо.
2 // числа могут быть обсолютно разными но 3 цифры это максимум
22434234234234 // по любому больше 3-х цифр.
234234234234
56565656565
24
09099999999999
104
989898989898
777878787
67667676767676
можно сделать так чтобы это один большой файл разбить на маленькие:
Допустим 2.тхт содержит
2
22434234234234
23423423423423
24.тхт содержит
24
09099999999999
и.т.д т.е . чтобы верхний номер был названием файла. Спасибо.
OdesitVadim
Цитата:
Нет. С этим все нормально. Тоже так подумал вначале. Но тут даже когда новый Combobox, например, положить на форму и заполнить в дизайнере Items, всеравно чистый при выполнении. Такое впесатление, что при установке значения ItemIndex чистится.
Цитата:
Скорее всего выставлен свойство Style в отличное от csDropDown.
Нет. С этим все нормально. Тоже так подумал вначале. Но тут даже когда новый Combobox, например, положить на форму и заполнить в дизайнере Items, всеравно чистый при выполнении. Такое впесатление, что при установке значения ItemIndex чистится.
MsdLamer
что нибудь аналогичное предыдущему, но примерно такое..
var
aFileNAme : string;
aFileName := '';
sl := TStringList.Create;
sl2 := TStringList.Create;
sl.LoadFromFile(filename);
// в sl будем хранить оригинальный файл, а в sl2 записывать текущий "маленький" файл
for i := 0 to sl.Count - 1 do begin
// проанализируем текущую строку в файле sl
if Length(sl[i]) <= 3 then begin
// если она сигнализирует о начале нового файла, то запишем накопленные данные:
if (sl2.Count > 0) and (aFileNAme <> '') then begin // записывать будем только в том случае, если данные имеются
sl2.SaveToFile(aFileName + '.txt');
sl2.Clear;
aFileName := sl[i];
end;
sl2.Add(sl[i]); // добавим текущую строку в файл
end;
// запишем оставшиеся данные:
if (sl2.Count > 0) and (aFileNAme <> '') then
sl2.SaveToFile(aFileName + '.txt');
FreeAndNil(sl);
FreeAndNil(sl2);
что нибудь аналогичное предыдущему, но примерно такое..
var
aFileNAme : string;
aFileName := '';
sl := TStringList.Create;
sl2 := TStringList.Create;
sl.LoadFromFile(filename);
// в sl будем хранить оригинальный файл, а в sl2 записывать текущий "маленький" файл
for i := 0 to sl.Count - 1 do begin
// проанализируем текущую строку в файле sl
if Length(sl[i]) <= 3 then begin
// если она сигнализирует о начале нового файла, то запишем накопленные данные:
if (sl2.Count > 0) and (aFileNAme <> '') then begin // записывать будем только в том случае, если данные имеются
sl2.SaveToFile(aFileName + '.txt');
sl2.Clear;
aFileName := sl[i];
end;
sl2.Add(sl[i]); // добавим текущую строку в файл
end;
// запишем оставшиеся данные:
if (sl2.Count > 0) and (aFileNAme <> '') then
sl2.SaveToFile(aFileName + '.txt');
FreeAndNil(sl);
FreeAndNil(sl2);
Блин всем спасибо огромное за помощь!! Все с пояснениями супер....))) Кайфовый форум.
Narrator
Ну в таком случае "угадать" сложнее.
Если бы форма, которая видна при дизайне и в запущенном приложении отличались в компонентах - тогда другое дело, эт мы знаем.
Может просто на форме есть какой-то "специфический сторонный компонент"? Например для скинов.
у ComboBox/ListBox наблюдается полоса прокрутки (ну если она действительно нужна по размеру.
цвет шрифта случайно не совпадает с цветом фона?
(тут два варианта:
- либо было решено разукрасить форму всемя цветами радуги. а многие компоненты наследуют эти цвета от родительского компонента - обычно формы.
- был поставлен компонент TXPManifest. И цвета с подключёнными стилями немного не совпадают с теми, что были в дизайне. Наблюдал когда то такое с TMainMenu, при этом в в винде была настроена очень странная тема в чёрно-зелённых тонах)
В FormCreate/FormShow и так далее нет какого то "хорошего кода"?
Воспроизводиться ли проблема на других формах этого проекта. А на другом проекте. А если этот проект запустить на другом компе?
Можно ещё пару вариантов привести, но сложно гадать на кофейной гуще.
Ну в таком случае "угадать" сложнее.
Если бы форма, которая видна при дизайне и в запущенном приложении отличались в компонентах - тогда другое дело, эт мы знаем.
Может просто на форме есть какой-то "специфический сторонный компонент"? Например для скинов.
у ComboBox/ListBox наблюдается полоса прокрутки (ну если она действительно нужна по размеру.
цвет шрифта случайно не совпадает с цветом фона?
(тут два варианта:
- либо было решено разукрасить форму всемя цветами радуги. а многие компоненты наследуют эти цвета от родительского компонента - обычно формы.
- был поставлен компонент TXPManifest. И цвета с подключёнными стилями немного не совпадают с теми, что были в дизайне. Наблюдал когда то такое с TMainMenu, при этом в в винде была настроена очень странная тема в чёрно-зелённых тонах)
В FormCreate/FormShow и так далее нет какого то "хорошего кода"?
Воспроизводиться ли проблема на других формах этого проекта. А на другом проекте. А если этот проект запустить на другом компе?
Можно ещё пару вариантов привести, но сложно гадать на кофейной гуще.
И еще один вопрос подскажите пожалуйста как можно в текстовом файле оставить нужные куски текста? Допустим есть текстовый файл с содежимым:
Саша 47 ....
какой-то текст
НатаШа 56....
дальше не нужный текст
Саша 78....
какой-то текст
НатаШа 71.....
нужно чтобы осталось
Саша 47 ....
какой-то текст
НатаШа 56....
Саша 78....
какой-то текст
НатаШа 71.....
т.е. нужно чтобы остались только нужные куски. Саша и Наташа в одной строке не попадаются. Спасибо.
Саша 47 ....
какой-то текст
НатаШа 56....
дальше не нужный текст
Саша 78....
какой-то текст
НатаШа 71.....
нужно чтобы осталось
Саша 47 ....
какой-то текст
НатаШа 56....
Саша 78....
какой-то текст
НатаШа 71.....
т.е. нужно чтобы остались только нужные куски. Саша и Наташа в одной строке не попадаются. Спасибо.
deks у тебя ошибка.
Цитата:
Правильно:
Цитата:
Цитата:
if Length(sl[i]) <= 3 then begin
// если она сигнализирует о начале нового файла, то запишем накопленные данные:
if (sl2.Count > 0) and (aFileNAme <> '') then begin // записывать будем только в том случае, если данные имеются
sl2.SaveToFile(aFileName + '.txt');
sl2.Clear;
aFileName := sl[i];
end;
Правильно:
Цитата:
if Length(sl[i]) <= 3 then begin
// если она сигнализирует о начале нового файла, то запишем накопленные данные:
if (sl2.Count > 0) and (aFileNAme <> '') then // записывать будем только в том случае, если данные имеются
sl2.SaveToFile(aFileName + '.txt');
sl2.Clear;
aFileName := sl[i];
end;
MsdLamer
У стринглиста ненужные строки можно удалять методом Delete
У стринглиста ненужные строки можно удалять методом Delete
OdesitVadim
Цитата:
Действительно - гадание на кофейной гуще. Проблема решилась. Суть - 2+3<>3+2. Я поменял в dpr порядок(время?) создания формы.
Было...
Код:
...
Application.CreateForm(TToolsForm, ToolsForm);
SplashForm.Hide;
SplashForm.Free;
...
Цитата:
...Можно ещё пару вариантов привести, но сложно гадать на кофейной гуще
Действительно - гадание на кофейной гуще. Проблема решилась. Суть - 2+3<>3+2. Я поменял в dpr порядок(время?) создания формы.
Было...
Код:
...
Application.CreateForm(TToolsForm, ToolsForm);
SplashForm.Hide;
SplashForm.Free;
...
Narrator
Правило раз:
Без надобности не правь dpr файл.
Правило два:
Если ты всё таки решился править, подумай, а понимаешь ли ты, что же ты делаешь.
В делфи до 7 версии включительно, в 2005-2006 и 2007 одно и тоже изменение может давать разные эффекты. То есть имеем три разные пути повидения.
Скорее всего у тебя Делфи путалась, какая форма главная. Просто не смогла правильно инициализировать некоторые внутриние структуры.
Но если уж лезть в эти дебри, то стоит помнить, что до вызова метода Application.Run приложение не обрабатывает Windows сообщения. Точнее обрабатывает, но крайне избирательно и не стоит надеятся на это. Поэтому, к примеру, в SplashForm не будет работать таймер и может не обновлятся. Решается просто - вызываем метод Update формы по мере надобности в обновлении.
Правило раз:
Без надобности не правь dpr файл.
Правило два:
Если ты всё таки решился править, подумай, а понимаешь ли ты, что же ты делаешь.
В делфи до 7 версии включительно, в 2005-2006 и 2007 одно и тоже изменение может давать разные эффекты. То есть имеем три разные пути повидения.
Скорее всего у тебя Делфи путалась, какая форма главная. Просто не смогла правильно инициализировать некоторые внутриние структуры.
Но если уж лезть в эти дебри, то стоит помнить, что до вызова метода Application.Run приложение не обрабатывает Windows сообщения. Точнее обрабатывает, но крайне избирательно и не стоит надеятся на это. Поэтому, к примеру, в SplashForm не будет работать таймер и может не обновлятся. Решается просто - вызываем метод Update формы по мере надобности в обновлении.
Цитата:
Без надобности не правь dpr файл.
так не правил же... изначально...
Повторюсь. Правил код только в MainForm. Вылезло в ToolsForm.
Цитата:
одно и тоже изменение может давать разные эффекты. То есть имеем три разные пути повидения.
Какие изменения и это где-то описано? Ткни, чтоб знал.
Цитата:
Скорее всего у тебя Делфи путалась, какая форма главная.
Чего ей путаться? В свойствах проекта явно задано какая из форм главная. К тому же она первой в dpr создается.
Цитата:
...до вызова метода Application.Run приложение не обрабатывает Windows сообщения. Точнее обрабатывает, но крайне избирательно
Ну... если следовать этой мысли, то тогда получается, что создание любой формы до Run не гарантированно. Все контролы создаются и работают через виндовые сообщения.
Narrator
Попробуйте свою прогу под EurekaLog погонять, можно даже под триальной версией. Уверен, узнаете о своей проге много нового.
Попробуйте свою прогу под EurekaLog погонять, можно даже под триальной версией. Уверен, узнаете о своей проге много нового.
Уважаемые, помогите пожалуйста...
Задача в следующем:
Есть некое приложение (написанное ранее на Delphi) состоящее из нескольких окон на которых располагаются компоненты PageControl, Panel ну и т.д. с данными...
Необходимо написать утилиту для изменения некоторых свойств компонентов (Visible, Align, Enabled) в этом приложении в run-time.
Саму форму я нахожу без проблем, точнее hWnd, а что и как делать дальше не понимаю,( Как прочитать и изменить свойства компонентов в другом приложении?
Задача в следующем:
Есть некое приложение (написанное ранее на Delphi) состоящее из нескольких окон на которых располагаются компоненты PageControl, Panel ну и т.д. с данными...
Необходимо написать утилиту для изменения некоторых свойств компонентов (Visible, Align, Enabled) в этом приложении в run-time.
Саму форму я нахожу без проблем, точнее hWnd, а что и как делать дальше не понимаю,( Как прочитать и изменить свойства компонентов в другом приложении?
SZap
По большому счету никак. Можно изменить только то, что контролируется вин. сообщениями.
Хотя если прога использует рантайм пакеты, может и удастся как нибудь к ней подцепится.
По большому счету никак. Можно изменить только то, что контролируется вин. сообщениями.
Хотя если прога использует рантайм пакеты, может и удастся как нибудь к ней подцепится.
Что такое рантайм пакеты? Программа написана с использованием стандартных компонентов Delphi...
SZap
Изменять свойства при помощи классов VCL можно устроить, но это сложно.
Гораздо проще делать все то же используя просто WinAPI. Для того, что бы узнать какое сообщение надо послать что бы изменилось то или иное свойство, достаточно глянуть в саму реализацию VCL.
P.S. Я где-то в интернете встречал подобие библиотеке VCL, но там объекты можно было привязывать к уже созданным примитивам Windows (будь то кнопка или листбокс).
P.P.S. Runtime package - пакеты (обычно bpl) которые представляют собой библиотеки классов или функций используемых в программе. Подмена этих библиотек обычно представляет собой написание "обертки" над оригинальной библиотекой и обычно используется для изменения уже готов программ, код которых недоступен. Обычно такое решение занимаем много времени для реализации.
Изменять свойства при помощи классов VCL можно устроить, но это сложно.
Гораздо проще делать все то же используя просто WinAPI. Для того, что бы узнать какое сообщение надо послать что бы изменилось то или иное свойство, достаточно глянуть в саму реализацию VCL.
P.S. Я где-то в интернете встречал подобие библиотеке VCL, но там объекты можно было привязывать к уже созданным примитивам Windows (будь то кнопка или листбокс).
P.P.S. Runtime package - пакеты (обычно bpl) которые представляют собой библиотеки классов или функций используемых в программе. Подмена этих библиотек обычно представляет собой написание "обертки" над оригинальной библиотекой и обычно используется для изменения уже готов программ, код которых недоступен. Обычно такое решение занимаем много времени для реализации.
SZap
Сюда загляните: Основы работы с Win API в VCL-приложениях, особенно на определенные в делфи сообщения. Ну и сюда тоже: Работа с контролами чужого приложения.
Сюда загляните: Основы работы с Win API в VCL-приложениях, особенно на определенные в делфи сообщения. Ну и сюда тоже: Работа с контролами чужого приложения.
Всем привет. Возникла необходимость выцепить всю таблицу маршрутизации. Не подскажите как это можно сделать?
Maks150988
route print >myfile.txt
а потом отпарсить его, как хочешь.
route print >myfile.txt
а потом отпарсить его, как хочешь.
Narrator
Цитата:
Что бы сказать что-то конкретное надо больше кода, но и так ясно что указанные коды не равнозначны, пример в первом коде SplashForm теряет фокус ввода, а во втором нет, соответствующие события тоже не посылаются.
Намек - нельзя рассматривать порядок открытия/закрытия форм без анализа генерируемых и обрабатываемых сообщений, особенно взаимосвязанных.
Не гадайте на кофе, просто проанализируйте код, я думаю когда найдете в чем дело поймете, что делфи не причем.
Добавлено:
Narrator
Цитата:
Сталкивался с подобным, удалял все вспомогательные/настроечные файлы проекта, например *.dsk, и "Build Project".
Цитата:
Действительно - гадание на кофейной гуще. Проблема решилась. Суть - 2+3<>3+2. Я поменял в dpr порядок(время?) создания формы.
Было...
Код:
...
Application.CreateForm(TToolsForm, ToolsForm);
SplashForm.Hide;
SplashForm.Free;
...
Стало...
Код:
...
SplashForm.Hide;
SplashForm.Free;
Application.CreateForm(TToolsForm, ToolsForm);
...
Сразу отмечу, в SplashForm нет кода. Интересно то, что ToolsForm не правилась, а просто рос код программы в других местах.
Что бы сказать что-то конкретное надо больше кода, но и так ясно что указанные коды не равнозначны, пример в первом коде SplashForm теряет фокус ввода, а во втором нет, соответствующие события тоже не посылаются.
Намек - нельзя рассматривать порядок открытия/закрытия форм без анализа генерируемых и обрабатываемых сообщений, особенно взаимосвязанных.
Не гадайте на кофе, просто проанализируйте код, я думаю когда найдете в чем дело поймете, что делфи не причем.
Добавлено:
Narrator
Цитата:
Непонятное поведением Combobox и Listbox в одной из форм программы - пустые списки на этапе выполнения. Причем, у формы есть как заполненные в дизайнере значения Items, так и формируемые при создании формы. Если в отладчике проследить заполнеие или сформировать Messagebox с текстом значений Items, то все нормально. Когда же форма выводится на екран, все списки пустые
Сталкивался с подобным, удалял все вспомогательные/настроечные файлы проекта, например *.dsk, и "Build Project".
Всем привет
Вопрос к тем кто имеет опыт написания COM,Activex и т.д.
Можна ли, и если да, то как, определить метод с параметрами по умолчанию ??
В typelibe редакторе для параметра можна выставить [optional] [default]. Но, скоко я не экспериментировал на результирующий _tlb это никак не влияет
Есть какие нибудь мысли ?
Вопрос к тем кто имеет опыт написания COM,Activex и т.д.
Можна ли, и если да, то как, определить метод с параметрами по умолчанию ??
В typelibe редакторе для параметра можна выставить [optional] [default]. Но, скоко я не экспериментировал на результирующий _tlb это никак не влияет
Есть какие нибудь мысли ?
Цитата:
route print >myfile.txt
а потом отпарсить его, как хочешь.
Дык блин и в этом проблема. Фиг знает каким боком парсить... Но задача примерно такова. Из всего этого месива мне нужны только все постоянные маршруты с их сетевыми адресами и маской сети если она есть.
Парсить можно при помощи: TRegExpr старого такого модуля, либо регулярными выражениями .Net.
А вообще можно было глянуть внутрь pe-шника и увидеть:
Код:
iphlpapi.dll
76D55B3B 1B GetBestRoute
76D543F6 4 AllocateAndGetIpForwardTableFromStack
76D578C1 E DeleteIpForwardEntry
76D5B05C 3 AllocateAndGetIpAddrTableFromStack
76D57813 A CreateIpForwardEntry
76D542A3 27 GetIpAddrTable
76D5417E 2 AllocateAndGetIfTableFromStack
USER32.dll
77D5E0D7 31 CharToOemBuffA
WS2_32.dll
71A912F8 Ordinal 11
71A9401C Ordinal 12
71A941DA Ordinal 115
71A912A7 Ordinal 8
71A92BBF Ordinal 52
MSWSOCK.dll
71A451F3 1A inet_network
71A45158 19 getnetbyname
А вообще можно было глянуть внутрь pe-шника и увидеть:
Код:
iphlpapi.dll
76D55B3B 1B GetBestRoute
76D543F6 4 AllocateAndGetIpForwardTableFromStack
76D578C1 E DeleteIpForwardEntry
76D5B05C 3 AllocateAndGetIpAddrTableFromStack
76D57813 A CreateIpForwardEntry
76D542A3 27 GetIpAddrTable
76D5417E 2 AllocateAndGetIfTableFromStack
USER32.dll
77D5E0D7 31 CharToOemBuffA
WS2_32.dll
71A912F8 Ordinal 11
71A9401C Ordinal 12
71A941DA Ordinal 115
71A912A7 Ordinal 8
71A92BBF Ordinal 52
MSWSOCK.dll
71A451F3 1A inet_network
71A45158 19 getnetbyname
О, нашел на забугорном форуме и сделал пример.=)
[more]
program sample;
uses
Windows, Messages, Commctrl, SysUtils, IpExport,
IpHlpApi, IpTypes, IpIfConst, IpRtrMib, Winsock;
{$R dialog.res}
{$R ..\..\Lenin_XPStyle.RES}
var
hApp : Integer;
procedure CreateColumnsListview(hLV: HWND);
var
lvc : TLVColumn;
begin
lvc.mask := LVCF_TEXT or LVCF_WIDTH or LVCF_FMT;
lvc.fmt := LVCFMT_CENTER;
lvc.pszText := '#';
lvc.cx := 26;
ListView_InsertColumn(hLV, 0, lvc);
lvc.mask := LVCF_TEXT or LVCF_WIDTH;
lvc.pszText := 'Постоянный маршрут';
lvc.cx := 160;
ListView_InsertColumn(hLV, 1, lvc);
lvc.mask := lvc.mask or LVCF_FMT;
lvc.fmt := LVCFMT_RIGHT;
lvc.pszText := 'Маска сети';
lvc.cx := 160;
ListView_InsertColumn(hLV, 2, lvc);
end;
function IpAddrToString(Addr : DWORD) : string;
var
inad : in_addr;
begin
inad.s_addr := Addr;
Result := inet_ntoa(inad);
end;
procedure DisplayRoutingTable;
var
ForwardTable : PMibIpForwardTable;
ForwardRow : TMibIpForwardRow;
Dest : string;
Gate : string;
Size : ULONG;
I : Integer;
lvi : TLVItem;
Destination : string;
GateWay : string;
begin
ZeroMemory(@lvi, SizeOf(lvi));
lvi.mask := LVIF_TEXT;
SendMessage(GetDlgItem(hApp, 101), LVM_DELETEALLITEMS, 0, 0);
SendMessage(GetDlgItem(hApp, 101), WM_SETREDRAW, Integer(FALSE), 0);
Size := 0;
if not GetIpForwardTable(nil, Size, True) = ERROR_BUFFER_OVERFLOW then Exit;
ForwardTable := AllocMem(Size);
try
if GetIpForwardTable(ForwardTable, Size, True) = ERROR_SUCCESS then
begin
for I := 0 to ForwardTable^.dwNumEntries - 1 do
begin
ForwardRow := ForwardTable^.Table[I];
Dest := IpAddrToString(ForwardRow.dwForwardDest);
Gate := IpAddrToString(ForwardRow.dwForwardNextHop);
if ((Destination = '') or (Pos(Destination, Dest) > 0)) and
((GateWay = '') or (Pos(GateWay, Dest) > 0)) then
begin
lvi.mask := LVIF_TEXT;
lvi.iItem := I;
lvi.iSubItem := 0;
lvi.pszText := '';
SendMessage(GetDlgItem(hApp, 101), LVM_INSERTITEM, 0, Integer(@lvi));
lvi.iSubItem := 1;
lvi.pszText := PChar(Format('%17s', [Dest]));
SendMessage(GetDlgItem(hApp, 101), LVM_SETITEM, 0, Integer(@lvi));
lvi.iSubItem := 2;
lvi.pszText := PChar(Format('%17s', [IpAddrToString(ForwardRow.dwForwardMask)]));
SendMessage(GetDlgItem(hApp, 101), LVM_SETITEM, 0, Integer(@lvi));
end;
end;
end;
finally
FreeMem(ForwardTable);
end;
SendMessage(GetDlgItem(hApp, 101), WM_SETREDRAW, Integer(TRUE), 0);
end;
function MainDlgProc(hWnd : HWND; uMsg : UINT; wParam : wParam; lParam : lParam) : BOOL; stdcall;
begin
Result := FALSE;
case uMsg of
WM_INITDIALOG :
begin
hApp := hWnd;
CreateColumnsListview(GetDlgItem(hApp, 101));
SendMessage(GetDlgItem(hApp, 101), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT or LVS_EX_CHECKBOXES);
end;
WM_COMMAND :
begin
case LoWord(wParam) of
102 : DisplayRoutingTable;
end;
end;
WM_DESTROY, WM_CLOSE :
begin
PostQuitMessage(0);
end;
end;
end;
begin
InitCommonControls;
DialogBox(hInstance, MAKEINTRESOURCE(101), 0, @MainDlgProc);
end.
[/more]
Однако это тупо в лоб сразу все маршруты, а нужны именно постоянные. Нет ли спооба?
[more]
program sample;
uses
Windows, Messages, Commctrl, SysUtils, IpExport,
IpHlpApi, IpTypes, IpIfConst, IpRtrMib, Winsock;
{$R dialog.res}
{$R ..\..\Lenin_XPStyle.RES}
var
hApp : Integer;
procedure CreateColumnsListview(hLV: HWND);
var
lvc : TLVColumn;
begin
lvc.mask := LVCF_TEXT or LVCF_WIDTH or LVCF_FMT;
lvc.fmt := LVCFMT_CENTER;
lvc.pszText := '#';
lvc.cx := 26;
ListView_InsertColumn(hLV, 0, lvc);
lvc.mask := LVCF_TEXT or LVCF_WIDTH;
lvc.pszText := 'Постоянный маршрут';
lvc.cx := 160;
ListView_InsertColumn(hLV, 1, lvc);
lvc.mask := lvc.mask or LVCF_FMT;
lvc.fmt := LVCFMT_RIGHT;
lvc.pszText := 'Маска сети';
lvc.cx := 160;
ListView_InsertColumn(hLV, 2, lvc);
end;
function IpAddrToString(Addr : DWORD) : string;
var
inad : in_addr;
begin
inad.s_addr := Addr;
Result := inet_ntoa(inad);
end;
procedure DisplayRoutingTable;
var
ForwardTable : PMibIpForwardTable;
ForwardRow : TMibIpForwardRow;
Dest : string;
Gate : string;
Size : ULONG;
I : Integer;
lvi : TLVItem;
Destination : string;
GateWay : string;
begin
ZeroMemory(@lvi, SizeOf(lvi));
lvi.mask := LVIF_TEXT;
SendMessage(GetDlgItem(hApp, 101), LVM_DELETEALLITEMS, 0, 0);
SendMessage(GetDlgItem(hApp, 101), WM_SETREDRAW, Integer(FALSE), 0);
Size := 0;
if not GetIpForwardTable(nil, Size, True) = ERROR_BUFFER_OVERFLOW then Exit;
ForwardTable := AllocMem(Size);
try
if GetIpForwardTable(ForwardTable, Size, True) = ERROR_SUCCESS then
begin
for I := 0 to ForwardTable^.dwNumEntries - 1 do
begin
ForwardRow := ForwardTable^.Table[I];
Dest := IpAddrToString(ForwardRow.dwForwardDest);
Gate := IpAddrToString(ForwardRow.dwForwardNextHop);
if ((Destination = '') or (Pos(Destination, Dest) > 0)) and
((GateWay = '') or (Pos(GateWay, Dest) > 0)) then
begin
lvi.mask := LVIF_TEXT;
lvi.iItem := I;
lvi.iSubItem := 0;
lvi.pszText := '';
SendMessage(GetDlgItem(hApp, 101), LVM_INSERTITEM, 0, Integer(@lvi));
lvi.iSubItem := 1;
lvi.pszText := PChar(Format('%17s', [Dest]));
SendMessage(GetDlgItem(hApp, 101), LVM_SETITEM, 0, Integer(@lvi));
lvi.iSubItem := 2;
lvi.pszText := PChar(Format('%17s', [IpAddrToString(ForwardRow.dwForwardMask)]));
SendMessage(GetDlgItem(hApp, 101), LVM_SETITEM, 0, Integer(@lvi));
end;
end;
end;
finally
FreeMem(ForwardTable);
end;
SendMessage(GetDlgItem(hApp, 101), WM_SETREDRAW, Integer(TRUE), 0);
end;
function MainDlgProc(hWnd : HWND; uMsg : UINT; wParam : wParam; lParam : lParam) : BOOL; stdcall;
begin
Result := FALSE;
case uMsg of
WM_INITDIALOG :
begin
hApp := hWnd;
CreateColumnsListview(GetDlgItem(hApp, 101));
SendMessage(GetDlgItem(hApp, 101), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT or LVS_EX_CHECKBOXES);
end;
WM_COMMAND :
begin
case LoWord(wParam) of
102 : DisplayRoutingTable;
end;
end;
WM_DESTROY, WM_CLOSE :
begin
PostQuitMessage(0);
end;
end;
end;
begin
InitCommonControls;
DialogBox(hInstance, MAKEINTRESOURCE(101), 0, @MainDlgProc);
end.
[/more]
Однако это тупо в лоб сразу все маршруты, а нужны именно постоянные. Нет ли спооба?
Подскажите пожалуйста как обрезать в текстовом файле длину строк до одного слова, и в конце оставщегося слова добавить ;.
Например:
есть текст:
Иван ПетроВ
Сергей Коновалов
Саша Пупкин
и.т.д.
а должно остаться:
Иван;
Сергей;
Саша;
и.т.д
Спасибо.
Например:
есть текст:
Иван ПетроВ
Сергей Коновалов
Саша Пупкин
и.т.д.
а должно остаться:
Иван;
Сергей;
Саша;
и.т.д
Спасибо.
MsdLamer
Зайди на сайт Королевство Делфи http://www.delphikingdom.com/ ,
там есть раздел для новичков и лабораторным работам.
Зайди на сайт Королевство Делфи http://www.delphikingdom.com/ ,
там есть раздел для новичков и лабораторным работам.
Хорошо спасибо. Пойду схожу...)))
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.