![]() |
Eigenschaften von erzeugten Komponenten
Hallo ihr Lieben,
ich habe ein Formular erstellt, welches je nach vorheriger Auswahl sein Aussehen etwas ändert. Zu Deutsch: je nach Auswahl werden andere LabeledEdits erstellt bzw. an anderen Positionen sollen sie erscheinen. Klappt soweit supi, macht auch das was ich will. XD Nun zu meinen Problem. Die LabeledEdits haben alle die gleichen Werte bei ihren Eigenschaften, bis auf Left, Top,Width und EditLabel.Caption. Mir ist aber leider nicht ganz klar, wie ich die einheitlichen Eigenschaften nur EINMAL deklarieren kann und die dann immer auf die Komponenten angewendet werden. Dabei geht es mir vor allem um die Schrift des Editlabels, welche dann anders ist, als ich sie möchte. Hier mal ein Stückchen Quelltext.
Delphi-Quellcode:
Wäre über einen Tipp froh, auch wenn irgendetwas doch noch unsauber sein sollte.
var
lbledtABS_VName: TLabeledEdit; [...] implementation [...] procedure Tneuer_Eintrag.FormShow(Sender: TObject); begin [...] lbledtABS_VName:=TLabeledEdit.Create(grp1); with lbledtABS_VName do begin Parent:=grp1; Left:=16; Top:=42; EditLabel.Caption:='Vorname:*'; Width:=121; Font.Name:='Arial'; EditLabel.Font.Name:='Arial'; Font.Size:=9; EditLabel.Font.Size:=9; Show; end; end; Liebe Grüße, das Maya |
AW: Eigenschaften von erzeugten Komponenten
Ich bin zwar nicht sicher, ob ich Dich richtig verstanden habe, aber Du könntest doch eine Methode schreiben, die nur die veränderbaren Eigenschaften als Parameter übernimmt und die Komponenten dann erzeugt und konfiguriert.
|
AW: Eigenschaften von erzeugten Komponenten
Willst du jetzt sowas wie Defaultwerte haben, welche beim nächsten Erstellen genommen werden?
Entweder du machst das über eine externe Funktion/Ersteller-Klasse oder du fügst es direkt in die Komponenten ein. - von TLabeledEdit ableiten - als
Delphi-Quellcode:
/
class var
Delphi-Quellcode:
die Defaultwerte hinzufügen
class property
- den Constructor überschreiben und dort die (eventuell vorher gesetzten) Defaultwerte den entsprechenden Property zuweisen - dann nur noch die fehlenden Werte zuweisen Den Constructor kann man dann noch um die Parameter erweitern, für diejenigen Eigenschaften, welche sich immer ändern, wie z.B. die Position. In deinem Fall würde ich grp1 als OwnerAndParent-Parameter gemeinsam dem Constructor übergeben und dazu noch Rect (TRect) oder Left, Top und Width, sowie die Caption. Dazu dann noch Font-Name und Font-Size als Defaultwerte über Class-Property. |
AW: Eigenschaften von erzeugten Komponenten
Zitat:
Zitat:
Das mit einer externen Funktion, so in der Art hatte ich auch schon eine Idee, aber war mir nicht sicher, wie ich das effektiv hinbekomme. Dachte schon an eine Schleife, aber wirklich weitergekommen bin ich auf dem Weg auch nicht, da ich mir überlegte, dass über die Namen zu machen, aber die sind jedes Mal recht verschieden. Auch brauche ich halt nicht jedes Mal immer die gleichen LabeledEdits, mal brauche ich das für die Faxnummer, mal nicht. |
AW: Eigenschaften von erzeugten Komponenten
So schwer ist das eigentlich nicht.
Delphi-Quellcode:
Und nun einfach TSimpleLabeledEdit verwenden.
try
TSimpleLabeledEdit = class(TLabeledEdit) private class var FDefaultFontName: String; FDefaultFontSize: Integer; public class property DefaultFontName: String read FDefaultFontName write FDefaultFontName; class property DefaultFontSize: Integer read FDefaultFontSize write FDefaultFontSize; constructor Create(AOwnerAndParent: TWinControl; ALeft, ATop, AWidth: Integer; ACaption: String; AVisible: Boolean = True); end; constructor TSimpleLabeledEdit.Create(AOwnerAndParent: TWinControl; ALeft, ATop, AWidth: Integer; ACaption: String; AVisible: Boolean = True); begin inherited Create(AOwnerAndParent); //den originalen Constructor aufrufen Parent:=AOwnerAndParent; Left:=ALeft; Top:=ATop; Width:=AWidth; EditLabel.Caption:=ACaption; Font.Name:=FDefaultFontName; EditLabel.Font.Name:=FDefaultFontName; Font.Size:=FDefaultFontSize; EditLabel.Font.Size:=FDefaultFontSize; Visible := AVisible; //Show bzw. Hide end; |
AW: Eigenschaften von erzeugten Komponenten
Zitat:
Trotzdem hab ich zu dem Quelltext noch 'n paar Fragen. Zitat:
Dann noch eine Frage. Ich kann ganz normal dann Free verwenden, um die Komponenten wieder freizugeben, ja? Wie gesagt, das Ableiten ist nicht meine Stärke. |
AW: Eigenschaften von erzeugten Komponenten
Nur blöd, wenn der übergebene Owner kein TWinControl ist :stupid:
[edit] Da der rote Kasten mal wieder versagt hat: das galt dem letzten Post von himitsu [/edit] |
AW: Eigenschaften von erzeugten Komponenten
@Deddy: Konnte ich mir schon denken. :D Bloß trotzdem verwirrst du mich jetzt noch ein Stückchen mehr.
|
AW: Eigenschaften von erzeugten Komponenten
Ich würde das wie gesagt einfacher machen:
Delphi-Quellcode:
Um nun ein neues EditLabel anzulegen, rufst Du diese Methode auf und übergibst Left, Top und Caption in den Parametern.
procedure TDeinForm.AddNewLabeledEdit(aLeft, aTop: integer; const aCaption: string);
var le: TLabeledEdit; begin le := TLabeledEdit.Create(self); le.Left := Left; le.Top := aTop; le.EditLabel.Caption := aCaption; (* hier nun die gemeinsamen Eigenschaften definieren *) le.Parent := self; //oder ein Panel oder wo es sonst hinsoll (* usw. *) end; |
AW: Eigenschaften von erzeugten Komponenten
AH!! Deddy, jetzt ist der Groschen gefallen. Ging leider heute etwas centweise, für mich ist ja auch schon Freitag. ;)
Ich probier's gleich nach der Mittagspause aus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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 by Thomas Breitkreuz