![]() |
TBitBtn.Kind und Sprache
Ich kann mich gleich im Voraus entschuldigen, die Frage muss doch mit Sicherheit schon hundert mal aufgetaucht sein. Irgendwie finde ich trotzdem nichts...
Ändere ich in Windows die Eingabesprache und Region, ändert sich natürlich einiges mit. Delphi-Routinen formatieren Zahlen, Zeiten und Datum entsprechend. Auch das TTouchKeyboard zieht mit. Bis hierhin alles bestens. Nur der
Delphi-Quellcode:
zeigt sich hiervon unbeindruckt. Die Beschriftungen sind immer noch "Abbrechen" oder "Schließen". Was muss ich tun - Wo holt der diese Texte her? Würde ein
TBitBtn
![]() |
AW: TBitBtn.Kind und Sprache
Die sind als resourcestrings in consts.pas enthalten und abhängig von der Sprache in der Du Delphi installiert hast.
|
AW: TBitBtn.Kind und Sprache
Bitter, also vollkommen unbrauchbar.
Da es immer nur typische Windows-Standardwörter wie "Abbrechen" oder "Nein" waren, hatte ich Hoffnung, dass das irgendwie von Windows übernommen wird oder Delphi irgendwo eine Nachschau-Tabelle für die gängisten Sprachen hat... |
AW: TBitBtn.Kind und Sprache
Wir benutzen an der Stelle JvGnuGetText aus den JEDIs, mit denen kann man alles komfortabel übersetzen, auch diese Texte soweit ich weiß.
|
AW: TBitBtn.Kind und Sprache
Ich mache das so:
Delphi-Quellcode:
Und Aufruf dann
var
StringPointerList : array of Pointer; {$WARNINGS OFF} procedure CleanStringPointerList; var i : integer; begin for i := Low(StringPointerList) to High(StringPointerList) do begin // Uiii... prüfen auf memoryleak in > 2009 StrDispose(PAnsiChar(StringPointerList[i])); end; SetLength(StringPointerList, 0); end; procedure HookResourceString(ResStringRec: pResStringRec; NewStr: PChar); var OldProtect: DWORD; begin VirtualProtect(ResStringRec, SizeOf(ResStringRec^), PAGE_EXECUTE_READWRITE, @OldProtect); ResStringRec^.Identifier := Integer(NewStr); VirtualProtect(ResStringRec, SizeOf(ResStringRec^), OldProtect, @OldProtect); end; procedure SetSysResStr(AConstant : Pointer; const AConstantName : string); var p : PChar; begin // Das ggf. an die benutzte Delphi-Version anpassen {$IFDEF VER250} p := StrNew(PWideChar(LocalizerOnFly.GetTraslatedRS(AConstantName))); {$ELSE} p := StrNew(PChar(WideStringToString(LocalizerOnFly.GetTraslatedRS(AConstantName),0))); {$ENDIF} SetLength(StringPointerList, High(StringPointerList)+2); StringPointerList[High(StringPointerList)] := p; HookResourceString(AConstant, p); end; finalization CleanStringPointerList;
Delphi-Quellcode:
Wenn Du etwas anderes als Localizer einsetzt, kannst Du das LocalizerOnFly.GetTraslatedRS(AConstantName) entsprechend abändern und z.b. den Text als Konstante reingeben
SetSysResStr(@SMsgDlgError, 'SMsgDlgError');
|
AW: TBitBtn.Kind und Sprache
Ja, das sieht so ähnlich aus wie das was die JvGnuGetText macht.
|
AW: TBitBtn.Kind und Sprache
Wir haben die Standarddialoge durch eigene ersetzt, da wir DevExpress einsetzen. Die Standarddialoge passen da einfach nicht. Die Signatur der einzelnen Prozeduren bzw. Funktionen (Messagebox etc.) ist identisch, also muss die Unit nur in die Uses Liste.
Die Lösung mit dem JvGnuGetText von Sebastian ist aber vorzuziehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 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