Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Вниз

Можно ли вообще избежать в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.011 c
4-25643
rel_
2003-11-06 16:37
2004.01.09
работа Timer ом


1-25282
Романов Р.В.
2003-12-23 14:49
2004.01.09
Терминология COM


4-25649
Popova
2003-11-06 16:47
2004.01.09
Узнать текущего пользователя


1-25336
vidiv
2003-12-20 09:59
2004.01.09
RTF2HTML


3-25206
Morfey
2003-12-11 20:02
2004.01.09
MySQL





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