Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Sprach Plugins für nonVCL Anwendungen (https://www.delphipraxis.net/61779-sprach-plugins-fuer-nonvcl-anwendungen.html)

Luckie 26. Jan 2006 10:31


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?

Interceptor 26. Jan 2006 10:39

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

Luckie 26. Jan 2006 10:42

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.

turboPASCAL 26. Jan 2006 12:05

Re: Sprach Plugins für nonVCL Anwendungen
 
Über Compilerschalter $DESCRIPTION der DLL eine Idendifikation verpassen und per Description auslesen welche Dll verwendet wird wenn Sie geladen wrude?

Habe ich das so richtig verstanden was du möchtest?

Luckie 26. Jan 2006 12:14

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.

turboPASCAL 26. Jan 2006 12:31

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 ?

Luckie 26. Jan 2006 12:39

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:
Sprachen
 "Deutsch" (ID 0)
 "Englisch (ID1)
 "Italienisch" (ID 2)
Das in Klammern sind nur die IDs, die für die Menüitems intern vergeben werden.

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?

Der Jan 26. Jan 2006 12:47

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.

Luckie 26. Jan 2006 12:48

Re: Sprach Plugins für nonVCL Anwendungen
 
Zitat:

Zitat von Der Jan
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.

Das habe ich mir jetzt auch schon überlegt. Mal sehen, ob das geht. Danke für eure Hilfe.

turboPASCAL 26. Jan 2006 12:52

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.
Seite 1 von 2  1 2      

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