AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Einen resourcestring über einen String ansprechen
Thema durchsuchen
Ansicht
Themen-Optionen

Einen resourcestring über einen String ansprechen

Ein Thema von bernau · begonnen am 24. Jun 2011 · letzter Beitrag vom 24. Jun 2011
Antwort Antwort
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#1

AW: Einen resourcestring über einen String ansprechen

  Alt 24. Jun 2011, 16:14
Alternative ohne Verwendung eines externen Files zur Runtime
(in Anlehung an Julian M.Bucknall, 2001, "Tomes of Delphi: Algorithms and Data Structures"):

File ResStrings.inc:
Code:
CONST
cResStrBase = $5444;
maxResCount = 12;
AA_10_10  = cResStrBase + 0;
AA_10_11  = cResStrBase + 1;
AA_10_12  = cResStrBase + 2;
AA_10_13  = cResStrBase + 3;
AA_11_10  = cResStrBase + 4;
AA_11_11  = cResStrBase + 5;
AA_11_12  = cResStrBase + 6;
AA_11_13  = cResStrBase + 7;
AA_12_10  = cResStrBase + 8;
AA_12_11  = cResStrBase + 9;
AA_12_12  = cResStrBase + 10;
AA_12_13  = cResStrBase + 11;
{..usw..}
Resourcefile:
Code:
#include "ResStrings.inc"

STRINGTABLE
BEGIN
 AA_10_10, "Dies ist ein Text zu (10_10)"
 AA_10_11, "Dies ist ein Text zu (10_11)"
 AA_10_12, "Dies ist ein Text zu (10_12)"
 AA_10_13, "Dies ist ein Text zu (10_13)"
 AA_11_10  "Dies ist ein Text zu (11_10)"
 AA_11_11  "Dies ist ein Text zu (11_11)"
 AA_11_12  "Dies ist ein Text zu (11_12)"
 AA_11_13  "Dies ist ein Text zu (11_13)"
 AA_12_10  "Dies ist ein Text zu (12_10)"
 AA_12_11  "Dies ist ein Text zu (12_11)"
 AA_12_12  "Dies ist ein Text zu (12_12)"
 AA_12_13  "Dies ist ein Text zu (12_13)"
 {..usw..}
END
Compile Resource:
Code:
brcc32.exe ResStrings.rc
Projektfile:
Code:
{...}

implementation

{$R *.dfm}
{$R ResStrings.res}
{$I ResStrings.inc}

type
  tArrResStr = array of string;

var
  ArrResStr: tArrResStr;

// an die Logik der Bezeichnung der Elemente des Arrays anpassen !
// hier zum konkreten Beispiel der verwendeten Stringtable
procedure PrepareArray(var Arr: tArrResStr);
var
  i, j, z, basis: integer;
begin
  setlength(Arr, maxResCount);
  basis := 10;
  z := basis;
  j := 0;
  for i := Low(Arr) to High(Arr) do
  begin
    case i of
      0: ;
      4:
        begin
          inc(z, 1);
          j := 0;
        end;
      8:
        begin
          inc(z, 1);
          j := 0;
        end;
      {...}
    else inc(j);
    end;
    Arr[i] := format('AA_%2.d_%2.d', [z, basis + j]);
  end;
end;

procedure ClearArray(var Arr: tArrResStr);
begin
  setlength(Arr, 0);
end;

function IndexOf(Arr: tArrResStr; const item: string): Integer;
var
  i: Integer;
begin
  Result := -1;
  for i := Low(Arr) to High(Arr) do
  begin
    if AnsiSameText(item, Arr[i]) then
    begin
      Result := i;
      Break;
    end;
  end;
end;

function constantentext(ResConst: word): string; overload;
begin
  setlength(result, 255);
  LoadString(hinstance, ResConst, pchar(result), 255);
end;

function constantentext(ResConstName: string): string; overload;
var
  ResConst: Word;
begin
  ResConst := IndexOf(ArrResStr, ResConstName);
  result := pchar(constantentext(cResStrBase + ResConst));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PrepareArray(ArrResStr);
  // Beispiel der Übergabe per Indexkonstante als String
  Label1.caption := constantentext('AA_10_10');
  Label2.caption := constantentext('AA_11_13');
  // Beispiel der Übergabe unmittelbar als Indexkonstante
  Label3.caption := constantentext(AA_12_12);
  ClearArray(ArrResStr);
end;
Da zur Compiletime die Logik der in der Stringtable vergebenen Indexkonstanten feststeht, muss allein die Zuordung der Namen dieser Indexkonstanten zu den Strings des entspr. Arrays mit Hilfe einer Funktion PrepareArray() ausgearbeitet werden.
Dies ist die eigentliche Aufgabe der Anpassung an das konkrete Projekt. Jedoch dürfte die Ausarbeitung dieser Funktion wohl keine ernsthaften Probleme machen, wenn die Namen der Indexkonstanten nach einem logischen Prinzip vergeben werden, welches dann wiederum in dieser Funktion umgesetzt wird.
  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 05:15 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