VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Программирование гнёзд.
Получаем локальный IP адрес
:
Logo

Сегодня мы рассмотрим маленький, но удаленький примерчик. В нём программа возвращает все установленые IP адреса для сетевых плат или удалённого доступа. Помимо этого, ты узнаешь, как обращатся к компонентам не по имени, а по "индексу", это очень удобная и нужная возможность.
Logo
Рис 1. Форма

Для примера брось на форму одну кнопку и несколько компонентов TEdit (например моя форма на рис 1). Для кнопки создай обработчик OnClick и напиши там:

procedure TForm1.Button1Click(Sender: TObject);
type
  TaPInAddr = Array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: Array[0..63] of Char;
  I: Integer;
  GInitData: TWSAData;
begin
 //Инициализация сокетов
 WSAStartup($101, GInitData);

 //Получаем имя локального компьютера (хоста)
 GetHostName(Buffer, SizeOf(Buffer));

 //Получаем указатель на хост
 phe := GetHostByName(buffer);
 if phe = nil then Exit;

 //Получаем указатель на массив адресов.
 pPtr := PaPInAddr(phe^.h_addr_list);
 I := 0;

 //Перечисляем все адреса
 while pPtr^[I] <> nil do
  begin
   //Вывести адрес
   TEdit(FindComponent('Edit'+IntToStr(i+1))).Text:=inet_ntoa(pptr^[I]^);
   Inc(I);
  end;

 //Закрываем сокет
 WSACleanup;
end;

На рисунке 1 показана запущенная прога. Как видишь у меня стоит два адреса, потому что у меня стоит Win2000 и две сетевухи на 10 и 100 мбит/сек.

Самым интересным является вывод результата TEdit(FindComponent('Edit'+IntToStr(i+1))).Text:=inet_ntoa(pptr^[I]^). Здесь я использую функцию FindComponent, которая ищет компонент на форме по имени. В качестве параметра я должен передать имя компонента, например, 'Edit1'. Но я делаю хитрее и передаю имя 'Edit' плюс индекс приведённый к строке IntToStr(i+1). В итоге на первом этапе я буду искать FindComponent('Edit1'), на втором этапе FindComponent('Edit2') и так далее.

Найденный с помощью функции FindComponent компонент я привожу к TEdit с помощью TEdit(FindComponent('Edit'+IntToStr(i+1))). А далее использую всю эту конструкцию, как простой TEdit компонент:

  TEdit(FindComponent('Edit'+IntToStr(i+1))).Параметр:=Значение;

Расмотрим ещё пример. Допустим у тебя стоит пять компонентов CheckBox с именами CheckBox1, CheckBox2, CheckBox3 и так далее. Чтобы перебрать все эти компоненты и узнать какой из них выделен нужно сделать так:

 for i:=1 to 5 do
  if TCheckBox(FindComponent('CheckBox'+IntToStr(i+1))).Checked then
   begin
    //i-й компонент CheckBox выделен.
   end;

Вот и всё, что я хотел тебе сегодня расказать. Мало, но интересно.

 Исходники примера забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©