Форум: "Основная";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
ВнизПерехват сообщений для компонент Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c