Einzelnen Beitrag anzeigen

Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Transparente Komponente - Flackern

  Alt 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)
  Mit Zitat antworten Zitat