![]() |
Delphi-Version: 12 Athens
UserInterface-Klasse
Hallo,
für einen wiederkehrenden Block von Eingabewerten würde ich gern den Transfer der UI-Elemente ins Objekt als eigene Klasse auslagern, also sinngemäß:
Delphi-Quellcode:
Das geht natürlich so nicht, weil die Edit-Felder hier ja nicht bekannt sind, die liegen ja am TargetContainer (oder sogar auch nicht).type TDataClass = Class(TObject) public ValueA: Integer; ValueB: string; end; type TTransferClass = Class(TObject) public procedure GetValues(TargetContainer: TWinControl; MyObject: TDataClass); end; Implementation procedure TTransferClass.GetValues(TargetContainer: TWinControl; MyObject: TDataClass); begin TryStrToInt(TargetContainer.edt_ValueA.Text, MyObject.ValueA); MyObject.ValueB := TargetContainer.edt_ValueB.Text; end; Eine Variante wäre es, die Controls erst hier zu erzeugen. Finde ich nicht beliebig praktisch, weil die Controls nicht immer an der gleichen Position sind und dann müsste man je nach TargetContainer unterschiedliche Koordinaten definieren. Die zur Designzeit schon zu erzeugen ist da einfacher. Auch möglich wäre es, via "FindComponent" die Controls zu suchen. Da heißt es (wohl zu recht), dass das nicht empfehlenswert ist, weil langsam und fehleranfällig, wenn sich doch mal ein Controlname ändert. Ist der Ansatz grundsätzlich verkehrt oder gibt es eine Variante dafür, die ich übersehe? Danke! Ein frohes neues Jahr! |
AW: UserInterface-Klasse
Du kennst aber Frames, oder?
Mache dir doch
|
AW: UserInterface-Klasse
Hallo,
stimmt, an Frames hatte ich auch gedacht. Solange sich die Position der Controls nicht ändern soll, wäre das einfach. Zitat:
Was enthält diese Basisklasse außer den abstrakten Methoden? Das eigentliche Abholen der Daten aus den Edits implementiere ich dann in der abgeleiteten Klasse - wenn ich das mehrmals brauche auf unterschiedlichen ParentControls muss ich das auch mehrmals implementieren? |
AW: UserInterface-Klasse
Zitat:
Zitat:
Delphi-Quellcode:
auf, um an die eingetragenen Werte in Form deines
getValues()
Delphi-Quellcode:
zu kommen.
TDataClass
Ich würde vielleicht einmal mit einem simplen Beispiel loslegen. Das sollte schnell gehen und dann wird einem das bestimmt auch klarer. PS: Bist du dir sicher, dass du
Delphi-Quellcode:
wirklich als echtes
TDataClass
Delphi-Quellcode:
machen willst? Wenn das nur eine "dumme Datenstruktur" ohne Notwendigkeit für Dinge wie Vererbung und virtuelle Methoden ist ist würde ich das auf jeden Fall als
TObject
Delphi-Quellcode:
machen, dann plagst du dich auch nicht mit Dingen wie der späteren Freigabe (
Record
Delphi-Quellcode:
) herum.
.Free()
|
AW: UserInterface-Klasse
Du kannst auch ein Interface machen und die Methoden GetValue und SetValue darüber implementieren.
Du kannst sogar mehr Controls draufbringen, musst halt beim GetValue und SetValue den Control-Namen mit angeben und das Control suchen, aber ist ja auch kein Hexenwerk. |
AW: UserInterface-Klasse
Oder Du tauschst Daten unter verschiedenen Objekten mit Messages aus, wie zum Beispiel mit dem TMessageManager.
|
AW: UserInterface-Klasse
Zitat:
danke für die Rückmeldung! ok, ich werd's mal versuchen, mal sehen, ob es klarer wird. ad Datenobjekt: tatsächlich hab ich hier records verwendet für die allermeisten der Datenstrukturen, um die es geht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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