Autor Beitrag
Michael E.
Hält's aus hier
Beiträge: 7

WIN 2000, WIN XP, WIN CE, MAC OS
D5 Enterprise, Delphi XE2
BeitragVerfasst: Fr 25.06.04 05:50 
Hallo Profis !
Ich habe folgende Problemstellung, die ich OHNE die Registry lösen möchte:

In einer sog. Systemtabelle (Paradox-Tabelle) sind Werte in 3 Spalten (Name,Wert,Typ) gespeichert (z.B. FormHeight/600/I oder Passwort/2108/A). Zu den Namen der ersten Spalte existieren in einer global verwendeten Unit entsprechend gleichnamige Variablen passenden Typs. Nun möchte ich diese Programmvorgaben beim Programmstart aus der Tabelle auslesen und mit den Werten die korrespondierenden Variablenwerte setzen. Das sollte n einer "while not t.eof do" Schleife passieren, ich möchte nicht unbedingt jede Variable einzeln setzen müssen.

Ich suche also sowas wie enumVariables oder so... um durch alle vorhanden einfach definierten variablen einer Unit oder einer Form zu iterieren und bei Übereinstimmung des Variablennamens mit einem Tabelleneintrag den Wert der Variablen neu setzen. So könnte ich sehr bequem die Programmvorgaben global ändern, ohne z.B. bei jeder Variablen in der Tabelle nachsehen zu müssen oder alle Variablen einzeln zuweisen zu müssen.

Vielen Dank für Tipps jeder Art, ich hab schon einige Stunden mit Suchen verbracht.


Moderiert von user profile icontommie-lie: Topic aus Sonstiges verschoben am Fr 25.06.2004 um 23:06
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Mi 07.07.04 20:14 
solche Funktionen gibt es nur, wenn du dir sie selbst schreibst -am besten als Klasse.
Stell dir doch mal vor, wie soll das gehen, wie soll die Funktion arbeiten, um alle (!) Variablen die zur Zeit im aktuellen Gültigkeitsbereich liegen aufzulisten. Variablenamen sind doch nur ein Konstrukt um es für die Human-resource, die vor der Glotze sitzt, den Quellcode etwas besser lesbar zu machen.

grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 08.07.04 12:10 
Ich bin nicht 100% sicher das ich dein Problem richtig verstanden habe, aber ich schätze du musst dir eine näherung machen. Dynamische Arrays, Verkettete Listem oder wenn es konfortabel werden soll ein Objekt, welches eins von beiden Kapzelt bieten sich da meiner Meinung nach an. Jeweils mit elementen eines eigenen Records, der z.B. so aussehen könnte:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
tTableVars = Record
  Name : String;
  Wert : Integer;
  Typ : Char;
end;


Vieleicht reicht dir ja aber auch schon ein eifacheres Konstrukt mit einer Stringlist. Wenn du die Werte dort z.B. so antegst:
ausblenden Quelltext
1:
'Name=Wert/Typ'					

Kannst du über
ausblenden Delphi-Quelltext
1:
WertTyp := List.Values[Name]					

die Wert Typ Kombination abfragen, diese musst du dann natürlich noch über String Operationen wieder auseinander nehmen.

Gruß
Klabautermann
Michael E. Threadstarter
Hält's aus hier
Beiträge: 7

WIN 2000, WIN XP, WIN CE, MAC OS
D5 Enterprise, Delphi XE2
BeitragVerfasst: Fr 09.07.04 14:45 
Titel: Durch Variablen iterieren
An MSCH

Vielen Dank für die Antwort... Allerdings sehe ich es nicht so ganz kompliziert wie Du, das mit dem Human Interface. Natürlich hast Du in gewissem Maße Recht. Ich denke aber trotzdem, nachdem es dem Human Interface im Quelltext möglich ist, die Variablen ganz normal anzusprechen, daß dies auch während der Laufzeit des Programms möglich sein sollte. Wenn ich zur Laufzeit z.B. mit B:=TButton.Create(PanelX) erzeugen kann, wobei B ja auch nur eine vorher definierte Variable des Typs TButton ist, kann ich zur Laufzeit durch alle so angelegten Buttons iterieren. Warum sollte das mit Variablen nicht gehen ? Das mit der Klasse leuchtet mir in diesem Zusammenhang schon eher ein. Denkabr wäre also, eine Klasse zu schreiben und dann auf dieser Klasse basierend die Variablen anzulegen.

Wie müßte eine solche Klasse aussehen ? Ich habe mich mit den Tiefen dieser doch sehr abstrakten Dinge noch nicht auseinandergesetzt sondern solche Sachen bisher nur aus guten Büchern abgeschrieben. Kannstr Du mir so eine Klasse schreiben ?

Vielen Dank
Michael E.
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Fr 09.07.04 18:53 
sodele,
also der Vergleich
B: TButton vs C: Integer

hinkt etwas. Da die Iteration mit B very simple ist, wenn man beim Parent einfach ControlComponents durchläuft, wärenddessen C einfach so im Speicher rumdümpelt. Und genau da kommt die Klasse zu Vorschein. B ist eine, C nicht und B brauch normalerweise immer ein Parent und der weiss "bescheid", wärenddessen C überhaupt nicht registriert wird - ausser von, der den Quelltext schreibt und darauf zurück greift. Insofern ist eine Iteration - wenn nicht mit Hilfskontruktionen (meine Vorredner)- unmöglich.

Ein Klasse zu implementieren ist mal nich eben schnell gepinselt; lass mich mal nachdenken. Ich reich ausserdem mal das ans Forum weiter.
grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?