Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.037 c
1-1138282482
ma5ter
2006-01-26 16:34
2006.02.26
Число записей в диспетчере задач


2-1139777700
Norfolk
2006-02-12 23:55
2006.02.26
Обращиение к глобальным переменным из процедуры


4-1133910781
Delphi_is_cool
2005-12-07 02:13
2006.02.26
Дождаться завершения потока


15-1139144906
Yeg
2006-02-05 16:08
2006.02.26
Тригонометрическое уравнение


2-1139606768
shamanski
2006-02-11 00:26
2006.02.26
DELPHI 8 AE





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский