Цитата:
Сообщение от Fox Mulder
мне нужно было решить две проблемы
1 - чтобы в инспекторе объектов можно было задать popupmenu. эта проблема решилась благодаря angvelem
2 - прописать реакцию на нажатия кнопки мыши. но тут чет так и не пашет.
... поскипано много букафф...
тоесть нету ни x, ни y, ни button.
|
Ну OnMouseDown должно быть не TNotifyEvent а TMouseEvent
в метод DoMouseDown нужно добавить
override;
Цитата:
Сообщение от Fox Mulder
сейчас всплыла и вовсе любопытная и неприятная вещь
как я понял код прописаный в
Код:
procedure TForm1.MyComponent1MouseDown(Sender: TObject);
begin
end;
во время проектирования программы, выполняется ДО кода выполняемого в событие OnMouseDown который прописан внутри компонента
тоесть допустим я пишу внутри компонента:
первый код
Код:
procedure TMyComponent.WMMouseDown(var msg: TMessage);
var int1:integer;
begin
inherited;
if Assigned (FOnMouseDown) then FOnMouseDown(Self);
int1:=1;
end;
во время создания программы с моим компонентом пишу:
второй код
Код:
procedure TForm1.MyComponent1MouseDown(Sender: TObject);
begin
Edit1.Text:=strtoint(int1);// на самом деле я конечно передаю это значение подругому, тут я так написал для простоты
end;
и ожидаю увидить в Edit1 значение "1", но это не происходит как я понимаю потому что второй код выполняется ДО первого. в итоге в Edit появляется единица только после повторного нажатия на компонент
|
ну сам же пишешь
Код:
inherited;
if Assigned (FOnMouseDown) then FOnMouseDown(Self); // сначала вызвать обработчик
int1:=1; // затем присвоить единицу
а вообще, нужно только, как и советовал
angvelem, добавить в секцию
published свойство OnMouseDown и всё.
А если нужна специфическая реакция, то сделай так
Код:
...
protected
procedure DoMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);override;
published
property OnMowseDown; //только это
end;
implementation
procedure TMyComponent.DoMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
(*
тут код который выполнится до стандартного например
*)
Int1 := 1;
inherited; // затем стандартный обработчик, он же вызовет OnMowseDown
(*
тут код который выполнится после стандартного например
*)
if Int1 <> 1 then ShowMessage(' Int1<>1');
end;