Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigene Komponente wird übermalt (https://www.delphipraxis.net/98287-eigene-komponente-wird-uebermalt.html)

DIET3RIX 24. Aug 2007 12:26


Eigene Komponente wird übermalt
 
Hallo, ich schon wieder.

Ich habe eine Komponente geschriben, leider wird die immer übermalt wenn ich z.B. die Größe verändere oder andere Form/Fenster drüber bewege.

Woran liegt das bzw. wie kann ich das verhindern.
Hier ein bissle Code:
Delphi-Quellcode:
procedure TMyWinCtrl.Paint;
var
  Rect   : TRect;
  notUsed : HWND;
begin
  Rect              := GetClientRect;
  Canvas.Handle     := GetDeviceContext(notUsed);
  Canvas.Brush.Color := FBGColor;
  Canvas.Font.Color := FFont.Color;
  Canvas.Font.Size  := FFont.Size;
  Canvas.Font.Style := FFont.Style;
  Canvas.Font.Name  := FFont.Name;
  Canvas.Pen.Color  := FBorderColor;
  Canvas.Pen.Style  := FBorder;

  if ColorToRGB(FBGColor) > -1 then
  begin
    Canvas.FillRect(Rect);
    Canvas.Rectangle(Rect);
  end;

  if FText <> '' then
  begin
    Canvas.TextOut(5,5, FText);
  end;

end;

shmia 24. Aug 2007 12:55

Re: Eigene Komponente wird übermalt
 
Die Zuweisung an Canvas.Handle ist falsch.
Die VCL besorgt sich schon selber das richtige Handle.

DIET3RIX 24. Aug 2007 13:01

Re: Eigene Komponente wird übermalt
 
Wenn ich das weg machen, dann bekomme ich 'ne Fehlermeldung: "Leinwand/Bild erlaubt kein zeichnen."

shmia 24. Aug 2007 13:03

Re: Eigene Komponente wird übermalt
 
Von welche Klasse ist dein Control abgeleitet ?

mkinzler 24. Aug 2007 13:05

Re: Eigene Komponente wird übermalt
 
Du musst dafür sorgen, daß bei jedem repaint deine Zeichencode aufgerufen wird z.B. durch Überschreiben von .DoPaint.

DIET3RIX 24. Aug 2007 13:09

Re: Eigene Komponente wird übermalt
 
@shmia
Ich leite von der Klasse TWinControl ab.

@mkinzler
Sorry, ich kann dir leider nicht folgen :/

bernau 24. Aug 2007 13:17

Re: Eigene Komponente wird übermalt
 
Zitat:

Zitat von DIET3RIX
@shmia
Ich leite von der Klasse TWinControl ab.

Leite Deine Klasse von TCustomControl ab.
Dann deine Paint-Methode mit override deklarieren.
Und
Canvas.Handle := GetDeviceContext(notUsed);
weglassen.


Gerd

DIET3RIX 24. Aug 2007 13:49

Re: Eigene Komponente wird übermalt
 
alles klar, viele Dank.
Mit der TCustomControl Klasse funktioniert es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz