Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   aus typisierter Konstante mach Variable (https://www.delphipraxis.net/162357-aus-typisierter-konstante-mach-variable.html)

David Martens 18. Aug 2011 16:00

Delphi-Version: 5

aus typisierter Konstante mach Variable
 
Für eine kontextsensitive Hilfe habe ich folgenden Code benutzt.
Code:
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)
  );
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.

jetzt wollt' ich aus der Konstanten einfach eine Variable machen, die im Initialisierungsteil mit den Ressourcenstrings gefüllt wird:
Code:
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.
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.

Gruß David

jaenicke 18. Aug 2011 16:31

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:
C_Hilfe_GDV[0] := ...
Ja, und die sinnvollste Lösung wäre einfach ein besseres Übersetzungstool... ;-)
Dass du da extra Code schreiben musst, ist... suboptimal...
Diese ganzen Daten sollten besser aus einer Datei geladen werden.

David Martens 18. Aug 2011 16:49

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 ;)

himitsu 18. Aug 2011 16:49

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.

David Martens 19. Aug 2011 11:50

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).

himitsu 19. Aug 2011 12:40

AW: aus typisierter Konstante mach Variable
 
Du könntest, in dein Konstantenarray, natürlich auch RessourceStrings aufnehmen.
Macht die VCL auch an einigen Stellen.

Daniela.S 19. Aug 2011 17:27

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...

David Martens 23. Aug 2011 12:53

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:

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;
Und initHelpKeys wird beim Programmstart einmal aufgerufen. Ist jetzt erstmal eine schnelle (quickanddirty) Umsetzung. Ich werde wohl noch auf eine Globale Liste umstellen...

Gruß David


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 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