Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: CL | DM;

Вниз

Написание своего компонента с отловом сообщений   Найти похожие ветки 

 
vvhedgehog ©   (2003-03-31 17:17) [0]

Здраствуйте мастера!
Такая задумка создать компонент типа TEdit, только с кнопкой сбоку (типа как у TSpeenEdit, но с 1 батоном). Вот.... Взял образец с книги "Borland Delphi 4. Developers Guide"...
там обрабатывается сообщение WM_SIZE..... Сделал как у них....
В рантайме объект создается и правильно отображается и размер меняет как надо. А в дизайнтайме вываливаются глюки...

Вот часть кода :

TEditPicker = class(TWinControl)
protected
fDictShowing :boolean;
pnlFake :TPanel;
btnPick :TSpeedButton;
edtEditor :TEdit;
procedure fOnPick(Sender:TObject);
procedure WMSize(var Message:TWMSize); Message WM_SIZE;
public
constructor Create(AOwner: TComponent);
destructor Destroy; override;
end;
///.....
constructor TEditPicker.Create(AOwner: TComponent);
begin
MessageDlg("before constructor",mtInformation,[mbOk],0);
inherited Create(AOwner);
MessageDlg("constructor First",mtInformation,[mbOk],0);
edtEditor := TEdit.Create(Self);
with edtEditor do begin
Parent := Self;
ReadOnly := true;
end;

pnlFake :=TPanel.Create(Self);
with pnlFake do begin
Parent := Self;
Caption := "";
BevelInner := bvNone;
BevelOuter := bvLowered;
Left := edtEditor.Width-1;
Width := edtEditor.Height+1;
Height := edtEditor.Height;
end;

btnPick := TSpeedButton.Create(Self);
with btnPick do begin
Parent := pnlFake;
AutoSize := false;
Flat := true;
Caption := "";
Align := alClient;
Glyph.LoadFromResourceName(HInstance, "BTNCHOOSESMALL");
OnClick := fOnPick;
end;
MessageDlg("constructor Last",mtInformation,[mbOk],0);
Height := edtEditor.Height;
Width := edtEditor.Width+btnPick.Width;
end;
procedure TDBPicker.WMSize(var Message: TWMSize);
begin
Inherited;
edtEditor.Width := Message.Width - pnlFake.Width + 1;
pnlFake.Left := edtEditor.Width-1;
end;

Если кто сталкивался подкажите плиз! Заранее спасибо.


 
vvhedgehog ©   (2003-03-31 18:06) [1]

Вот!!!! Сам нашел!!!!
конструктор нужно было объявить с директивой override:

constructor Create(AOwner: TComponent); override;


Такие дела.... Интересно почему в рантайме работало?



Страницы: 1 вся ветка

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
3-83323
IL
2003-05-06 23:09
2003.05.26
Транзакции в MySQL ???


1-83515
sosv
2003-05-13 15:09
2003.05.26
URL


4-83832
Angel Potion
2003-03-24 19:54
2003.05.26
Как можно ненадолго (на несколько миллисекунд) приостановить выполнение потока, и чтобы при этом поток не тормозил всю систему. Sleep с количеством миллисекунд тормозит, и причём изрядно.


14-83736
Cooller
2003-05-07 12:47
2003.05.26
Кпасивая форма


1-83545
andrey_pst
2003-05-13 17:37
2003.05.26
---|Ветка была без названия|---