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

Вниз

WM_PAINT, WM_ERASEBKGND   Найти похожие ветки 

 
Начинающий10   (2006-01-25 11:33) [0]

Добрый день!
Можно ли перехватить данные сообщения, адресованные, например, к TWinControl на форме?
Спасибо.


 
VirEx ©   (2006-01-25 18:43) [1]

угу, объяви в секции protected такую строку:
procedure MyWM_PAINT(var Msg : TMessage); message WM_PAINT;
жмёшь вроде Sift+С и IDE тебе сама пропишет функцию, или сам пропиши:
procedure TMyControl.MyWM_PAINT(var Msg : TMessage);
begin
{смотрим в хелп по API:
WM_PAINT  
hdc = (HDC) wParam; // the device context to draw in
значит в Msg.Wparam находится контекст для рисования
}
//ченить накалякаем
TextOut(Msg.Wparam,0,0,"text",4);
end;


 
Начинающий10   (2006-01-25 19:09) [2]

Имелись ввиду стандартные, например TPanel. Можно конечно для каждого ловушку поставить, но может есть способ попроще?


 
VirEx ©   (2006-01-25 19:46) [3]


>  [2] Начинающий10   (25.01.06 19:09)

есть именно для тебя "еще проще" :)
наследуйся от твоих "стандартных" и сделай свою компоненту, инсталлируй её да пользуйся новыми методами, свойствами или событиями, например:

unit TMyPanel;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

type
TMyPanel = class(TPanel)
private
{ Private declarations }
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

procedure TMyPanel .WMPaint(var Message: TWMPaint);
begin
//обрабатывай сам
end;

procedure Register;
begin
RegisterComponents("Dr.Bob", [TMyPanel]);
end;

end.


 
MBo ©   (2006-01-26 07:28) [4]

 TForm19 = class(TForm)
   StaticText1: TStaticText;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   OldSTProc: TwndMethod;
 public
   { Public declarations }
   procedure NewSTProc(var M:TMessage);
 end;

var
 Form19: TForm19;

implementation

{$R *.dfm}

procedure TForm19.FormCreate(Sender: TObject);
begin
 OldSTProc:=StaticText1.WindowProc;
 StaticText1.WindowProc:=NewSTProc;
end;

procedure TForm19.NewSTProc(var M: TMessage);
var
 PS:TPaintStruct;
 DC:HDC;
begin
 if M.Msg=WM_PAINT then begin
   DC:=BeginPaint(StaticText1.Handle,PS);
   TextOut(DC,2,2,"SomeText",Length("SomeText"));
   EndPaint(StaticText1.Handle,PS);
 end else
   OldSTProc(M);
end;


 
Начинающий10   (2006-01-26 08:48) [5]

[3] А если у меня их полсотни (в смысле разных классов) :)
[4] Спасибо. Я примерно так и сделал, но с маленькой оговоркой. Я сделал компонент со списком, в который записываются адреса всех необходимых для перехвата, и далее по тексту.



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

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

Наверх




Память: 0.47 MB
Время: 0.051 c
4-1133975347
Volf_555
2005-12-07 20:09
2006.02.26
Как генерировать разный GUID?


2-1139325472
nts
2006-02-07 18:17
2006.02.26
LPT порт


2-1139394396
webpauk
2006-02-08 13:26
2006.02.26
Z order


1-1138282482
ma5ter
2006-01-26 16:34
2006.02.26
Число записей в диспетчере задач


2-1139737306
Ярослав
2006-02-12 12:41
2006.02.26
Current_Connection после востановления из резервной копии