Autor Beitrag
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: So 07.11.04 00:43 
HINWEIS: Ich weiß, ich habe diesen Thread schonmal gepostet im Unter-Forum "Dateizugriff", aber da gehen wesentlich weniger User rein, also habe ich es nochmal hier herein gepostet. An die Mods: Der Thread in Dateizugriff kann gelöscht werden

Hallo.

Ich habe ein Problem beim Erstellen eines Stringtables.

Ich hab die Anleitung von www.del-net.com/frmDelphiMultiLan.html benutzt und eine Textdatei so erstellt und als "LanFile.rc" abgespeichert. Aber der Compiler sagt:
Zitat:

[Fehler] RLINK32: Unsupported 16bit resource in file "C:\Dokumente und Einstellungen\User\Desktop\Progg\Lang.rc"

Was tun ?

Auch das umwandeln per brcc32.exe in ne RES-Datei geht nicht.

Hoffe auf schnelle Antworten.
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: So 07.11.04 01:17 
Wenn ich ein mehrsprachiges Programm mache, dann mache ich das mit .ini - Dateien, doch dann musst du beim laden des Programmes eine recht lange procedure schreiben, in der du jedem einzelnem Objekt die Eigenschaft aus der .ini zuweist.
zb:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Button1.caption:=ini.readstrinf('Buttons','1','');
Button2.caption:=ini.readstrinf('Buttons','2','');
Button3.caption:=ini.readstrinf('Buttons','3','');
// und so weiter ....


ich denke, dass dir das nicht bei deinem Problem hilft, aber sicherlich eine alternative ist.

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 07.11.04 09:22 
LonghornUser hat folgendes geschrieben:
Aber der Compiler sagt:
Zitat:

[Fehler] RLINK32: Unsupported 16bit resource in file "C:\Dokumente und Einstellungen\User\Desktop\Progg\Lang.rc"

Was tun ?

Umwandeln in eine RES-Datei.

Zitat:
Auch das umwandeln per brcc32.exe in ne RES-Datei geht nicht.

Kannst du das begründen? Wenn ich das Beispiel von der von dir genannten Seite nehme:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
STRINGTABLE
BEGIN
  1, "Sprachwandler"
  2, "Deutsch"
  3, "Englisch"
  1001, "LanguageChanger"
  1002, "German"
  1003, "English"
END

als "test.rc" speichere und dann schlicht und einfach
ausblenden Quelltext
1:
brcc32 test.rc					

eingebe, dann erhalte ich auch die "test.res", die sich ebenso problemlos in das Programm einbinden lässt.

btw: Wenn du den Weg von der genannten Seite wählst, dann wäre es vllt. besser, für jede Sprache eine eigene Ressourcendatei anzulegen.
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: So 07.11.04 09:24 
Jo, danke erstmal. Bis jetzt habe ich es mit normalen Txtdateien gemacht. geht ja auch. Aber ich habe mehrere EXEn und für die zweite EXE stehen die strings am ende der 300 zeilen-Datei und da muss ich jetz readln(afile,Zeile); ca. 280 mal hinschreiben. und das ist nich so das wahre. Und mit den INIs ist es wohl fast dasselbe, denke ich mal.

In dem artikel von dem link stand eine zuweisung per nummer und das wäre echt super. Hat denn nieman mit solch einem Table je gearbeitet (von de Mods) ??
Oder gibts noch ne andere Möglichkeit mit einer solchen Nummernzuweisung ??
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: So 07.11.04 09:32 
Ohhhh :shock: Habe den Fehler entdeckt ;) Hatte statt 1,2,3 der übersicht halber 001, 002, 003 genommen. jetz gehts. danke für die anregung !!!!
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 07.11.04 09:32 
Ich verstehe nur Bahnhof. Es erklärt sich doch mehr oder weniger durch die Seite.

Was denn für Nummern? Redest du von den IDs der Strings? Dann schau sie dir doch mal richtig an. Es sind immer die gleichen. Für die englischen Texte wurde einfach nur die 1000 dazu addiert. Und nun schau dir das an:
Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
const
  GERMAN = 0;      // Offset deutsche Version
  ENGLISH = 1000;  // Offset englische Version

function GetStringFromRessource(ID, Offset: Integer): string;
var
  p: PChar;
begin

  p := StrAlloc(256);
  try
  if LoadString(hInstance, ID + Offset, p, 255) <> 0 then
    Result := p
  else
    Result := '';
  finally
    StrDispose(p);
  end;
end;

Und probier´s aus:
ausblenden Delphi-Quelltext
1:
2:
ShowMessage(GetStringFromRessource(1,GERMAN));
ShowMessage(GetStringFromRessource(1,ENGLISH));

dann weißt du auch, wie das mit der "Nummernzuweisung" funktioniert.
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: So 07.11.04 09:45 
Nochmal :) Das Problem war einfach nur, dass ich bei den IDs die falschen Zahlen genommen hatte. Beispiel:
Ich hatte
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
STRINGTABLE
BEGIN
  001, "Hallo"
  002, "Beispiel"
[...]
  287, "Nochwas" 
END

statt
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
STRINGTABLE
BEGIN
  1, "Hallo"
  2, "Beispiel"
[...]
  287, "Nochwas" 
END

genommen und das verursachte, dass es net ging ;) Das war nur wegen der Übersicht. Aber egal nun gehts ohne Probleme und macht mein Programm sicherlich um einige KBs leichter. Danke !!