DelphiXakep, номер #047, стр. 047-078-1 IP Config. Часть 2 Horrific aka Фленов Михаил (smiandr@mail.ru) www.cydsoft.com/vr-online Сегодня я закончу рассказ, начатый в позапрошлом номере ][. А именно - мы напишем полноценный вариант программы IP Config. Напоминаю, что в прошлый раз мы создали форму и поместили на нее компонент TPageControl с двумя закладками. Мы научились получать от системы все, что находится на первой закладке, и теперь осталось только заполнить вторую закладку полезной инфой. Сегодня нам предстоит познакомиться с самым интересным - мы научимся получать из системы количество установленных сетевых устройств и их свойства. Среди этих свойств будет определение IP-адреса и маски сети. Только что я зашел в свой TheBat и понял, что вопрос о том, как определить IP-адрес, чуть ли не самый популярный. Но я эту тему пока не затрагивал в журнале, потому что способ, который я сегодня покажу, будет достаточно сложным. Зато он позволяет определить IP и маску любого сетевого устройства, установленного в системе. Design time Открой пример, который мы написали в позапрошлой статье, и подкорректируй вторую закладку, как на рисунке 1. На этой закладке у меня вверху расположен компонент TComboBox, в котором будет список установленных в системе сетевых устройств. Чуть ниже находится компонент TListView, у которого нужно установить следующие свойства: Name - изменим имя компонента на IPListView. ViewStyle - здесь нужно указать vsReport. Columns - здесь нужно создать две колонки с именами IP Address и Subnet Mask (IP-адрес и маска сети). Я люблю писать такие вещи на английском языке, но если хочешь, то можешь писать хоть на китайском. Дальше идут компоненты TLabel, в которых мы будем выводить полученную из системы информацию. Список устройств Теперь научимся получать список установленных в системе сетевых устройств. Я советую это делать по событию OnShow для формы. В этом случае проверка будет происходить только при появлении формы, а потом мы будем лишь получать информацию об уже выбранном устройстве. Где-то я видел тулзу, которая обновляла этот список при каждом обращении пользователя к любому элементу. Лично я не понял в этом смысла. Если ты считаешь, что за время выполнения программы список может измениться (например, включили новое USB устройство), то для таких случаев лучше добавить кнопку "Обновить" и не мучить пользователя бесполезными задержками. Итак, по событию OnShow для главной формы пишем следующий код: procedure TSystemInfoForm.FormShow(Sender: TObject); var pAdapterInfo, pAdapt:PIP_ADAPTER_INFO; pAddrStr:PIP_ADDR_STRING; begin //Очищаю список устройств AdapterCB.Items.Clear; //Получить количество устройств AdapterInfoSize:=0; Err:=GetAdaptersInfo(nil, AdapterInfoSize); //Если произошла ошибка, то... if (Err0) and (ErrERROR_BUFFER_OVERFLOW) then begin AdapterCB.Items.Add('Error'); exit; end; //Получить информацию об устройствах. pAdapterInfo := PIP_ADAPTER_INFO(GlobalAlloc(GPTR, AdapterInfoSize)); GetAdaptersInfo(pAdapterInfo, AdapterInfoSize); pAdapt := pAdapterInfo; //Проверяю тип полученного адаптера |


















































































































