![]() |
String Table Resource mit langen Texten
Hi Leute,
wie eben gefragt, wollte ich wissen, wie ich Texte programmintern ablegen kann. Nun versuche ich dies mit Resourcen zu lösen, genauer mit einer String Table. Ich habe mir nun mit dem XN Resource Editor eine RES-File erzeugt die die entsprechenden Texte enthält. Ein Text hat etwa 500 Zeilen und 15000 Zeichen. Nun habe ich Probleme diese Texte auszulesen. Ich habe folgendes Probiert:
Delphi-Quellcode:
procedure Tdm_update.updateDatabase();
var a : array[0..20000] of char; begin if LoadString(hInstance, 1, @a, sizeof(a)) <> 0 then frm_main.Memo1.Text :=strPas(a); end Allerdings kriege ich da nur etwa die ersten 60 Zeilen ausgegeben. Ich habe auch versucht, statt des Char Arrays einen String bzw PChar zu verwenden, das ergibt allerdings Zeichensalat. Danke nochmal für eure Hilfe, gruß b |
Re: String Table Resource mit langen Texten
Die Stringtabelle bzw. der Resourcetyp RT_STRING ist meines Wissens in der Größe begrenzt.
Ich würde den Text als benutzerdefinierte Daten RT_RCDATA speichern. Nicht getestet:
Delphi-Quellcode:
function LiesMeinenText: string;
begin with TResourceStream.CreateFromID(HInstance, 1, RT_RCDATA) do begin try SetLength(Result, Size); Read(Result[1], Size); finally Free; end; end; end; |
Re: String Table Resource mit langen Texten
Eine StringTabelle ist eigentlich nur für kurze und meißt einzeilige Texte gedacht.
Wenn du wirklich sooo große Texte ablegen willst würde ich dir auch empfehlen diese als eigenstendige Resource abzulegen. PS: LoadString hat einen internen Puffer, mit fester Länge, darum geht da einfach nicht so viel (obwohl mir 60 etwas kurz vorkommt, aber vielleicht liegt dein String ja relativ am Ende :gruebel: ). |
Re: String Table Resource mit langen Texten
Danke für eure Antworten, werde mir das ansehen!
PS: Kurz zu meinem Vorhaben, vlt. habt ihr dafür ja einen besseren Ansatz: Wenn es eine neue Programmversion gibt, in der Datenbank-Änderungen notwendig sind, will ich das entsprechende SQL programmintern speichern. Beim starten der Anwendung wird die DB-Version mit der Programmversion abgeglichen, und falls notwendig entsprechend die Scripts ausgeführt. Grüße, B |
Re: String Table Resource mit langen Texten
Da diese Strings eh in der Binary bzw. intern in den Resourcen gespeichert sind, kannst du es doch auch an anderen Stellen dort ablegen?
z.B. als Konstante (Const) oder auch als Resource-Konstante (ResourceString), wobei letzteres eigentlich auch theoretisch über LoadString geht, aber dort beim Laden des Programs Delphi dieses etwas anders etrstmal in eine Art Cache legt ... es ist dann also sogar etwas flotter, als wenn der String jedesmal erst noch in der Resource gesucht und extrahiert werden müßte. Diese ResourceStrings liegen ja in Tabellen a bis zu 16 Strings vor und diese Tabellen werden als Ganzes geladen und dann erst daraus der gewünschte String rausgesucht. die Konstanten kannst du dir ja in eine extra Unit auslagen (ähnlich wie die Unit SysConst von Delphi) |
Re: String Table Resource mit langen Texten
Hi himitsu,
das nervige dabei den Text in einer Constanten zu speichern ist, das ich nach einem Copy&Paste in die Delphi IDE den kompletten String manuell verbinden muß. Also jede Zeile in Hochkommas setzen und und mit + verbinden. |
Re: String Table Resource mit langen Texten
In einer Resource-Datei (.rc) mußt du ihn aber auch formatieren.
Du könntest jetzt eine TextDatei nehmen oder eine XML (dort mußt du ja beim Kopieren nur auf < und > achten, es sei denn du nimmst gleich je eine CDATA-Section ... es passiert ja wohl nicht so schnell, daß mal ein ]]> in der Abfrage vorkommt ) |
Re: String Table Resource mit langen Texten
Hi himitsu,
Zitat:
Zitat:
|
Re: String Table Resource mit langen Texten
Zitat:
alerdings könnte man dafür ja auch einen IDE-Experten nehmen, welcher das dann passend Formatiert :angel2: Zitat:
und z.B. kurz vorm Kompilieren das Resource-Script samt der XML verarbeiten lassen. Aber dann hätten wir ja wieder eine Resource :stupid: |
Re: String Table Resource mit langen Texten
Zitat:
habe bei gockel nichts gefunden, und der GExpert scheint das nicht drauf zu haben... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 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