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

Вниз

Можно ли вообще избежать в TCustomControl отрисовки?   Найти похожие ветки 

 
vasyaVN   (2003-12-23 14:33) [0]

Всем привет! Я опять со своим несчастным TCustomControl. Никак не получается избежать мерцания. Я изменяю размеры его только даже на нем ничего не рисую. WM_SIZING не ловит, что бы переделать WMPaint. Как бы избавиться от этих злощастных квадратов при изменении размеров и координат?


 
TUser ©   (2003-12-23 14:44) [1]


> Можно ли вообще избежать в TCustomControl отрисовки

Перехватить WMPaint и ничего не делать.


 
vasyaVN   (2003-12-23 14:50) [2]

Перехватил, все так как мне нужно, но другие контролы теперь тоже не рисуются...


 
TUser ©   (2003-12-23 15:23) [3]

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


 
vasyaVN   (2003-12-23 16:44) [4]

Сделано вот так, при чем другие контролы, которые не рисуются никакого отношения не имеют к нему. Может я что не так сделал...?
Я уже куда только не помещал эту строчку

procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

и в приват и в протектед...

type
TMyControl= class(TCustomControl)
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

...
procedure TMyControl.WMPaint(var Message: TWMPaint);
begin
end;


 
TUser ©   (2003-12-23 17:30) [5]

Ну вот
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TMyControl= class(TCustomControl)
private
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
public
Flag:boolean;
constructor Create(AOwner: TComponent); override;
end;

var
Form1: TForm1;
MyControl1:TMyControl;

implementation

{$R *.dfm}

procedure TMyControl.WMPaint(var Msg:TWMPaint);
begin
if Flag then
MyControl1.Canvas.FillRect(MyControl1.Canvas.ClipRect);
form1.Repaint;
end;

constructor TMyControl.Create(AOwner: TComponent);
begin
Flag:=true;
inherited Create(AOwner);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MyControl1:=TMyControl.Create(Application);
MyControl1.Parent:=form1;
MyControl1.Left:=120;
MyControl1.Top:=120;
MyControl1.Width:=100;
MyControl1.Height:=100;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MyControl1.Flag:=false;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MyControl1.Canvas.Pen.Color:=clBlack;
MyControl1.Canvas.Ellipse(20,20,50,50);
end;

end.


Ясно - до нажатия Button1 WMPaint все время зарисовывает контрол. А если его нажать, то такой зарисовки не будет, и при нажатии на Button2 увидишь круг. Совершенно аналогично запрещается перерисока нафиг.


 
MV   (2003-12-23 17:53) [6]

Это здорово!
А можно ли, отловив в обработчике формы сообщение, скажем WM_PAINT или WM_INVALIDATE, определить, кто его послал?



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
1-25440
del_programmer
2003-12-23 17:42
2004.01.09
skin


11-25269
Дмитрий С
2003-04-18 06:56
2004.01.09
TKOLToolBar


14-25553
vajo
2003-12-18 17:37
2004.01.09
Объясните пожалуйста такую ситуацию.


1-25425
ЮрийК
2003-12-22 18:29
2004.01.09
Селектирование слов в WebBrowser


6-25472
Кен
2003-11-07 02:34
2004.01.09
TWebbrowser Как отловить ссылку на которую кликнул пользователь ?