Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Ich krieg das Handle von abgeleitetem Edit nicht!

  Alt 4. Aug 2005, 07:07
Zitat von Red six:
Im moment hab ich aber ein anderes problem mit den Handles...

Achtung ich zeig mal den Code (lacht ja nicht ich mach sowas zum ersten mal)

Delphi-Quellcode:
constructor TRoundEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  Self.Ctl3D := False;

  Canvas := TCanvas.Create;
  Canvas.Handle := GetDC(Self.Handle);
end;

procedure TRoundEdit.Paint;
begin
  Canvas.RoundRect(Self.Left, Self.Top, Self.Width, Self.Height, 10, 10);
end;
Nur mal so ein paar Stichworte:

1. Dein Control ist von TEdit abgeleitet, das heißt, du bekommst alle "vererbten" Eigenschaften und Methoden mit dem Schlüsselwort inherited und nicht (wie du oben mal geschrieben hast), indem du "TRoundEdit." davor schreibst. Das "Self." davor kannst du auch weglassen.

2. Einen Canvas holt man sich nur, wenn man auch wirklich zeichnen will, und nicht schon vorher. Eben weil da ein HDC als Handle drin ist und das nicht ewig hält.

3. Du zeichnest nur dich, ggf. willst du danach auch noch das Edit-Control zeichnen mit "inherited Paint;"

4. Ein TEdit basiert auf einem nativen Windows-Control. Da ist das Ableiten schwieriger als bei einer reinen Delphi-Komponente. Manche Dinge, die du vielleicht im Sinn hast, gehen eventuell überhaupt nicht bzw. lassen sich nicht verändern.

Zitat von Red six:
Was bewegt da den Compiler dazu "Element hat kein übergeordnetes fenster" auszugeben? Ich hab hier mal gesucht und nen Thread von 2003 gefunden (den ich nicht wieder ausgraben wollte) und dort war auch das Problem irgentwie ein anderes... Naja...
Ist das wirklich eine "Compilermeldung" oder eine Fehlermeldung während der Laufzeit auf?
In welcher Zeile tritt der Fehler auf?
Wie erzeugst du dein Control?
Volker
  Mit Zitat antworten Zitat