Таблица 5.8. Сообщения, обрабатываемые элементом управления

IP Address Control

Сообщение

ірм_сьеакаоокебз

Назначение

Очистить поле адреса

іріуизетаоокезз

Считать адрес

ірм_ізвіл]ж

Проверить, не пустое ли поле адреса

ірм_зетаоокезз

Установить адрес

їрм_ЗЕТТОСиЗ

Передать фокус заданному полю элемента управления

ірм_ЗЕТЕЛШЕ

Установить ограничения назначения в заданном поле

Кроме перечисленных, IP-редактор извещает приложение об изменениях, произведенных пользователем, путем посылки ему сообщения WM_NOTIFY.

Следует иметь в виду, что IP-редактор не является потомком обычного редактора (TCustomEdit) и не обрабатывает характерные для того сообщения ЕМ_ХХХХ, так что название TCustomiPEdit отражает только внешнее сходство.

В создаваемом коде компонента первым делом нужно переписать конструктор Create и метод createParams. Последний метод вызывается перед созданием окна для установки его будущих параметров. Именно здесь нужно инициализировать библиотеку общих элементов управления ComCtl32 и породить новый класс окна.

constructor TIPEditor.Create(AOwner: TComponent);
begin
inherited Create (AOwner) ;
ControlStyle := [csCaptureMouse, csClickEvents, csItoi±>leClicks, csOpaque];
Color := clBtnFace;
Width := 160;
Height := 25;
Align := alNone;
end;
procedure TIPEditor.CreateParams(var Params: TCreateParams) ;
begin
InitCommonControl(ICC_INTERNET_CLASSES);
inherited CreateParams (Params) ,-CreateSubClass(Params, WC_IPADDRESS) ;
end;

После создания свое значение получает дескриптор окна Handle (это свойство унаследовано от TwinControi). Все чтение/запись свойств элемента происходит путем обмена сообщениями с использованием этого дескриптора. Минимально необходимыми для работы являются свойства IP (задает IP-адрес в редакторе), ipstring (отображает его в виде текстовой строки) и процедура clear (очищает редактор).

Реализовано это следующим образом:

Г'.||истим1' 5.2. исходный код компонента TCusiomiric'dii .' ■ "\

unit uIPEdit; interfасе

uses

Windows, Messages, SysUtils, Classes, Controls; type

TCustomlPEdit = class(TWinControl)

private

{ Private declarations } FIPAddress: DWORD;
FIPLimits: array [0..3] of word;
FCurrentField : Integer;
//procedure CMWantSpecialKey(var Msg : TCMWantSpecialKey);
message CM_WANTSPECIALKEY;
procedure WMGetDlgCode(var Message: TWMGetDlgCode) ,-message WM_GETDLGCODE;
procedure CMDialogChar(var Message: TCMDialogChar);
message CM_DIALOGCHAR;
//procedure CMDialogKey(var Message: TCMDialogKey);

message CM_DIALOGKEY; procedure CNNotify(var Message: TWMNotify); message CN_NOTTFY; protected

{ Protected declarations } function GetIP(Index: Integer): Byte;
procedure SetIP(Index: Integer;
Value: Byte);
function GetMinIP(Index: Integer): Byte;
procedure SetMinIP(Index: Integer;
Value: Byte) ;
function GetMaxIP (Index: Integer): Byte;
procedure SetMaxIP(Index: Integer;
Value: Byte) ;
function GetlPString: string;
procedure SetlPString(Value: string);
function IsBlank: boolean;

procedure SetCurrentField(Index: Integer); //

procedure CreateParams(var Params: TCreateParams);
override;
procedure CreateWnd;
override;

⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс