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

Вниз

Как создать обработчик события OnMouseClick у компонента Animate?   Найти похожие ветки 

 
Dido   (2003-11-06 22:32) [0]

Заранее благодарен!


 
Dido   (2003-11-06 23:27) [1]

Удалено модератором


 
DriveSoft ©   (2003-11-07 00:07) [2]

Удалено модератором


 
Dido   (2003-11-07 00:33) [3]

Помогите пожалуйста!


 
wicked ©   (2003-11-07 01:09) [4]

см. справку по
TWinControl.Handle, TMessage, WM_LBUTTONDOWN/WM_LBUTTONUP

а вообще-то довольно простая задача... ;)


 
wicked ©   (2003-11-07 01:10) [5]

ой... забыл добавить в список TControl.WindowProc...
:)


 
Dido   (2003-11-07 02:27) [6]

А можно пример, что-то я не понял...


 
wicked ©   (2003-11-07 13:17) [7]

примерно так... за качество не ручаюсь - на паскале давно не писал... ;)

TForm1 = class(TForm)
...
fOldProc: TWndMethod;
...
end;

{ инициализация }
procedure TForm1.FormCreate(Sender: TObject);
begin
fOldProc := Animate1.WindowProc;
Animate1.WindowProc := MyWndProc;
end;

{ clean-up (русского термина не подобрал :)) }
procedure TForm1.FormDestroy(Sender: TObject);
begin
Animate1.WindowProc := fOldProc;
end;

{ собственно обработка }
procedure TForm1.MyWndProc(var Msg: TMessage);
var pt: TPoint;
begin
case Msg.Msg of
WM_LBUTTONDOWN: begin
{...пользователь надавил левую кнопку - обрабатываем...}
// курсор мыши в экранных координатах
GetCursorPos(pt);
// переводим в координаты компонента Animate1
MapWindowPoints(NULL, Animate1.Handle, @pt, 1);
end;
WM_LBUTTONUP: begin
{...пользователь отпустил левую кнопку - обрабатываем...}
// курсор мыши в экранных координатах
GetCursorPos(pt);
// переводим в координаты компонента Animate1
MapWindowPoints(NULL, Animate1.Handle, @pt, 1);
end;
else begin
{ другие сообщения }
end;
end;
// отдаем сообщения компоненту
fOldProc(Msg);
end;


 
wicked ©   (2003-11-07 13:21) [8]

ой... дурная сишная привычка...
вместо

> MapWindowPoints( NULL, Animate1.Handle, @pt, 1);

надо читать

> MapWindowPoints( nil, Animate1.Handle, @pt, 1);

или

> MapWindowPoints( 0, Animate1.Handle, @pt, 1);


 
DillerXX ©   (2003-11-07 13:39) [9]

Я не понял, кто даёт сообщение и вызывает MyWndProc(var Msg: TMessage) ?


 
wicked ©   (2003-11-07 13:45) [10]

читай внимательно - цитирую:
> { инициализация }
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> fOldProc := Animate1.WindowProc;
> Animate1.WindowProc := MyWndProc;
> end;

то есть MyWndProc вызывается при приходе любого сообщения на компонент...


 
Dido   (2003-11-07 15:11) [11]

Всеравно не вышло...

Вот код:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
Animate1: TAnimate;
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure MyWndProc(var Msg: TMessage);
private
fOldProc: TWndMethod;
public
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
fOldProc := Animate1.WindowProc;
Animate1.WindowProc := MyWndProc;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Animate1.WindowProc := fOldProc;
end;

procedure TForm1.MyWndProc(var Msg: TMessage);
var pt: TPoint;
begin
if Msg.Msg=WM_LBUTTONDOWN then
begin
GetCursorPos(pt);
MapWindowPoints(0, Animate1.Handle, pt, 1);
ShowMessage("!");
end;
fOldProc(Msg);
end;

end.


Реагирует на нажатие LMB даже вне компонента Animate.


 
Dido   (2003-11-07 15:36) [12]

А все уже понял, спасибо всем!


 
Dido   (2003-11-07 15:48) [13]

Единственное что, пишет предупреждение: [Warning]method "WndProc" hides virtual method of base type "TCustomForm"

Что это значит, и может нужно что-то исправить...



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

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

Наверх




Память: 0.49 MB
Время: 0.019 c
3-25213
alexeyII
2003-12-11 16:17
2004.01.09
Как выделить все строки DBGrid a?


9-25176
dimodim
2003-05-30 14:02
2004.01.09
Помогите с 3d в Дельфи икс и 2 *.X соеденить


7-25625
SammIk
2003-10-27 12:44
2004.01.09
RunTime Error


14-25599
mfender
2003-12-15 07:52
2004.01.09
Теперь в Штатах все встанет на свои места!


6-25486
shItaSS
2003-11-06 12:13
2004.01.09
Как программно опредилить в локалке комп или нет