Форум: "KOL";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
ВнизVCL комп-т имеет метод Paint. A в KOL что ? Что же переопределять Найти похожие ветки
← →
ABM (2003-01-28 19:16) [0]VCL комп-т имеет метод Paint.
A в KOL что ? Что же переопределять, если надо рисовать по другому ?
OnPaint не подходит, потому, что вызывает неприятное мерцание.
Как использкется OnEraseBackGround ?
Подскажите пожалуйста быстрее !
← →
SPeller (2003-01-28 20:58) [1]У меня OnPaint не мерцает. Просто сначала нарисуй на контексте в памяти, а затем BitBlt на контекст контрола.
← →
SPeller (2003-01-28 21:00) [2]Ладно, вот тебе большущий наглядный пример как это делается, и безо всякого моргания:
procedure TfrmEditor.pnEditorLabelPaint(Sender: PControl; DC: HDC);
var r, tr: TRect; tmDC, tmBmp, tmObj: Cardinal;
st1, st2: string; c: PCanvas;
begin
r := MakeRect( 0, 0, Sender.Width, Sender.Height );
tmDC := CreateCompatibleDC( DC );
tmBmp := CreateCompatibleBitmap( DC, Sender.Width, Sender.Height );
tmObj := SelectObject( tmDC, tmBmp );
c := NewCanvas( tmDC );
c.Pen.Color := 0;
c.Pen.PenWidth := 1;
c.Pen.PenStyle := psSolid;
c.Brush.Color := RGB( 242, 242, 242 );
c.Rectangle( r.Left, r.Top, r.Right, r.Bottom );
if Sender = CurCtl then begin
c.Pen.Color := clLime;
( r.Left + 1, r.Top + 1, r.Right - 1, r.Bottom - 1 )Ладно, вот тебе большущий наглядный пример как это делается, и безо всякого моргания:
procedure TfrmEditor.pnEditorLabelPaint(Sender: PControl; DC: HDC);
var r, tr: TRect; tmDC, tmBmp, tmObj: Cardinal;
st1, st2: string; c: PCanvas;
begin
r := MakeRect( 0, 0, Sender.Width, Sender.Height );
tmDC := CreateCompatibleDC( DC );
tmBmp := CreateCompatibleBitmap( DC, Sender.Width, Sender.Height );
tmObj := SelectObject( tmDC, tmBmp );
c := NewCanvas( tmDC );
c.Pen.Color := 0;
c.Pen.PenWidth := 1;
c.Pen.PenStyle := psSolid;
c.Brush.Color := RGB( 242, 242, 242 );
c.Rectangle( r.Left, r.Top, r.Right, r.Bottom );
if Sender = CurCtl then begin
c.Pen.Color := clLime;
c.Rectangle( r.Left + 1, r.Top + 1, r.Right - 1, r.Bottom - 1 );
end;
st1 := Int2Str( Sender.Left ) + ", " + Int2Str( Sender.Top );
st2 := Int2Str( Sender.Width ) + "x" + Int2Str( Sender.Height );
c.Font.FontHeight := -11;
c.Font.Color := clMaroon;
tr.Left := 2;
tr.Top := Sender.ClientHeight div 2 - c.TextHeight( st1 ) div 2 - 8;
if tr.Top < 1 then tr.Top := 2;
tr.Right := Sender.ClientWidth - 2;
tr.Bottom := Sender.ClientHeight - 2;
c.DrawText( st1, tr, DT_CENTER );
tr.Top := Sender.ClientHeight div 2 - c.TextHeight( st2 ) div 2 + 8;
if tr.Top < 1 then tr.Top := 1;
c.DrawText( st2, tr, DT_CENTER );
tr.Left := 2;
tr.Top := 2;
c.Font.Color := clNavy;
c.Font.FontStyle := [ fsBold ];
c.DrawText( Sender.Caption, tr, DT_LEFT );
Sender.Canvas.CopyRect( r, c, r );
SelectObject( tmDC, tmObj );
DeleteDC( tmDC );
DeleteObject( tmBmp );
c.Free;
end;
← →
ABM (2003-01-29 14:31) [3]Спасибо за пример !
У меня немножко по-другому.
Я пытаюсь прорисовать форму, на которую наложен регион.
BMP-шку я держу в памяти а в OnPaint-е формы рисую ее на канве формы: Bmp.Draw(DC,0,0);
Мерцание исчезает если определить обработчик события формы OnEraseBkgnd(), даже если там нет никаких действий касетельных прорисовки - просто указатель на него не пустой. Но тогда не все контролы на форме прорисовываются правильно - например на TabControl-е не отображается RichEdit, TabControl не перерисовывает себя правильно (остаются следы от перекрывающих форм). Может есть способ заставить форму не вытирать свой фон не назначая обработчика OnEraseBkgnd ?
Буду очень признателен за советы ! Жду очень !
← →
ABM (2003-01-29 15:07) [4]Пробовал в OnMessage обрабатать WM_ERASEBKGND
если его не слать дальше, то мерцаеия нет, но прорисовка RichEdit\TabControl страдает, если слать - то все прорисовываются хорошо, но форма (те области, где рисуется BMP) сильно мерцает.
Буду очень признателен за советы ! Жду очень !<\b>
← →
SPeller (2003-01-29 16:54) [5]
> TabControl не перерисовывает себя правильно (остаются следы
> от перекрывающих форм)
А если ему Invalidate сделать?
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c