Самоучитель по Delphi 7 для профессионалов




Создание нового компонента на базе элементов управления из библиотеки ComCtl32 - часть 6


 then Exit;

FIPLimits[Index] := MAKEIPRANGE(HiByte(FIPLimits[Index]), Value);

SendMessage(Handle, IPM_SETRANGE, Index, FIPLimits[Index]);

 end;

function TCustomlPEdit.GetMaxIP(Index: Integer): Byte; begin if (Index<0) or (Index>3) 

then

Result := 0 

else

Result := HiByte(FIPLimits[Index]);

 end;

procedure TCustomlPEdit.SetMaxIP(Index: Integer; Value: Byte);

 begin

if (Index<0) or (Index>3) then Exit;

FIPLimits[Index] := MAKEIPRANGE(Value, LoByte(FIPLimits[Index]));

SendMessage(Handle, IPM_SETRANGE, Index, FIPLimits[Index]);

 end;

procedure TCustomlPEdit.Clear,

 begin

SendMessage(Handle, IPM_CLEARADDRESS, 0, 0); 

end;

function TCustomlPEdit.IsBlank: boolean;

 begin

Result:= SendMessage(Handle, IPM_ISBLANK, 0, 0) = 0; 

end;

procedure TCustomlPEdit.SetCurrentField(Index: Integer); 

begin

if (Index<0) or (Index>3)

 then Exit;

FCurrentField := Index;

SendMessage(Handle, IPM_SETFOCUS, wParam(FCurrentField), 0) ;

 end;

function TCustomlPEdit.IPDwordToString(dw: DWORD): string;

 begin

Result := Format('%d.%d.%d.%d',

[FIRST_IPADDRESS(dw),

SECOND_IPADDRESS(dw),

THIRD_IPADDRESS(dw),

FOURTH_IPADDRESS(dw)]);

 end;

function TCustomlPEdit.IPStringToDword(s: string): DWORD; 

var i,j : Integer;

NewAddr, Part : DWORD;

begin

NewAddr := 0; 

try

i := 0; repeat

j := PosC. ', s); if j<=l then if i<3 then

Abort else

Part := StrToInt(s) else

Part := StrToInt(Copy(s, I, j-1));

 if Part>255 then Abort; Delete(s, 1, j);

NewAddr := (NewAddr shl 8) or Part; 

Inc(i); 

until i>3; 

Result := NewAddr;

//Windows.MessageBox(0, pChar(IntToHex(FIPAddress, 8)), '', MB_Ok); 

except end;

end;

function TCustomlPEdit.GetlPString: string;

 begin

SendMessage(Handle,IPM_GETADDRESS, 0, longint(SFIPAddress));

Result := IpDwordToString(FIPAddress); 

end;

procedure TCustomlPEdit.SetlPString(Value: string);

 begin

FIPAddress := IPStringToDword(Value);

SendMessage(Handle, IPM_SETADDRESS, 0, FIPAddress); 

end;

procedure Register; 

begin

RegisterComponents('Samples', [TIPEdit]); 

end;

end.

Для удобства пользования полезно было бы добавить к компоненту CustomiPEdit задание диапазона для каждого из четырех составляющих и средства преобразования текстовой строки в двоичный адрес. Но это уже совсем другая история, к библиотеке ComQ132 отношения не имеющая.

 




Содержание  Назад  Вперед