![]() |
Objekt+Properties über Strings ansprechen
Hallo Delphifreunde,
mit der Funktion FindComponent kann man ja Objekte fast wie in einem Array ansprechen, wenn man die Objekte durchnummeriert und anschließend in einer Schleife abarbeitet. Ich hätte gerne in Datenbankfeldern(string) den Namen, die Eigenschaft und den Typ gespeichert und in einem weiteren Feld den Eigenschaftswert eingetragen. Anschließend möchte ich das Objekt im Programm ansprechen können. Irgendwie hänge ich jetzt und komme nicht weiter. Vielleicht kann mir jemand von euch weiterhelfen.
Delphi-Quellcode:
Wie müsste ich die Strings "zusammensetzen" damit ich diese dann als Objekt ansprechen kann.
// in der Tabelle TDB stehen die Felder zur Verfügung
cmp := TDB['cmpName']; // im Feld cmpName steht 'Edit1' (string) pro := TDB['cmpProperty']; // im Feld cmpProperty steht 'Text' (string) typ := TDB['cmpTyp']; // im Feld cmpTyp steht 'TEdit' (string) als Typ txt := TDB['cmpTxt']; // im Feld cmpTxt steht 'eins' (string) als Eigenschaftswert // soweit bin ich gekommen (FindComponent(cmp) as TEdit).text := txt; // Ergebnis Edit1.text := 'eins' Geht den sowas überhaupt, oder macht da der Compiler Schwierigkeiten? Danke für jede Hilfe ciao LingNeu |
Re: Objekt+Properties über Strings ansprechen
Ganz so einfach geht das nicht. FindComponent durchsucht ja nur eine Liste von Kontrollelementen nach dem Element mit dem angegebenen Namen.
Um Ähnliches für Objekte zu realisieren, musst Du die Objekte, zusammen mit einem Namen in einer Liste speichern. Dafür eignet sich z.B. eine TStringList und deren Methode 'AddObject'. |
Re: Objekt+Properties über Strings ansprechen
Hallo alzaimar,
da hast Du Recht - das ist anscheinend nicht ohne Weiteres zu lösen. Ich habe nun mal ein ganz einfache Beispiel kreiert Sind nur 5 Edits. Die ersten 4 enthalten die Strings Im Edit5 kommt das Ergebnis. Ich bräuchte lediglich noch den String von Edit2 und Edit3 Schade, das es da keine Möglichkeit gibt. ciao LingNeu
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var cmp,pro,typ,txt: string; begin cmp := Edit1.Text ; //'Edit5' pro := Edit2.Text ; //'Text' typ := Edit3.Text ; //'TEdit' txt := Edit4.Text ; //'eins' (FindComponent(cmp) as TEdit).Text := txt; //Ausgabe erfolgt in Edit5 // so wäre es ideal ... //(FindComponent(cmp) as typ).pro := txt; end; |
Re: Objekt+Properties über Strings ansprechen
Kann man das dann nicht über größere Case Schleifen zuweisen?
Erkläre doch mal genauer, was du damit machen willst. Vielleicht gibt es einen anderen Lösungsansatz. |
Re: Objekt+Properties über Strings ansprechen
Das "as typ", bzw eigentlich das "is typ" kannst du über .ClassName lösen lösen.
Für den Rest, also das "pro", wirst du die RTTI bemühen müssen. |
Re: Objekt+Properties über Strings ansprechen
hallo zusammen,
danke für eure Hinweise. Ich wollte mir ein mehrsprachiges System aufbauen. Natürlich weiß ich, dass es da fertige Sachen gibt. Da kenne ich z.B. die SiComponenten und dort bin ich auf die Idee gekommen, mir auch sowas anzulegen. Bei den SiComponenten werden alle Komponenten mit den Eigenschaften - Text oder Caption in einer Tabelle mit ihrem Text abgelegt und man kann sich mehrere Spalten anlegen. Dabei repräsentiert jede Spalte eine eigene Sprache und der Anwender kann in seiner Landessprache die entsprechenden Texte eingeben. Bei Applikationsstart werden die Objekte mit ihren hinterlegten Eigenschaften gefüttert. In der 1.Spalte der Tabelle stehen also z.B. Label1.Caption Edit12.Text copyright In der 2.Spalte stehen die deutschen Texte 'Hauptname' 'Meier' 'Firma xy' Wenn es mir gelänge meine Komponenten per Hand in eine Tabelle einzupflegen, könnte ich die passenden Texte jederzeit ändern und eben auch auf andere Sprachen umstellen. Na, vielleicht hat von euch einer noch eine Idee ciao LingNeu |
Re: Objekt+Properties über Strings ansprechen
![]() Dort hab ich auch ein eigenes System verbaut, welches über die Komponentennamen geht. Wenn ich mal mehr Zeit hab, dann will ich das auch mal erweitern und noch etwas umbauen. Aktuell wird ja aus einem Konstanten-Array gelesen. Und welche Property nun geändert wird, wird über den Typen der gefundenen Komponente bestimmt. Man muß also eine .pas austauschen und neu kompileren, um die Sprache zu ändern. (wo das Array herhommt ist aber egal ... man könnte es auch aus einer Datei auslesen) |
Re: Objekt+Properties über Strings ansprechen
@himitsu,
danke für den Hinweis. Uff - da muss ich noch viel lernen. ... Aber, ohne Fleiss ... ciao LingNeu |
Re: Objekt+Properties über Strings ansprechen
Zitat:
Und ich will nicht behaupten daß dieses "System" supergut ist oder es mal werden wird, aber für meine Bedürfnisse ist es soweit ausreichend. Und da du ja anscheinend in eine ähnliche Richtung gehn willst, kannst'e dir auch gern was abgucken. Gut, den Namen des Property mitzugeben wäre wesentlich flexibler, aber nötig ist es oftmals garnicht, da viele Komponenten eine gemeinsame Basiskomponente haben, über welche man den Text dann zuweisen könnte. In meinem alten ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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