Forum | | | | Stephan Sonneborn | Hallo, in der LEER32.DLL habe ich testweise mit dem ResourceBuilder zwei Strings eingefügt:
einmal in der Sprache Deutsch $0407 bzw. 1031:
und einmal in der Sprache Englisch $0809 bzw. 2057:
Die DLL habe ich über USEDLL eingebunden. Den Text weise ich so zu:
DE_Text$ = RES("GetStrings", PRGDLL&, 100, $00407)
EN_Text$ = RES("GetStrings", PRGDLL&, 100, $00809)
Aber ich bekomme die Fehlermeldung "String-Ressource nicht gefunden: #100".
Was ist falsch? |
| | | XProfan X4Schöne Grüße aus Wittgenstein von Stephan Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 28.09.2020 ▲ |
| |
| | Georg Teles | Guten Tag,
wie sieht die Leer32.DLL mit dem Ressource Hacker aus, etwa so ?
Dann müsstest Du die 100 in Anführungszeichen setzen, also
DE_Text$ = RES("GetStrings", PRGDLL&, "100", $00407)
EN_Text$ = RES("GetStrings", PRGDLL&, "100", $00809)
der 3.te Parameter ist entweder die Nummer des Stringes, beginnend mit 1 oder der Name, also in dem Fall "100"
Ich vermute, du müsstest "100" eingeben oder nur 1 als ersten String in der Ressource, dann sollte es gehen.
Grüße |
| | | | |
| | Stephan Sonneborn | Ich bearbeite die DLLs eigentlich immer mit dem Resource Builder. Da sieht das dann so aus:
Wenn ich das Bespiel aus der Hilfe eingebe und dann die so erstellte Leer32.dll mit dem Resource Builder bearbeite, kommt eine Fehlermeldung:
Mit dem ResHacker siehts so aus:
Gebe ich dann "7" als dritten Parameter an, läuft des Programm weiter, liest aber "6" als Wert bzw. Text ein, der so gar nicht in der DLL auftaucht.
Die XProfan-Fehlermeldung ist übrigens auch bei "100" als dritten Parameter dieselbe.
Bisher habe ich immer die komplette DLL (je Sprache eine DLL) ausgetauscht und mit ExtString$() gearbeitet. Da gibt man genau die Nummer in der DLL (also hier die 100) an. Aber leider eben ohne Unterscheidung bei der Sprache. |
| | | Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 28.09.2020 ▲ |
| |
| | | Hi,
ich glaube da fehlt ein Rautezeichen "#100" -
"Aktualisierte XProfan X4 - Hilfedatei (*.chm)" unter "23 - Ressourcen":
(mal die Hilfedatei durchstöbern, was Roland zwischenzeitlich so alles eingebaut hat...) |
| | | | |
| | Stephan Sonneborn | Leider hilft ein "#100" auch nicht...
Hier mal der bisherige Quellcode:
'*******************************************************************************************************'
'* Programm: Vokabeltrainer *'
''******************************************************************************************************'
'* Version: V0.01 *'
'* Stand: 28.09.2020 *'
'* Info: Vokabeltrainer *'
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Klassendefinition *'
'*******************************************************************************************************'
CLASS Vokabel = Wort$(21), \
Uebersetzung$(21), \
Genus$(2), \
Casus$(13), \
Numerus$(11), \
Verb1$(21), \
Verb22$(21), \
Verb3$(21), \
Lektion$(13)', \
' Anlegen&, \
' Importieren@, \
' Exportieren@, \
' Vorlesen@
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Variablendeklaration *'
'*******************************************************************************************************'
'*- Programm -*'
DECLARE PRGDLL&
DECLARE PrgName$
DECLARE x!, xx!, y!, yy!
'*******************************************************************************************************'
'*- Dialog -*'
DECLARE DlgText&[5,30], DlgText$[5,30]
DECLARE DlgEdit&[5,30]
DECLARE ToolBar&, ToolbarIcons& , TabControl&[5]
'*******************************************************************************************************'
'*- Vobaln -*'
DECLARE Begriff#
DECLARE String Texte[]
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Variablendimensionierung *'
'*******************************************************************************************************'
DIM Begriff#, Vokabel
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Wertzuweisungen *'
'*******************************************************************************************************'
PRGDLL& = USEDLL("Vokabeln_32.DLL")
'PRGName$ = RES("GetStrings", PRGDLL&, "#100", $00407)
PRGName$ = EXTSTRING$(PRGDLL&, 100)
ToolbarIcons& = 0'Hier später Toolbaricon eintragen
'*******************************************************************************************************'
'*- Skalierung *'
xx! = 1.30
yy! = 1.15
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Prozedurname: MainWindow *'
''******************************************************************************************************'
'* Version: V0.01 *'
'* Stand: 28.09.2020 *'
'* Info: Baut das Hauptfenster/-dialog auf *'
'*******************************************************************************************************'
PROC MainWindow
'*******************************************************************************************************'
'*- Lokale Parameter -*'
DECLARE Handle&
DECLARE Tab&[5]
DECLARE dx%, dy%
DECLARE i%
DECLARE Ende%
'*******************************************************************************************************'
'*- Wertzuweisungen -*'
x! = 1.00
y! = 1.00
dX% = 640
dy% = 480
Ende% = 0
'*******************************************************************************************************'
'*- Fensteraufbau -*'
Handle& = CREATE("Dialog", %HWND, PrgName$, 0,0,0,0)
SETWINDOWPOS Handle& = INT((%MAXX-dx%)/2)*x!,INT((%MAXY-dy%)/2)*y! - dx%*x!, dy%*y!; 0
Toolbar& = CREATE("Toolbar", Handle&, ToolbarIcons&, 0, 0, WIDTH(Handle&), 64*y!)
TabControl&[1] = CREATE("TabCtrl", Handle&, "Vokabel", 5*x!, HEIGHT(Toolbar&) + 5*x!, WIDTH(Handle&) - 2 * 5*x!, HEIGHT(Handle&) - Height(Toolbar&)-2* 5*x! )
FOR i%, 2,5,1
TabControl&[i%] = INSERTTAB(TabControl&[1], i%,"Tab "+ STR$(i%) )
ENDFOR
'*******************************************************************************************************'
'*- Ereignishandler -*'
WHILENOT Ende%
WAITINPUT
Ende%=1
ENDWHILE
'*******************************************************************************************************'
'*- Fenster schließen -*'
DESTROYWINDOW(Handle&)
'*******************************************************************************************************'
ENDPROC
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Hauptprogramm *'
''******************************************************************************************************'
CLS
Mainwindow
DISPOSE Begriff#
FREEDLL PRGDLL&
END
und die zugehörige DLL. |
| | | Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 28.09.2020 ▲ |
| |
| | H.Brill | Mach doch alles mit Rolands eingebauten Funktionen.
Declare string Vokabeln[]
cls
var string DE[] = "Erster", "Zweiter", "Dritter"
var string EN[] = "First", "Second", "Third"
/*
res("addstrings", "E:/Vokabeln.dll", "Vokabeln", 1031, DE[])
res("addstrings", "E:/Vokabeln.dll", "Vokabeln", 2057, EN[])
*/
var handle hDLL = UseDLL("E:/Vokabeln.dll")
Vokabeln[] = res("GetStrings", hDLL, "Vokabeln", 1031)
WhileLoop 0, sizeOf(Vokabeln[]) - 1
Print Vokabeln[&loop]
EndWhile
Print
Vokabeln[] = res("GetStrings", hDLL, "Vokabeln", 2057)
WhileLoop 0, sizeOf(Vokabeln[]) - 1
Print Vokabeln[&loop]
EndWhile
WaitInput
end
Das Auskommentierte Res("AddStrings",..) würde ich als extra Programm machen, das später eventuelle Änderungen der Ressource vornimmt. Oder mach es als extra Programmpunkt. Dann kannst du jederzeit Vokabeln dazu machen und brauchst keinen extra Ressourcen-Editor mehr.
Und mit den Move-Funktionen kann man ja auch sehr gut Textdateien, in denen die neuen Vokabeln stehen, einlesen und über die Listboxliste in ein Array transferieren. Somit werden Resourcenänderungen sehr komfortabel. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 28.09.2020 ▲ |
| |
| | Georg Teles | Mir fällt auf, dass
PRGName$ = RES("GetStrings", PRGDLL&, "#100", $00407)
ein Array zurückgibt, aber ich bekomme es auch nicht hin, es auszulesen
So funktioniert es, aber ich verstehe nicht warum
Declare PRGNameN$[]'-------------------------------------#
PRGNameN$[] = RES("GetStrings", PRGDLL&, "#7", $00407)'--#
PRGName$ = PRGNameN$[4]'---------------------------------#
ganzer Code
'*******************************************************************************************************'
'* Programm: Vokabeltrainer *'
''******************************************************************************************************'
'* Version: V0.01 *'
'* Stand: 28.09.2020 *'
'* Info: Vokabeltrainer *'
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Klassendefinition *'
'*******************************************************************************************************'
CLASS Vokabel = Wort$(21), \
Uebersetzung$(21), \
Genus$(2), \
Casus$(13), \
Numerus$(11), \
Verb1$(21), \
Verb22$(21), \
Verb3$(21), \
Lektion$(13)', \
' Anlegen&, \
' Importieren@, \
' Exportieren@, \
' Vorlesen@
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Variablendeklaration *'
'*******************************************************************************************************'
'*- Programm -*'
DECLARE PRGDLL&
DECLARE PrgName$
DECLARE x!, xx!, y!, yy!
'*******************************************************************************************************'
'*- Dialog -*'
DECLARE DlgText&[5,30], DlgText$[5,30]
DECLARE DlgEdit&[5,30]
DECLARE ToolBar&, ToolbarIcons& , TabControl&[5]
'*******************************************************************************************************'
'*- Vobaln -*'
DECLARE Begriff#
DECLARE String Texte[]
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Variablendimensionierung *'
'*******************************************************************************************************'
DIM Begriff#, Vokabel
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Wertzuweisungen *'
'*******************************************************************************************************'
PRGDLL& = USEDLL("Vokabeln_32.DLL")
'PRGName$ = RES("GetStrings", PRGDLL&, "#100", $00407)
'PRGName$ = EXTSTRING$(PRGDLL&, 100)
Declare PRGNameN$[]'-------------------------------------#
PRGNameN$[] = RES("GetStrings", PRGDLL&, "#7", $00407)'--#
PRGName$ = PRGNameN$[4]'---------------------------------#
ToolbarIcons& = 0'Hier später Toolbaricon eintragen
'*******************************************************************************************************'
'*- Skalierung *'
xx! = 1.30
yy! = 1.15
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Prozedurname: MainWindow *'
''******************************************************************************************************'
'* Version: V0.01 *'
'* Stand: 28.09.2020 *'
'* Info: Baut das Hauptfenster/-dialog auf *'
'*******************************************************************************************************'
PROC MainWindow
'*******************************************************************************************************'
'*- Lokale Parameter -*'
DECLARE Handle&
DECLARE Tab&[5]
DECLARE dx%, dy%
DECLARE i%
DECLARE Ende%
'*******************************************************************************************************'
'*- Wertzuweisungen -*'
x! = 1.00
y! = 1.00
dX% = 640
dy% = 480
Ende% = 0
'*******************************************************************************************************'
'*- Fensteraufbau -*'
Handle& = CREATE("Dialog", %HWND, PrgName$, 0,0,0,0)
SETWINDOWPOS Handle& = INT((%MAXX-dx%)/2)*x!,INT((%MAXY-dy%)/2)*y! - dx%*x!, dy%*y!; 0
Toolbar& = CREATE("Toolbar", Handle&, ToolbarIcons&, 0, 0, WIDTH(Handle&), 64*y!)
TabControl&[1] = CREATE("TabCtrl", Handle&, "Vokabel", 5*x!, HEIGHT(Toolbar&) + 5*x!, WIDTH(Handle&) - 2 * 5*x!, HEIGHT(Handle&) - Height(Toolbar&)-2* 5*x! )
FOR i%, 2,5,1
TabControl&[i%] = INSERTTAB(TabControl&[1], i%,"Tab "+ STR$(i%) )
ENDFOR
'*******************************************************************************************************'
'*- Ereignishandler -*'
WHILENOT Ende%
WAITINPUT
Ende%=1
ENDWHILE
'*******************************************************************************************************'
'*- Fenster schließen -*'
DESTROYWINDOW(Handle&)
'*******************************************************************************************************'
ENDPROC
'*******************************************************************************************************'
'*******************************************************************************************************'
'* Hauptprogramm *'
''******************************************************************************************************'
CLS
Mainwindow
DISPOSE Begriff#
FREEDLL PRGDLL&
END
Ich würde gern eine Erklärung hierfür haben
Grüße
EDIT: Da der "Deutsche Texte" in Zeile 4 steht s. ResHacker, könnte die Nummer 4 im Array was damit zutun haben ? |
| | | | |
| | Stephan Sonneborn | H.Brill (28.09.2020)
Mach doch alles mit Rolands eingebauten Funktionen.
Würde ich gerne machen, aber ich möchte gar nicht die Vokabeln in einer DLL sichern, sondern nur die Texte der Programmoberfläche. Eigentlich brauche ich das nicht für ein Vokabelprogramm, da kann die Oberfläche ja ruhig in Deutsch bleiben. Aber ich habe auf der Arbeit ein Programm entwickelt, dass in unterschiedlichen Sprachen läuft. Und da gehe ich immer noch den umständlichen Weg mit den einzelnen DLLs je Sprache und dem Auslesen mittels ExtString$(). Ich wollte einfach mal die neuen Möglichkeiten testen.
Dazu sollte ich aber schon wissen, welchen String ich auslese. Klar, ich könnte jetzt für jeden Text einen Ressourcenbereich (also den 3. Parameter in der RES("GetStrings" - Funktion) festlegen. Aber ich dachte, es geht auch einfacher, z.B. alle Texte auf Fenster 1, alle Texte auf Fenster 2, alle Hilfetexte zu Fenster 1, alle Hilfetexte zu Fenster 2 u.s.w. jeweils in einen Resourcenbereich ablegen. Damit wäre die DLL viel übersichtlicher, insbesondere dann, wenn man die Text-Nummern dann frei festlegen kann, z.B. 100-199 für die Fenstertexte, 200-299 für die zugehörigen Hilfetexte u.s.w.
Ich habe mir dafür in Excel eine Tabelle erstellt: in Spalte A die Nummer, in Spalte B ein Komma, in Spalte C der deutsche Text, in D dann der Englische. In den Spalten E und F wird dann daraus der Eintrag für die DLL generiert: Nummer & Komma & Text in der jeweiligen Sprache. Danach kann ich dann in Excel einfach die ganze Spalte kopieren und im Resource Builder einfügen. Fertig! |
| | | XProfan X4Schöne Grüße aus Wittgenstein von Stephan Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 28.09.2020 ▲ |
| |
| | Stephan Sonneborn | Georg Teles (28.09.2020)
Mir fällt auf, dass PRGName$ = RES("GetStrings", PRGDLL&, "#100", $00407) ein Array zurückgibt, aber ich bekomme es auch nicht hin, es auszulesen
Georg Teles (28.09.2020)
So funktioniert es, aber ich verstehe nicht warum Declare PRGNameN$ '-------------------------------------# PRGNameN$ = RES("GetStrings", PRGDLL&, "#7", $00407) '--# PRGName$ = PRGNameN$ '---------------------------------#
Ich hatte auch schon einen variablen Array probiert mit "#7" als 3. Parameter. Weil der ResHacker da eben eine 7 schreibt. Warum? Ich weiß es nicht...
Das macht auch nur der ResHacker. Der Resource Builder macht das nicht. Dafür kann der auch nicht mit Texten als 3. Parameter (z.B. dem "MONAT" in Rolands Beispiel) leben.
Georg Teles (28.09.2020)
EDIT: Da der "Deutsche Texte" in Zeile 4 steht s. ResHacker, könnte die Nummer 4 im Array was damit zutun haben ?
Bei mir erhalte ich als Rückgabewert für den PRGName$ den Wert "8", zumindest wird das als Fenstertitel angezeigt... Für PRGNameN$ übrigens auch...
|
| | | XProfan X4Schöne Grüße aus Wittgenstein von Stephan Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 28.09.2020 ▲ |
| |
| | E.T. | Ich nutze für sowas ohne Probleme ExtString$ , z.B. so:
SetText Status&, 0, @ExtString$(Prg_Dll& ,40)
oder
Checker&[22] = @Create("RadioButton",Static_1&[0],@ExtString$(Prg_Dll& ,24),570,305,200,20)
Der Parameter ist dann genau die Zahl, welche z.B. im ResHacker genau vor dem Texteintrag steht. Im Bsp. weiter oben also 1584 für "Januar" , 1585 für "Februar" usw... |
| | | Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 28.09.2020 ▲ |
| |
| | Stephan Sonneborn | E.T. (28.09.2020)
Ich nutze für sowas ohne Probleme ExtString$ , z.B. so: SetText Status&, 0, @ExtString$(Prg_Dll& ,40)
oder
Checker&[22] = @Create("RadioButton",Static_1&[0],@ExtString$(Prg_Dll& ,24),570,305,200,20)
Der Parameter ist dann genau die Zahl, welche z.B. im ResHacker genau vor dem Texteintrag steht. Im Bsp. weiter oben also 1584 für "Januar" , 1585 für "Februar" usw...
So mache ich das normalerweise auch. Aber damit kann man nicht mit unterschiedlichen Sprachen arbeiten. Oder man muss mit unterschiedlichen Nummernkreisen arbeiten, was ich nicht möchte... |
| | | XProfan X4Schöne Grüße aus Wittgenstein von Stephan Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 29.09.2020 ▲ |
| |
| | E.T. | Versch. Sprachen für die Programmoberfläche packe ich immer in eine "verkappte" .ini-Datei (mit "falscher" Erweiterung). Pro Sprache eine Datei. Lässt sich m.M. nach einfacher bearbeiten bzw. erweitern, als wie jedes mal die .dll zu bearbeiten. |
| | | XProfan 11Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 29.09.2020 ▲ |
| |
|
AntwortenThemenoptionen | 7.531 Betrachtungen |
ThemeninformationenDieses Thema hat 5 Teilnehmer: |