Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Resourcestring-Name in der Laufzeit erstellen (https://www.delphipraxis.net/173915-resourcestring-name-der-laufzeit-erstellen.html)

Jean 24. Mär 2013 09:51

Resourcestring-Name in der Laufzeit erstellen
 
Hallo an alle Delphi-Spezialisten,

ich benötige euren Rat, da ich an diesem Punkt feststecke.

Ich benutze eine Unit mit resourcestrings (ca. 50 Einträge, können noch mehr werden).

Abhängig, an welcher Stelle im Programm ich mich befinde, soll an einer definierten Position im Hauptfenster ein entsprechender resourcestring an ein Label übergeben werden.

Folgendes Problem tritt auf:
Um den entsprechenden resourcestring anzeigen lassen zu können, baue ich während der Laufzeit den Namen des resourcestrings zusammen. In der dafür zuständigen Variable steht dann auch z.B. rscString0038.

Nun möchte ich den rscString0038 an das Label übergeben.
Dort wird aber nur 'rscString0038' ausgegeben, da in der Stringvariable der resourcestring-Name mit den Hochkommas steht. Die Funktion Pos liefert mir bei der Suche nach dem Hochkomma (') kein Ergebnis (=0).

Was kann ich tun, dass der zusammengebaute resourcestring als solcher auch gelesen wird? :roll:

Vielen Dank für eure Bemühungen im Voraus.

PS: Ich habe schon im Internet recherchiert, aber nichts passendes gefunden.

Uwe Raabe 24. Mär 2013 13:07

AW: Resourcestring-Name in der Laufzeit erstellen
 
Das geht nicht! ResourceStrings werden vom Compiler ähnlich behandelt wie Konstanten. Die Referenz wird schon beim Compilieren aufgelöst.

Du kannst dein Problem z.B. mit einer StringList (Name-Value) lösen, die zur Laufzeit aus den ResourceStrings aufgebaut wird.

Alternativ kannst du auch auf FindResource/LoadResource (siehe MSDN) ausweichen.

Jean 24. Mär 2013 13:17

AW: Resourcestring-Name in der Laufzeit erstellen
 
Hallo Uwe,

danke für die Nachricht.

Ich bin noch nicht so lange mit Delphi vertraut. Wie kann ich das mit der Stringlist und den vorhandenen resourcestrings machen?

Vielen Dank,

Jean

Jean 24. Mär 2013 13:57

AW: Resourcestring-Name in der Laufzeit erstellen
 
Hallo nochmal an alle Spezialisten,

ich will es hier noch einmal anders formulieren, da ich denke, dass mein Anliegen eventuell falsch verstanden wurde.

Ich habe eine Reihe von definierten Resourcestrings.
z.B.
rscString001: 'Hello';
rscString002: 'World';
.
.
.
rscString055: 'Good bye';
.
.

Übergebe ich an Label1.caption:= rscString055; dann wird mir auch "Good bye" angezeigt.

Nun baue ich aber, bedingt durch verschiedene Positionen im Programm, den Namen zum Aufrufen des existierenden Resourcestrings auf, d.h. der Aufrufname wird über Variablen zusammengesetzt, also wie zum Beispiel oben (sRes := 'rscString' + sNr:= '055' = rscString055). Das wäre jetzt der Name eines vorhanden Resourcestrings der in der Variable steht.
Das Problem ist nur, der Name steht mit Hochkommas in der Variable ('rscString055'). Wenn ich das an das Label übergeben, dann wird natürlich nur dieser Strings angezeigt und nicht der eigentliche Resourcestring.

Ich hoffe, dass mein Problem jetzt richtig verstanden wird.

Ich hoffe auf eure Ideen.

Vielen Dank.

jfheins 24. Mär 2013 14:43

AW: Resourcestring-Name in der Laufzeit erstellen
 
Dein Anliegen wurde schon richtig verstanden und es geht nicht so wie du es dir denkst.
An dieser Stelle:
Delphi-Quellcode:
 Label1.caption:= rscString055;
sieht der Compiler, was du machst, und wandelt den Code quasi um in
Delphi-Quellcode:
 Label1.caption:= 'Good bye';
Der Name der Konstante kommt später gar nicht mehr vor.

Etwas anderes ist es, wenn du die Daten aus einer Datei liest: Dann kannst du zur Laufzeit die Namen und Werte speichern und mit einer kleinen Suche jederzeit den Wert zu einem Namen herausfinden.

Jean 24. Mär 2013 15:39

AW: Resourcestring-Name in der Laufzeit erstellen
 
Hallo jfheins,

war mir nicht sicher, ob es richtig verstanden wurde. Aber anscheinend wohl doch.

Vielen Dank nochmal für den Hinweis. Schade, da muss ich nun auf eine Alternativmöglichkeit ausweichen.

Also danke nochmal an das Forum. Habe hier wirklich schon gute Ansätze gefunden.

Viele Grüße,

Jean


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz