MenüText auf allen Plattformen richtig auswerten

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

MenüText auf allen Plattformen richtig auswerten

Beitrag von harrybonn »

Mit der folgenden Prozedur lasse ich zu meinem Programm die verwendeten Shortcuts anzeigen:

Code: Alles auswählen

 
procedure Tfrm_Main.bnShowKeyBoardSettingsClick(Sender: TObject);
var
  sl: TstringList;
  M, fn: String;
  L, I: Integer;
  tmTitle, tm: TMenuItem;
begin
  sl := TSTringList.create;
 
  try
    sl.Add('Lfd. Nr - MENÜ' + #9 + 'BEFEHL' + #9 + 'SHORTCUT');
 
    for L := 0 to menu1.Items.Count-1 do begin
      tmTitle := menu1.Items[L];
 
      for i := 0 to tmTitle.Count-1 do begin
        tm := tmTitle[i];
 
        M := UTF8ToSys (tm.caption);
        if ShortCutToText(tm.ShortCut) <> '' then begin
          sl.Add(Format ('%d3', [L]) + ' ' + ReplaceStr (tmtitle.Caption, '&', '') + #9 + ReplaceStr (M, '&', '') + #9 + ShortCutToText(tm.ShortCut));
        end;
      end;
    end;
 
    fn := chkPath (GetTempDir (true)) + 'PCAdress-Shortcuts.txt';
 
    {$IFDEF MSWindows}
    SpeichereTextDatei (fn, sl.text, EncodingUTF8);
    {$ELSE}
    sl.SaveToFile(fn);
    {$ENDIF}
  finally
    sl.Free;
  end;
 
  OpenDocument (fn);
end;  
Unter Windows funktioniert das auch. Unter Mac werden die deutschen Umlaute aus den Menüs nicht richtig angezeigt.
Was kann ich hier ändern, damit es auf allen Plattformen funktioniert?

Ausgabe unter Windows ist dann z.B. (Auszug):

Lfd. Nr - MENÜ BEFEHL SHORTCUT
03 Datei Öffnen aus Dateifavoriten... Ctrl+Alt+F
03 Datei Drucken... Ctrl+P
03 Datei Drucke aktuelle Adresse Ctrl+Alt+P
03 Datei Speichern Ctrl+S
13 Adresse Neu... F4
13 Adresse Bearbeiten... F2
13 Adresse Duplizieren Shift+Ctrl+D
13 Adresse In Winword einfügen... Ctrl+W
23 Bearbeiten Suchen oder ersetzen... Ctrl+F
33 Markierung Markiere aktuelle Adresse F5
33 Markierung Demarkiere aktuelle Adresse F6

Auf dem Mac fehlen die deutschen Umlaute.

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: MenüText auf allen Plattformen richtig auswerten

Beitrag von Mathias »

Was passiert, wen du dies Zeile ersetzt ?

Code: Alles auswählen

M := UTF8ToSys (tm.caption); // alt
M := tm.caption; // neu
Bei mir unter Linux gehen beide Varianten.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Re: MenüText auf allen Plattformen richtig auswerten

Beitrag von harrybonn »

Dann funktioniert es unter Windows auch nicht und unter dem MAC weiterhin nicht.

Unter Linux funktioniert meine Procedure übrigens auch, nur nicht unter dem MAC.

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: MenüText auf allen Plattformen richtig auswerten

Beitrag von wp_xyz »

harrybonn hat geschrieben:Dann funktioniert es unter Windows auch nicht
Unter Windows musst du die Stringliste auch mit sl.SaveToFile speichern, nicht mit der eigenen SpeichereTextDatei, die offenbar eine Umwandlung der Zeichencodierung vornimmt. Der Text ist ja schon UTF8 (nicht ANSI wie in dem damaligen Thread angenommen).

Zum Mac kann ich nichts sagen, ich habe keinen. Nach dem, was man so liest, hat der Mac UTF8 als Zeichencodierung, daher sollte alles ohne irgendwelche Umwandlungen funktionieren. Weiß natürlich nicht, was deine archaische Lazarus-Version da noch an Problemen hat.

harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Re: MenüText auf allen Plattformen richtig auswerten

Beitrag von harrybonn »

OK, Problem lag daran, dass ich die erzeugte Datei unter MAC OS 10 10.6.8 mit dem dort installierten Texteditor-Programm hab anzeigen lassen. Diese Version kam wohl nicht mit der erzeugten Datei zurecht. Unter MAC OS 10.10 wird alles richtig angezeigt.

Antworten