Thema: Delphi TEdit Transperenz?

Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TEdit Transperenz?

  Alt 20. Feb 2010, 21:54
Der Fehler ist ganz simpel, hab ich nach 2 Minuten gehabt.
In der RepaintWindow wird GetDC aufgerufen, aber der erzeugte DC nirgends gespeichert. Im Gegenteil: In der Zeile, die zum Freigeben gedacht war, wird extra ein weiterer erzeugt und der dann freigegeben.
Dadurch kann der SPeicher auch nicht wieder freigegeben werden. Korrekt sieht das so aus:
Delphi-Quellcode:
procedure TZ9Edit.RepaintWindow;
var
  DC, MyDC: hDC;
  TmpBitmap, Bitmap: hBitmap;
begin
  if FTransparent then
  begin

    MyDC := GetDC(Handle);
    FPainting := true;
    HideCaret(Handle);
    DC := CreateCompatibleDC(MyDC);
    TmpBitmap := CreateCompatibleBitmap(MyDC, Succ(ClientWidth), Succ(ClientHeight));
    Bitmap := SelectObject(DC, TmpBitmap);
    PaintTo(DC, 0, 0);
    BitBlt(MyDC, BorderRec[BorderStyle] + BorderWidth,
      BorderRec[BorderStyle] + BorderWidth, ClientWidth, ClientHeight, DC, 1, 1, SRCCOPY);
    SelectObject(DC, Bitmap);
    DeleteDC(DC);
    ReleaseDC(Handle, MyDC);
    DeleteObject(TmpBitmap);
    ShowCaret(Handle);
    FPainting := false;

  end;
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat