Форум: "Основная";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Вниз
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.027 c