AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Windows Standard Button-Bezeichner ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Standard Button-Bezeichner ermitteln

Ein Thema von Assertor · begonnen am 14. Jun 2007 · letzter Beitrag vom 15. Jun 2007
Antwort Antwort
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#1

Windows Standard Button-Bezeichner ermitteln

  Alt 14. Jun 2007, 21:02
Hallo,

gibt es einen Weg die lokalen Windows Button Texte, z.B. für den MessageDlg zu ermitteln?

Ich denke da in Richtung LOCALE_... bzw LC_TYPE.

Es gibt ja auch die LOCALE_SABBREVMONTHNAME usw.

Gruß + Danke im Voraus!
winkel79
Frederik
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: Windows Standard Button-Bezeichner ermitteln

  Alt 15. Jun 2007, 05:55
Hallo,

Delphi hat es in eigene Consts-Dateien verpackt: sowohl bei D5 als auch bei D2005 finde ich die Angaben in Source\Vcl\consts.pas bzw. Lib\consts.dcu:
Delphi-Quellcode:
  ButtonNames: array[TMsgDlgBtn] of string = (
    'Yes', 'No', 'OK', 'Cancel', 'Abort', 'Retry', 'Ignore', 'All', 'NoToAll',
    'YesToAll', 'Help');
  ButtonCaptions: array[TMsgDlgBtn] of Pointer = (
    @SMsgDlgYes, @SMsgDlgNo, @SMsgDlgOK, @SMsgDlgCancel, @SMsgDlgAbort,
    @SMsgDlgRetry, @SMsgDlgIgnore, @SMsgDlgAll, @SMsgDlgNoToAll, @SMsgDlgYesToAll,
    @SMsgDlgHelp);
  ModalResults: array[TMsgDlgBtn] of Integer = (
    mrYes, mrNo, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrAll, mrNoToAll,
    mrYesToAll, 0);
Windows müsste das natürlich auch irgendwo registriert haben, aber soweit kenne ich mich in "Win-Eingeweiden" nicht aus.

Wenn man "Übersetzungsproblemen" aus dem Weg gehen möchte, sollte man ausschließlich mit ModalResult (bzw. unter NET DialogResult) arbeiten.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Windows Standard Button-Bezeichner ermitteln

  Alt 15. Jun 2007, 06:05
Eine Alternative zum MessageDlg wäre die Application.MessageBox, denn diese bedient sich der Windows-Funktion MSDN-Library durchsuchenMessageBox und ist somit von der Windows-Sprache abhängig.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: Windows Standard Button-Bezeichner ermitteln

  Alt 15. Jun 2007, 07:07
Hallo Matze und Thomas!

Danke für Eure Antworten. Ich brauche aber wirklich die Windows-Werte, denn ich verwende weder MessageDlg noch MessageBox o.ä.

Es geht um den TaskDialog von TMS. Der liest einfach per Pointer die Werte aus der Consts.pas.

Nun habe ich ein deutsches Delphi, ein Programm mit Übersetzungen per dxGettext und sagen wir mal eine MUI für Vista in Englisch. Was nun passiert:

- Programm mit französischer Sprache gestartet (die Sprache kann jeder User automatisch einstellen = vom System ermitteln, oder aber auch selbst festlegen)
- Im selben Programm zeigt der WinAPI Aufruf der MessageBox zeigt nun englische Buttons mit "OK, Cancel", da das System ja derzeit auf Englisch läuft
- Der TMS TaskDialog zeigt deutsche "Abbrechen, Ja, Nein" Buttons, da TMS ja die Consts.pas auswertet

Das gibt dann diese typischen "Halbübersetzungen"...

Nur, was macht mann da?

Gruß winkel79
Frederik
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

Re: Windows Standard Button-Bezeichner ermitteln

  Alt 15. Jun 2007, 08:20
Hat sich inzwischen erledigt, habe selber einen Buttontranslator geschrieben...

Trotzdem Danke!

Gruß winkel79
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Windows Standard Button-Bezeichner ermitteln

  Alt 15. Jun 2007, 08:40
Wenn du schon hier im Forum fragst, wäre es auch schön, wenn du auch hier deine Lösung veröffentlichst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#7

Re: Windows Standard Button-Bezeichner ermitteln

  Alt 15. Jun 2007, 09:30
Hi Luckie,

Zitat von Luckie:
Wenn du schon hier im Forum fragst, wäre es auch schön, wenn du auch hier deine Lösung veröffentlichst.
1. Die Antwort:
Wie ich schrieb, geht es ja um den TaskDialog von TMS. Nun habe ich statt der "CommonButtons", die einen Pointer auf die Consts.pas Werte enthalten, einfach alle Buttons per "CustomButtons" zugeweisen. Das ist einfach eine WideStringList.

Bei dieser Zuweisung verwende ich Lars Lösung aus gnugettext mit _('Mein String').

Das läuft, nur leider stelle ich gerade fest, daß der TMS TaskDialog neben vielen anderen Fehlern nicht Thread Safe ist...

[Offtopic]
2. Ob es immer so Sinn macht mit dem Antworten? Ich habe hier etliche Threads, wo an der Frage vorbei oder triviale Lösungen geantwortet werden. Hier z.B. fragte ich, ob jemand weiß, wie ich die Windows Locale für die Button Captions ermittele. Geantwortet wird mit dem WinAPI Aufruf MessageBox oder das die Werte ja in der Consts.pas enthalten sind.

Das geht doch irgendwie dann drann vorbei... Ich kann das zwar alles hooken, aber dann bekomme ich wieder Probleme mit Unicode Strings.

Und wenn ich mir meine anderen Threads so anschaue: Bei vielen kommt garnichts oder Antworten in obiger Richtung. Es scheint mir auch, daß Threads mit bekannten Namen statistisch schneller und genauer beantwortet werden. Honi soit qui mal y pense. Jetzt könnte man meinen, daß die Fragen vielleicht zu ungenau sind, aber tatsächlich sind die schon ziemlich gezielt. Manchmal reicht doch als Antwort auch "geht nicht bzw. kann man nicht".

Ich bin natürlich trotzdem dankbar für Antworten. Selbst gebe ich ja auch viele (denk mal an gestern, Deine XML Dokumentationsdateien - das war doch auch von mir). Aber z.B. mein OpenSSL Fix für Indy (und OpenSSL und Indy verwenden doch bestimmt einige) wurde bisher 1x runtergeladen. Und das war 1/2 Tag Arbeit...
[/Offtopic]

Gruß winkel79
Frederik
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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