OEM_CHARSET, Zeichen 128-256 weg ?

Rund um die LCL und andere Komponenten
Mathias
Beiträge: 7317
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Mathias »

Ich will den kompletten ASCII-Code ausgeben.
Die Zeichen zwischen 128 und 256 kommen nicht.

Code: Alles auswählen

procedure TForm1.FormPaint(Sender: TObject);
var
  i: byte;
begin
  with Canvas.Font do begin
    Charset := OEM_CHARSET;
    Color := 0;
    Height := 0;
    Name := 'Terminal';
    Pitch := fpDefault;
    Size := 16;
    Style := [fsBold, fsItalic, fsUnderline, fsStrikeOut];
    Style := [];
  end;
  for i := 1 to 255 do begin
    Canvas.TextOut((i - 0) * 10, 10, char(i));
  end;
end;   
ich habe noch folgendes probiert, geht aber auch nicht.

Code: Alles auswählen

UTF8ToConsole(Char(i))
Unter Delphi kommen alle 256 Zeichen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Michl »

Hast du schon mal

Code: Alles auswählen

    Canvas.TextOut((i - 0) * 10, 10, UTF8Encode(char(i)));
probiert?

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

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

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Mathias »

Habe es gerade probiert, kommt leider ein Kompilierfehler.

Code: Alles auswählen

unit1.pas(64,38) Error: Can't determine which overloaded function to call
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Michl »

Was ist mit?:

Code: Alles auswählen

    Canvas.TextOut((i - 0) * 10, 10, UTF8Encode(AnsiString(Char(i))));  

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

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

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von wp_xyz »

ansichar(i) ?

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

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Mathias »

Michl hat geschrieben:Was ist mit?:

Code: Alles auswählen

    Canvas.TextOut((i - 0) * 10, 10, UTF8Encode(AnsiString(Char(i))));  
Danke, das ist die Lösung.

Somit habe ich auch die Umlaute als einzelnes Zeichen.

Code: Alles auswählen

    Canvas.TextOut(10, 40, UTF8Encode(ansistring(UTF8ToConsole('äöü'))));
    ch := UTF8ToConsole('ä')[1];
    Canvas.TextOut(10, 60, UTF8Encode(ansistring(ch)));
    ch := UTF8ToConsole('Ä')[1];
    Canvas.TextOut(20, 60, UTF8Encode(ansistring(ch)));
    ch := UTF8ToConsole('ü')[1];
    Canvas.TextOut(30, 60, UTF8Encode(ansistring(ch)));  
Ich brauche das Ganze für eine Text-Ausgabe in OpenGL.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 11344
Registriert: Mo 11. Sep 2006, 19:01

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von theo »

Mathias hat geschrieben:Ich will den kompletten ASCII-Code ausgeben.
Die Zeichen zwischen 128 und 256 kommen nicht.
ASCII definiert diese Zeichen gar nicht.
Du meinst wohl einen ANSI 8-bit Zeichensatz.

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

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Mathias »

Dies war wohl leider auch nichts, unter Windows geht es, aber Linux will es nicht.

Was für einen String/Zeichensatz muss ich nehmen, das Umlaute auch 8Bit sind ?
Mit dem Standard-IBM Zeichensatz geht es nicht, so wie ich es festgestellt habe.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 11344
Registriert: Mo 11. Sep 2006, 19:01

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von theo »

Mathias hat geschrieben:Dies war wohl leider auch nichts, unter Windows geht es, aber Linux will es nicht.
Hätte ich dir sagen können. Beim Thema Zeichensatz/Unicode wird immer wieder gerne gefährliches Halbwissen verbreitet und alle haben dazu eine "Meinung", selten aber eine Ahnung :wink:

Ich weiß nicht was du willst und ich weiß nicht warum du es willst, aber wenn du die ersten 256 Unicode Zeichen ausgeben willst, dann ginge das so:

Code: Alles auswählen

var
  i: Integer;
begin
  for i:=0 to $FF do Memo1.Lines.Add(UTF8Decode(WideChar(Word(i))));
end;    

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

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Mathias »

Geht nicht, es kommen nur die ersten 128 Zeichen richtig, der Rest ist nur '?' .

Wen ich den Font vom Memo1 auf:
Chartset=OEM_CHARSET
Name=Terminal

bringt auch nichts.

Mit

Code: Alles auswählen

Canvas.TextOut((i - 0) *7, 10, UTF8Decode(WideChar(Word(i))));  
kommt es gleich falsch.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Michl »

Unter Windows ginge auch:

Code: Alles auswählen

uses LConvEncoding;   
 
Canvas.TextOut((i - 0) * 10, 10, CP1252ToUTF8(Char(i)));

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 11344
Registriert: Mo 11. Sep 2006, 19:01

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von theo »

Mathias hat geschrieben:Geht nicht, es kommen nur die ersten 128 Zeichen richtig, der Rest ist nur '?' .
Ja, da habe ich einen Fehler gemacht.
Probier mal so:

Code: Alles auswählen

 
uses LazUTF8;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:=0 to $FF do Memo1.Lines.Add(UnicodeToUTF8(i));
end;   

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von mschnell »

Mathias hat geschrieben:Ich will den kompletten ASCII-Code ausgeben.
Die Zeichen zwischen 128 und 256 kommen nicht.
(Du meinst vermutlich 128 bis 255)

Diese Zeichen gibt's bei ASCII nicht.

Und die Steuerzeichen 0 bis 31 sowie 127 kannst Du nicht "ausgeben" (womit Du vermutlich "irgendwie standardmäßig grafisch aufmalen" meinst) .

-Michael

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

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Mathias »

Mit UnicodeToUTF8 bin ich jetzt einiges weiter gekommen, ich kann jetzt Umlaute in meiner Animation darstellen und dies unter Win und Linux.

Ein Wehrmutstropfen, ich kann nicht direkt Draw('ä') eingeben, ich muss es mit Draw(#228) machen.

Ich habe den Befehl UTF8ToUnicode angeguckt, leider geht nicht einfach Draw(UTF8ToUnicode('ä'));
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: OEM_CHARSET, Zeichen 128-256 weg ?

Beitrag von Mathias »

Mit

Code: Alles auswählen

var UnicodeText : UnicodeString;
 
  UnicodeText := UTF8Decode(Text);   
gehts.

Wichtig ist, das UnicodeText als UnicodeString deklariert ist, bei nur String macht Linux Probleme.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten