Показать сообщение отдельно
  #24  
Старый 04.08.2011, 11:12
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
Сообщение от Fox Mulder
мне нужно было решить две проблемы
1 - чтобы в инспекторе объектов можно было задать popupmenu. эта проблема решилась благодаря angvelem

2 - прописать реакцию на нажатия кнопки мыши. но тут чет так и не пашет.
... поскипано много букафф...

тоесть нету ни x, ни y, ни button.

Ну OnMouseDown должно быть не TNotifyEvent а TMouseEvent

Цитата:
Сообщение от Fox Mulder
по листингу http://www.delphisources.ru/forum/sh...6&postcount=12
у меня тоже чтото не получается.

в метод 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;
Ответить с цитированием