Главная страница
    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.012 c
1-25395
WOLT_19
2003-12-24 18:41
2004.01.09
Запуск проги.


3-25253
ShadowSmart
2003-12-10 14:22
2004.01.09
Сжатие *.mdb через ADO


6-25468
lena19
2003-11-08 10:49
2004.01.09
как узнать мак адрес сетевой платы


14-25600
mm0
2003-12-16 18:34
2004.01.09
Русские идут...возможно скоро и АМД и ИНТЕЛ уйдут на покой!!!!


3-25247
trever
2003-12-13 12:27
2004.01.09
Recordset





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