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

Вниз

Перехват сообщений для компонент   Найти похожие ветки 

 
Ajax ©   (2003-04-21 18:00) [0]

Как перехватить стандартные сообщения (например wm_paint) для какого-либо контрола?

Мне пришло в голову 2 варианта:
1) Обрабатывать Application.OnMessage
2) Изменить оконную процедуру компонента

Вроде бы оба способа правильные, но не могу реализовать в коде.
Помогите пожалуйста.


 
Skier ©   (2003-04-21 18:01) [1]

>Ajax

> Вроде бы оба способа правильные, но не могу реализовать
> в коде.

Хорошо бы сразу и код показать...


 
Ajax ©   (2003-04-21 18:03) [2]

>Skier © (21.04.03 18:01)
>Хорошо бы сразу и код показать...

Код оказался очень глюкавым и сохранен не был.


 
Skier ©   (2003-04-21 18:08) [3]

>Ajax
:)
Тогда предлагаю ещё 3-й способ :
Написать наследника и ловить сообщение там...


 
MalkoLinge ©   (2003-04-21 18:11) [4]

типа

procedure Paint; message wm_paint//// вроде так но я что-то путаю :)


 
Ajax ©   (2003-04-21 18:19) [5]

>Skier © (21.04.03 18:08)
>Написать наследника и ловить сообщение там...

Кстати, забыл сказать, пытался... :-) Получилось еще хуже...

>MalkoLinge © (21.04.03 18:11)
>procedure Paint; message wm_paint//// вроде так но я что-то путаю :)

Я тоже так думаю, только вот не получается. Если можешь, подкинь код пожалуйста.


 
Skier ©   (2003-04-21 18:27) [6]


> Кстати, забыл сказать, пытался... :-) Получилось еще хуже...


?!

procedure WMPaint(var Msg : TWMPaint); message WM_PAINT;
begin
//your code goes here...
end;


 
Skier ©   (2003-04-21 18:27) [7]

procedure TYourComponent.WMPaint(var Msg : TWMPaint); message WM_PAINT;


 
Ajax ©   (2003-04-21 19:56) [8]

type
TForm1 = class(TForm)
ListView1: TListView;
private
{ Private declarations }
procedure WMPaint(var Msg : TWMPaint); message WM_PAINT;
public
{ Public declarations }
end;
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TListView1.WMPaint(var Msg : TWMPaint);
begin
ShowMessage("Paint");
end;

end.

Но код не компилируется, так как процедура WMPaint при таком объявлении относится к форме.
procedure TListView1.WMPaint(var Msg : TWMPaint); - не компилируется вообще ни при каких обстоятельствах.


 
Skier ©   (2003-04-21 20:09) [9]


TForm1 = class(TForm)
ListView1: TListView;
private
FSavedWindowProc: TWndMethod;
procedure NewListViewWindowProc(var Message: TMessage);
public
constructor Create(AOwner : TComponent); override;
end; //TForm1

//.............................

constructor TForm1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSavedWindowProc := ListView1.WindowProc;
ListView1.WindowProc := NewListViewWindowProc;
end;


procedure TForm1.NewListViewWindowProc(var Message: TMessage);
begin
case Message.Msg of
WM_PAINT : begin
WriteLn("Your code goes here...");
FSavedWindowProc(Message); //call saved Window Procedure
end //WM_PAINT
else begin
FSavedWindowProc(Message);
end; //else
end //case
end;


 
Ajax ©   (2003-04-22 06:13) [10]

Спасибо.

Я еще вот такой код написал, вроде работает.

private
{ Private declarations }
procedure ListWMPaint(var Msg : TWMPaint); message WM_PAINT;
public
{ Public declarations }
end;

var
frmmain: Tfrmmain;

implementation

{$R *.dfm}

procedure Tfrmmain.ListWMPaint(var Msg : TWMPaint);
begin
list.Canvas.TextOut(10,10,"!!!");
inherited;
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.019 c
3-12631
Avreliy
2003-04-15 21:02
2003.05.05
Отмена Post!


8-12839
bigcrush
2003-01-28 15:31
2003.05.05
Где есть описание PNG


3-12671
K_AV
2003-04-15 12:30
2003.05.05
SQL-запросов


1-12713
levova
2003-04-23 15:39
2003.05.05
Буфер обмена


4-12979
xZero
2003-03-05 14:41
2003.05.05
Вопрос о форме