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?