Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
Delphi XE2 Professional
|
Re: Transparente Komponente - Flackern
10. Nov 2006, 06:16
Hi!
Zitat von crypti:
jedoch funktioniert das nicht.
Das ist zu ungenau. Was funktioniert nicht? Welche Fehlermeldungen?
Zitat von crypti:
Nun dachte ich, man könnte die Zeichnungsaktivitäten erst in einem Bild (Bitmap) machen und dann am Ende der Paint Funktion einfach mit dem Original Canvas zusammenmergen,
Das ist genau das, was du tun musst, um das Flackern zu beseitigen. Hier ein Beispiel:
Delphi-Quellcode:
var
Buffer : TBitmap;
begin
Buffer:=TBitmap.Create;
Buffer.Width:=Self.Width //...usw
//Transparenz entsteht, wenn man das anzeigt, was hinter dem Control ist
//also fordern wir unseren Parent auf, genau das zu zeichnen
DrawParentBackground(Buffer.Canvas.Handle);
//Jetzt das malen, was wir wollen
//Danach den Buffer ins Control malen
BitBlt(Self.Canvas.Handle,
0,0,
Self.Width, Self.Height,
Buffer.Canvas.Handle,
0,0,
SRCCOPY);
Buffer.Free;
end;
//leider weiß ich nicht mehr, von wem die Prozedur war :(
procedure TMyControl.DrawParentBackground(AToDC : HDC);
var
SaveIndex: Integer;
Position: TPoint;
begin
SaveIndex := SaveDC(AToDC);
GetViewportOrgEx(AToDC, Position);
SetViewportOrgEx(AToDC, Position.X - Left, Position.Y - Top, nil);
IntersectClipRect(AToDC, 0, 0, Parent.ClientWidth, Parent.ClientHeight);
Parent.Perform(WM_ERASEBKGND, AToDC, 0);
Parent.Perform(WM_PAINT, AToDC, 0);
RestoreDC(AToDC, SaveIndex);
end;
Benjamin Schwarze If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
|
|
Zitat
|