![]() |
Delphi-Version: 5
aus typisierter Konstante mach Variable
Für eine kontextsensitive Hilfe habe ich folgenden Code benutzt.
Code:
Leider habe ich dabei außer acht gelassen, daß unser Übersetzungstool nur Ressourcenstrings übersetzt. (im obigen Beispiel: rcCaptionForm). Aber weil es in eine Konstante übertragen wird, wird an dieser Stelle keine Übersetzung angeworfen.
type
TC_Hilfe_Link = record Name : String; // Caption des Formulars Number : integer; // Sprungnummer in der Hilfedatei onlyPart : boolean; // false = gesamter Text in Name muss mit der Caption des // aufrufenden Formulars übereinstimmen // true = der Caption des Formulars kann weiterer Text anhängen end; const C_AnzahlHilfe_LST = 3; C_Hilfe_LST : array[0..C_AnzahlHilfe_LST - 1] of TC_Hilfe_Link = ( (Name : '' ; Number : 4001 ; onlyPart : false), (Name : 'Filter' ; Number : 4062 ; onlyPart : false), (Name : rcCaptionForm ; Number : 4017 ; onlyPart : false) ); jetzt wollt' ich aus der Konstanten einfach eine Variable machen, die im Initialisierungsteil mit den Ressourcenstrings gefüllt wird:
Code:
Das geht natürlich nicht, aber wie kann ich denn jetzt am einfachsten C_Hilfe_GDV Werte zuweisen? Am besten nach dem gleichen Schema, damit alles übersichtlich bleibt.
const
C_AnzahlHilfe_GDV = 26; var C_Hilfe_GDV : array[0..C_AnzahlHilfe_GDV - 1] of TC_Hilfe_Link; ... implementation begin C_Hilfe_GDV := ( (Name := '' ; Number : 3001 ; onlyPart : false), (Name : 'Filter' ; Number : 3068 ; onlyPart : false), (Name : rcCaptionForm ; Number : 3084 ; onlyPart : false) ); end. Gruß David |
AW: aus typisierter Konstante mach Variable
Um welche Delphiversion geht es denn? Wirklich um Delphi 5 (oder um XE wie im Profil)?
Bei Delphi 5 bleibt nur die ganz manuelle Zuweisung der einzelnen Arrayitems, z.B. mit einer Helperfunktion, die den Record initialisiert, damit der Quelltext übersichtlicher bleibt. Bei Delphi XE kannst du auch einen Konstruktor im Record benutzen. In jedem Fall bleibt nur manuell die einzelnen Zeilen zuzuweisen:
Delphi-Quellcode:
Ja, und die sinnvollste Lösung wäre einfach ein besseres Übersetzungstool... ;-)
C_Hilfe_GDV[0] := ...
Dass du da extra Code schreiben musst, ist... suboptimal... Diese ganzen Daten sollten besser aus einer Datei geladen werden. |
AW: aus typisierter Konstante mach Variable
Ich weis gar nicht wie da Version 5 hinkommt.
Ich habe Delphi XE Enterprise. Und danke für den Tipp, genau das habe ich auch schon herausgefunden. Und mach es auch so ;) |
AW: aus typisierter Konstante mach Variable
Man könnte natürlich auch die Konstannte belassen und dann über eine Schleife alles in die Variable umkopieren.
|
AW: aus typisierter Konstante mach Variable
@himitsu: Das ist mir jetzt zu hoch. Mein Problem ist das die Konstanten nicht mit übersetzt werden. Da macht ein Kopieren der Konstanten in Variablen keinen Sinn, andersrum (ja).
|
AW: aus typisierter Konstante mach Variable
Du könntest, in dein Konstantenarray, natürlich auch RessourceStrings aufnehmen.
Macht die VCL auch an einigen Stellen. |
AW: aus typisierter Konstante mach Variable
Liste der Anhänge anzeigen (Anzahl: 1)
Zwar nicht schön, aber es gibt auch die Möglichkeit dem Compiler in den Einstellungen zu sagen, dass Konstanten zuweisbar sind...
|
AW: aus typisierter Konstante mach Variable
@Daniela.S: Das ist schon eingestellt. Leider geht das auch nicht.
Hier nur noch kurz die Lösung mit der es funktioniert:
Delphi-Quellcode:
Und initHelpKeys wird beim Programmstart einmal aufgerufen. Ist jetzt erstmal eine schnelle (quickanddirty) Umsetzung. Ich werde wohl noch auf eine Globale Liste umstellen...const C_AnzahlHilfe_LST = 13; var C_Hilfe_LST : array[0..C_AnzahlHilfe_LST - 1] of TC_Hilfe_Link; .. procedure initHelpKeys(ProgNr: integer); implementation procedure initHelpKeys(ProgNr: integer); begin case ProgNr of I_PROGNR_LST : begin C_Hilfe_LST[00].Create('' , 4001, false); C_Hilfe_LST[01].Create('Filter' , 4062, false); C_Hilfe_LST[02].Create(rcCaptionForm , 4064, false); // Achtung C_AnzahlHilfe_LST muß aktuell gehalten werden end; .. end; Gruß David |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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