LoadString ändern, damit die TExte extern gelesen werden
-
Guten Tag geehrte Community!

Es soll möglich sein die ganzen Texte usw. nicht aus den Stringtables der RC-Datei sondern extern aus einer anderen Datei einzulesen. Ich habe auch bereits eine passende Klasse geschrieben. Diese funktioniert auch einwandfrei. Nur möchte ich jetz nicht bei jeder ID den Aufruf ändern. Daher war die Idee die LoadString entsprechend anzupassen, dass diese Dann meine Methode unterstützt.
Hat jemand schon sowas ähnliches gemacht?Der Sinn dabei ist, dass ich dann aus einer Ini-Datei die Sparacheinstellung des Programms auslesen kann und dann aus dem Textfile entsprechende Texte ziehen kann. Dafür wäre dann keine neue Sprach-DLL notwendig.
Vielen Dank im Voraus
-
Bin schon ein bißchen weiter.
Die Idee ist eine Klasse von CString abzuleiten. In diese würde ich dann eine LoadString-Funktion implementieren. Diese sollte dann einen String als Argument entgegennehmen und wprde einen CString als ergebniss liefern.
Jetzt kommt das eigentliche Problem. Ich brauch etwas, was aus
Key.LoadString(IDS_BLA_BLA);Key.LoadString("IDS_BLA_BLA");macht. Nur wie kriege ich Die "" um die IDS_* herum?
Natürlich kann ich eine Funktion schreiben, die mir die cpp-Dateien als text öffnet, diese dann nach (IDS_ durchsucht bis zur ) und dann "" vor Die Klammern reinhaut. Aber das möchte vermeiden
Hat vllt einer eine Idee, wie ich es doch mit einem Makro oder Textersetzung hionkrigen könnte???Vielen Dank
-
Könnte das eventuell per Suchen und Ersetzne mit regulären Ausdrücken funktionieren? Habe gerade Paar Sachen ausprobiert, komme aber nicht so richtig zu dem gewünschten Ergebniss

Kann mir jemand auf die Sprünge helfen?
-
warum benutzt du nicht die tatsaeachliche zahl?
es steht ja in der Resource.h
#define IDS_BLABLA 123456dann
txt.ini
[123456]
Yourtextoder
txt.ini
[TRANSL]
123456="Yourtext"oder
txt.xml
<123456="Yourtext"/>gibt es ja mehere moeglichkeiten
die ID eines strings aendert sich ja nicht, kannste direkt uebernehmen
-
Weil der Name der ID aussagekräftiger ist, als die Zahl selbst.

Die Klasse, die die Namen aus der Datei einliest benutzt eine CString-CString-HashMap. Dabei wird der Name der ID als Schlüßel benutzt. Ich hoffte ich würde die ganze Geschichte nicht noch mal anfassen müßen.Gibts eventuell ne Möglichkeit, dass ich die Zahlen als Key benutze? So dass der Key auch bei kleinen Zahlen eindeutig ist? Dann würde ich die Textdateien eventuel so anpassen, dass ich die Zahlenwerte mit aufnehme. Das Problem ist, dass ich dann das ganze wieder ausgiebig testen muss, da der Code produktiv geht Anfang November. Und die Zeit könnte ich anderweitig gebrauchen

-
n bissl dreckig aber koennte gehen
lies doch die Resource.h ein und fummel da die ID als text raus die als define angegeben ist
// anregung
txt.xml
<string ids="IDS_BLABLA" idn="123456" str="Yourtext"/>
-
Da komme ich aber um die Änderung der Textdatei nicht herum. Das heisst ich müßte meine Klasse ändern. Das heisst testen
Wenn ich aber meine Klasse so lassen kann und die aufrufende Funktion änder, müßte das ein Kollege testen (der dafür auch Zeit hat und sich damit einverstanden erklärt hat
)
-
Gibts eine einfache Möglichkeit die Stringtable wie sie in der Ressourcen-Ansicht abegbildet ist in eine Datei zu übertragen? (ID, Wert, Text). In der rc-Datei im Editor ist ja der Wert der ID nicht drin

-
#gg
file_stream.open(_T("Content.txt"), std::ios_base::out|std::ios_base::app); if(file_stream.is_open()) { CString strMsg; strMsg.Format(_T("IDS_YOURID = %d = %s\n"), IDS_YOURID, strMsg.LoadString(IDS_YOURID)); file_stream << strMsg; } file_stream.close();