![]() |
Sprach Plugins für nonVCL Anwendungen
Ich habe eine DLL die nur die Resourcestrings für die entsprechende Sprache enthält und eine Funktion exportiert, die für die entsprechende Menücaption verantwortlich ist. Wie kann ich nun zur Laufzeit ermitteln, wenn man den Menüpunkt auswählt, von welcher DLL der Eintrag erzeugt wurde? Das Problem ist, dass ja auch die ID, die ich für die Nachricht WM_COMMAND brauche, des Menü Items dynamisch ist. Alles wa sich brauche ist der Name der DLL, weil dieser den Namen der Sprache enthält: de.dll für deutsch, en.dll für englisch und so weiter.
Hat da jemand von euch ein Idee? |
Re: Sprach Plugins für nonVCL Anwendungen
Ohne jetzt direkt auf dein Problem eingehn zu können, aber wäre es konzeptionell nicht besser statt .dll's Textfiles als Sprachdateien zu verwenden? So könnte man sie direkt bearbeiten, ggf. ohne weiteres neue Sprachdateien erstellen
Nur so als Anregung |
Re: Sprach Plugins für nonVCL Anwendungen
Das Konzept mit den DLLs steht schon. Zur Zeit füge ich sie nur immer per Hand hinzu, was bedeutet, dass ich bei einer neuen Sprache DLL und eigentliche Anwendung neu ausliefern muss. Schön wäre es jetzt einfach neue Sprach DLLs zur Verfügung zu stellen, die man sich nach belieben runterladen kann.
|
Re: Sprach Plugins für nonVCL Anwendungen
Über Compilerschalter $DESCRIPTION der DLL eine Idendifikation verpassen und per
![]() Habe ich das so richtig verstanden was du möchtest? |
Re: Sprach Plugins für nonVCL Anwendungen
Das könnte helfen. Mal gucken. Aber die von dir verlinkte Version geht nicht über den Compilerschalter oder?
Aber nein geht auch nicht. Ich muss ja die entsprechende DLL laden und genau die kenne ich ja nicht, wenn der Menüpunkt angeklickt wird. |
Re: Sprach Plugins für nonVCL Anwendungen
Ach, geht doch auch einfacher "?", wenn in die DLL noch eine Versions oder Identificationsprocedure eingebaut wird die dir den Namen zurückgibt.
Delphi-Quellcode:
library EN;
// uses Windows; {$R 'en.res' 'en.rc'} type TDLLVerStr = Record ID, DLL_Version: Integer; DLL_Language, DLL_Name: string[12]; end; function GetDLLVersion: TDLLVerStr; begin Result.DLL_Version := 100; Result.DLL_Language := 'Englisch'; Result.DLL_Name := 'en.dll'; Result.ID := 9901; end; procedure ExportFoo; begin end; export GetDLLVersion; ExportFoo; begin end. //Edit: Du suchst die passende Version der DLL, die zu der Sprache passt, die aus dem Menue gewählt wurde ? Ist das richtig ? |
Re: Sprach Plugins für nonVCL Anwendungen
Ich glaube, wir reden aneinander vorbei.
Nhmen wir an ich habe die DLLs: de.dll, en.dll und it.dll. Bei Start suche ich mit FindFirstFile die DLLs und erstelle die Menüpunkte:
Code:
Das in Klammern sind nur die IDs, die für die Menüitems intern vergeben werden.
Sprachen
"Deutsch" (ID 0) "Englisch (ID1) "Italienisch" (ID 2) So, jetzt klicke ich auf einen Menüpunkt und erhalte als hightword des wParam BN_CLICK als Notification Code und im loword des wParam die ID des Menüitems. So weit so gut und jetzt? |
Re: Sprach Plugins für nonVCL Anwendungen
Möglicherweise verstehe ich ja auch nicht was du meinst, aber wenn du die DLLs suchst und das Menu erstellst, warum speicherst du da die Filenamen nicht in ein array? In der Reihenfolge, wie du die Items erstellst. Dann ist Item-ID = Position im Array.
|
Re: Sprach Plugins für nonVCL Anwendungen
Zitat:
|
Re: Sprach Plugins für nonVCL Anwendungen
- Du liest mit FinFiles die Dll's ein
- beim einlesen ein DynArray aufbauen wobei aus der Dll die Version und Sprache gelesen wird - aus dem Array dann das SprachMenue oder die Combobox aufbauen denen du den Index aus dem Array als ID zuweist oder in die Dll eine Sprachversionsnummer verpassen die du dann als MenueID verwendest. // kein roter Kasen !? :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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