AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

aus typisierter Konstante mach Variable

Ein Thema von David Martens · begonnen am 18. Aug 2011 · letzter Beitrag vom 23. Aug 2011
Antwort Antwort
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#1

aus typisierter Konstante mach Variable

  Alt 18. Aug 2011, 16:00
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: aus typisierter Konstante mach Variable

  Alt 18. Aug 2011, 16:31
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: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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#3

AW: aus typisierter Konstante mach Variable

  Alt 18. Aug 2011, 16:49
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#4

AW: aus typisierter Konstante mach Variable

  Alt 18. Aug 2011, 16:49
Man könnte natürlich auch die Konstannte belassen und dann über eine Schleife alles in die Variable umkopieren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#5

AW: aus typisierter Konstante mach Variable

  Alt 19. Aug 2011, 11:50
@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).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#6

AW: aus typisierter Konstante mach Variable

  Alt 19. Aug 2011, 12:40
Du könntest, in dein Konstantenarray, natürlich auch RessourceStrings aufnehmen.
Macht die VCL auch an einigen Stellen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Daniela.S
Daniela.S

Registriert seit: 1. Mär 2008
Ort: Niederösterreich
224 Beiträge
 
Delphi XE4 Enterprise
 
#7

AW: aus typisierter Konstante mach Variable

  Alt 19. Aug 2011, 17:27
Zwar nicht schön, aber es gibt auch die Möglichkeit dem Compiler in den Einstellungen zu sagen, dass Konstanten zuweisbar sind...
Miniaturansicht angehängter Grafiken
bildschirmfoto-2011-08-19-um-18.25.32.png  
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#8

AW: aus typisierter Konstante mach Variable

  Alt 23. Aug 2011, 12:53
@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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 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