Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-12957
PoiSoN2003
2003-03-13 06:30
2003.05.05
Два драйва


1-12792
vidiv
2003-04-22 12:10
2003.05.05
Как вывести в канвас текст под углом?


6-12856
Volly
2003-03-09 18:41
2003.05.05
Перенос содержимого HTM файла в Memo


3-12644
vil
2003-04-16 10:10
2003.05.05
Есть ADOQuery1


11-12675
zetta
2002-07-11 10:59
2003.05.05
где грабли? delphi и система виснут при попытке закр. программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский