Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi messageboxex & mehrsprachiger dialog (https://www.delphipraxis.net/71088-messageboxex-mehrsprachiger-dialog.html)

_frank_ 8. Jun 2006 17:28


messageboxex & mehrsprachiger dialog
 
hi,
ich versuche per messageboxEx einen mehrsprachigen dialog zu machen.
Ich vermute, ich muss die entsprechenden Sprachdefinitionen (LANG_*, SUBLANG_*) im System definiert haben (wo mach ich das?), weil die Schaltflächen sind immer in deutsch...

mal ein bisschen Quelltext:

Delphi-Quellcode:
function makelangid(p,s:word):word;
begin
  result:=p or (s shl 10);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  messageBoxEx(
    self.handle,
    PCHAR('text'),
    PCHAR('caption'),
    MB_YESNOCANCEL,
    makelangid(LANG_ENGLISH,SUBLANG_NEUTRAL)
  );
end;
Gruß Frank

hille 8. Jun 2006 17:37

Re: messageboxex & mehrsprachiger dialog
 
Hi,
was meinst du mit dialog?

Hille

_frank_ 8. Jun 2006 18:01

Re: messageboxex & mehrsprachiger dialog
 
eine messagebox halt ;)
mir gehts da um die button-beschriftungen, die bei MessageBox* durch windows gesetzt werden.

himitsu 8. Jun 2006 18:01

Re: messageboxex & mehrsprachiger dialog
 
Zitat:

Zitat von hille
was meinst du mit dialog?

MessageBoxEx erstellt eine MessageBox, oder auch Dialog genannt :zwinker:


Aber er hat Recht ... ich hätte och gedacht, daß dann die Button in Englisch sein müßten, aber vermutlich muß auch noch das nötige Sprachprofil (die ganzen ResourceStrings und Co.) im Windows installiert sein.
Hier ist jedenfalls nur Deutsch drauf und ich vermute mal, daß daher keine andere Sprache möglich ist

auch mit makelangid(LANG_ENGLISH,SUBLANG_ENGLISH_US) nicht.

Na ja, ich lad' im Moment eh meine eigenen Sprachen ... behandle das ganze also selber, weil ich die Button natürlich in der selben Sprache wie im Rest des Programms haben will (dieser Mischmasch is sch***).


[edit]ich wünschte mir 'ne RedBox ._.

hille 8. Jun 2006 18:13

Re: messageboxex & mehrsprachiger dialog
 
Oh, naja, Und was passiert da genau?
Ich kann mir das gerade nicht vorstellen, weil ich keine Ahnung habe was diese Box macht!!

PS: Ich habe nähmlich so ein Problem mit Dialogen aber ich glaube das ist was anderes!

Hille

himitsu 8. Jun 2006 18:30

Re: messageboxex & mehrsprachiger dialog
 
MessageBoxEx ist was von der WinAPI ... man ruft sozusagen nur eine Prozedur von Windows auf, worin dann der gewünschte Dialog erstellt wird.
Und natürlich werden die Resourcen für den Dialog (wie z.B. die ButtonBezeichnungen) aus WindowsDLLs geladen.

Der DateiÖffnenDialog ist ja auch aus der WinAPI, aber da hab ich über eine netten Hook die Möglichkeit den Text der enthaltenen Objekte zu ändern.


Delphi-Quellcode:
SendMessage(GetDlgItem(hWnd, 1), WM_SETTEXT, 0, Integer(PChar('abc123')));
Das DialogItem 1 ist da z.B. der OK-Button ... einfach mal auf "OpenDialog" klicken und dort Rechts, der obere Button, da steht nicht OK drin :mrgreen:
http://www.delphipraxis.net/internal...=536694#536694

hille 8. Jun 2006 18:35

Re: messageboxex & mehrsprachiger dialog
 
Ah. Nagut. Damit beschäftige ich mich einanderes mal. Vielen Dank für die Erklärung, werde es mir merken.

Hille

_frank_ 8. Jun 2006 18:58

Re: messageboxex & mehrsprachiger dialog
 
Zitat:

Zitat von himitsu
Na ja, ich lad' im Moment eh meine eigenen Sprachen ... behandle das ganze also selber, weil ich die Button natürlich in der selben Sprache wie im Rest des Programms haben will (dieser Mischmasch is sch***).

da geb ich dir Recht, wie machst du es denn mit den Message-boxen?
Gettext, eigene Forms oder etwas komplett anderes?

himitsu 8. Jun 2006 19:19

Re: messageboxex & mehrsprachiger dialog
 
Zitat:

Zitat von _frank_
da geb ich dir Recht, wie machst du es denn mit den Message-boxen?
Gettext, eigene Forms oder etwas komplett anderes?

Du kannst ja statt der MessageBox eine DialogBox verwenden, sollte Optisch auf's selbe rauskommen, nur daß man dort eine DialogProzedur einbinden kann, wo man dann z.B. bei WM_INITDIALOG ein bissl mit SendMessage und Co. an den Controls rumspielen kann.

MSDN-Library durchsuchenCreateDialogIndirectParam, MSDN-Library durchsuchenCreateDialogParam, MSDN-Library durchsuchenDialogBoxIndirectParam, oder MSDN-Library durchsuchenDialogBoxParam

Bernhard Geyer 8. Jun 2006 19:50

Re: messageboxex & mehrsprachiger dialog
 
Oder wie wärs mit dem TElPromptDialog vom ElPack?
Damit kann man sehr einfach die Captions der "Standarddialogbox" ersetzen. Und es geht auch mit Unicode auch unter Win9x/ME.

_frank_ 8. Jun 2006 20:06

Re: messageboxex & mehrsprachiger dialog
 
möchte möglichst auf externe VCL verzichten...
(mir geht das auf den Senkel, dass ich massig Componenten installieren muss, bevor ich ein Projekt kompilieren kann. mal von der auf/abwärts-Kompatibilität abgesehen)

@himitsu
wenn ich das richtig sehe, brauchst du da separate Template-Resourcen (Wie erstellt man die?) und musst die Größe der dialogbox dynamisch anpassen (textabhängig).
gibts da keine einfachere möglichkeit (ist ja letztendlich der gleiche Aufwand wie ein dynamisches form, wie es auch von showmessage verwendet wird)?

Gruß Frank

Bernhard Geyer 8. Jun 2006 20:15

Re: messageboxex & mehrsprachiger dialog
 
Zitat:

Zitat von _frank_
möchte möglichst auf externe VCL verzichten..
(mir geht das auf den Senkel, dass ich massig Componenten installieren muss, bevor ich ein Projekt kompilieren kann. mal von der auf/abwärts-Kompatibilität abgesehen)

Ich will nicht mehr auf Zusatzkomponenten verzichen die mir das Leben leicht machen. Ich gebe dir Recht das man nicht Planlos für jede kleine Aufgabe sich 'ne neue Komponentensammlung zu legen sollte. Erst auf die Suche gehen und dann ein paar Komponentensammlungen aussuchen die möglichst breit auf den eigenen Einsatzbereich geeignet sind. Vor allem da die Aufgabe eines IDE-Herstellers es nicht ist (und Borland es schon seit einigen Versionen nur noch minimal Betreibt) die Hammer-Komponenten für alle Einsatzbereich selbst anzubieten.

Und Auf/Abwärtskompatiblität ist auch kein Problem. Ich verwende nur Komponenten wo ich auch die Sourcen bekomme. Damit bin ich auch vor Hersteller-Pleiten einige Zeit sicher und kann die Komponenten auch an neue IDE-Versionen anpassen.

_frank_ 8. Jun 2006 20:24

Re: messageboxex & mehrsprachiger dialog
 
Zitat:

Zitat von Bernhard Geyer
Ich will nicht mehr auf Zusatzkomponenten verzichen die mir das Leben leicht machen. Ich gebe dir Recht das man nicht Planlos für jede kleine Aufgabe sich 'ne neue Komponentensammlung zu legen sollte. Erst auf die Suche gehen und dann ein paar Komponentensammlungen aussuchen die möglichst breit auf den eigenen Einsatzbereich geeignet sind. Vor allem da die Aufgabe eines IDE-Herstellers es nicht ist (und Borland es schon seit einigen Versionen nur noch minimal Betreibt) die Hammer-Komponenten für alle Einsatzbereich selbst anzubieten.

Und Auf/Abwärtskompatiblität ist auch kein Problem. Ich verwende nur Komponenten wo ich auch die Sourcen bekomme. Damit bin ich auch vor Hersteller-Pleiten einige Zeit sicher und kann die Komponenten auch an neue IDE-Versionen anpassen.

ich meinte nicht, dass ich gar keine Zusatzkomponenten verwende, aber ich nehm halt nicht für jede "kleine Aufgabe" ne eigene Komponente, sondern nur für komplexe Vorgänge wie z.B. TCP/IP-Handling, Regions, TrayIcon, etc. Komponenten und nicht z.B. für einen bunten Button. Mal davon abgesehen, dass ich kein freund von kitschbunten GUIs bin.

Gruß Frank

Bernhard Geyer 8. Jun 2006 20:27

Re: messageboxex & mehrsprachiger dialog
 
Zitat:

Zitat von _frank_
ich meinte nicht, dass ich gar keine Zusatzkomponenten verwende, aber ich nehm halt nicht für jede "kleine Aufgabe" ne eigene Komponente, sondern nur für komplexe Vorgänge wie z.B. TCP/IP-Handling, Regions, TrayIcon, etc. Komponenten und nicht z.B. für einen bunten Button. Mal davon abgesehen, dass ich kein freund von kitschbunten GUIs bin.

OK. War etwas zu voreillig.

Aber z.B. für TrayIcon brauchst Du auch keine Komponente - oder das ElPack :-)
Und das ElPack setze ich auch nur damit ein damit alle Komponenten gutes XP-Theming in meiner Anwendung haben und nicht um alles anders zu Designen als Windows es vorgibt. Und der ElPack-Dialog schaut aus wie der normale Windows-Dialog, jedoch mit mehr möglichen Features.

GuenterS 8. Jun 2006 21:16

Re: messageboxex & mehrsprachiger dialog
 
Wenn Du die Sourcen hast, kannst Du die Schaltflächen auch hardcodiert übersetzen, bzw. Übersetzungsfunktionalität einbauen.


[added]
Bei Win32-Api-Funktionen, wird das zugegebener Maßen etwas schwierig sein oder Überredungskunst kosten um die Sourcen zu bekommen.

Ich habe zwar das ...Ex gelesen, aber beim Schreiben des Beitrages, trotzdem an die Message... Dings gedacht, welche in der Controls.pas erstellt wird. (Da ist es schon leichter an die Sourcen zu kommen, wenn man nicht gerade eine Personal Version von Delphi besitzt.)
[/added]

himitsu 8. Jun 2006 21:19

Re: messageboxex & mehrsprachiger dialog
 
das wird bei der WinAPI wohl etwas schwer ... M$ ruckt ja seine ourcen nicht raus -.-''


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz