![]() |
Eigene Komponente: Position wird nicht richtig gesetzt
Hmm, ich komm grad nicht weiter, obwohl es wahrscheinlich nur eine Kleinigkeit ist...
Ziel ist ein Edit mit angehängtem Label (ich weiß, dass gibt es bereits, ich mach es trotzdem selbst). Ich leite von TCustomEdit ab und erzeuge darin ein Label abgeleitet von TCustomLabel.
Delphi-Quellcode:
Soweit so gut, nun soll das Label 100 Punkte VOR dem Edit liegen (siehe im Konstruktor), wenn ich das Editfeld auf dem Formular platziere dann haben anscheinend Left und Top des Edit den Wert 0, da das Label auf der Position -100,0 eingefügt wird. Blöderweise geht das weder zur Entwurfs- noch zur Laufzeit.
TbroseEdit = class(TCustomEdit)
private fLabel: TbroseEditLabel; function GetCaption:TCaption; procedure SetCaption(Value: TCaption); protected procedure SetParent(AParent: TWinControl); override; public constructor Create(AOwner: TComponent); Override; destructor Destroy; override; published property Caption: TCaption read GetCaption write SetCaption; property EditLabel: TbroseEditLabel read fLabel write fLabel; property OnChange; property OnEnter; property OnExit; end; constructor TbroseEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); Height := 17; BevelInner := bvRaised; BevelKind := bkFlat; BevelOuter := bvLowered; BorderStyle := bsNone; //Label erzeugen fLabel := TbroseEditLabel.Create(self); fLabel.SetBounds(Left - 100, Top, 100, 17); //FDoAutocomplete := True; //FIndex := -1; end; procedure TbroseEdit.SetParent(AParent: TWinControl); begin inherited SetParent(AParent); if fLabel = nil then exit; fLabel.Parent := AParent; fLabel.Visible := True; end; |
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Du musst das Label doch mit verschieben, wenn das Edit verschoben wird, oder?! :)
|
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Ja, das stimmt schon, soweit bin ich aber noch gar nicht. Es ist ja schon beim ersten Platzieren nicht da wo es hin soll.
|
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Zitat:
a) Schau dir doch TLabeledEdit an, wie es da gemacht wird b) Überschreibe die Methode Resize. Da drin kannst du dann das Label neu Ausrichten. |
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Ich habe jetzt mal was ergänzt.
Delphi-Quellcode:
Jetzt stimmt es zumindest mal zur Laufzeit, aber noch nicht zur Entwurfszeit.
procedure TbroseEdit.WMSize(var Message: TWMSize);
begin fLabel.SetBounds(Left - 100, Top, 100, 17); inherited; end; procedure TbroseEdit.WMMove(var Message: TWMMove); begin fLabel.SetBounds(Left - 100, Top, 100, 17); inherited; end; |
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Zitat:
Wie gesagt, nimm Resize. |
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Überschreibe SetBounds des Edits und positioniere dort bach dem Aufruf von inherited das Label.
Gruß, teebee |
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Zitat:
Ich glaube das ich mit Resize auch nichts anderes erreiche, als wie schon oben beschrieben, aber ich kann es gern mal probieren. |
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Zitat:
Dies sendet keine Windowsnachricht. Deine Methode wäre so total nutzlos. Ich glaube aber das Resize nicht beim Loading kommt, also nimm vlt. doch besser SetBounds wie teebee gesagt hat. |
Re: Eigene Komponente: Position wird nicht richtig gesetzt
Zitat:
edit: Ich nehms zurück, es funktioniert, aber auch nur zur Laufzeit. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz