Главная страница
    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.027 c
2-1139346163
serko
2006-02-08 00:02
2006.02.26
Image


2-1139486895
Dmitrij_K
2006-02-09 15:08
2006.02.26
MS Word, TypeText и ограничение 64кб


3-1135776468
VICTOR_MV
2005-12-28 16:27
2006.02.26
BDE. Два разных ПО не могут одновременно работать.


11-1120230528
Dodfr
2005-07-01 19:08
2006.02.26
Move TListView items with Drag&Drop how to ?


3-1135613699
Сатир
2005-12-26 19:14
2006.02.26
PL/SQL Developer





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