Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Pitch mit Textoutw und Accents ? (https://www.delphipraxis.net/196332-pitch-mit-textoutw-und-accents.html)

myicq 12. Mai 2018 20:48

Pitch mit Textoutw und Accents ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Alle,

ich habe jetzt (fast) verstanden wie ich unter D6/D7 Unicode-Text auf eine Canvas ausgebe, und zwar mit Möglichkeit für gespiegelt, gedreht etc. Das meiste klappt schon.

Aber..

Ich möchte gern auch die Möglichkeit haben eine Pitch zu benutzen. Mit SetworldTransform kann ich jeder Zeichen schmaler machen, das geht problemlos. Aber leider unterstützt DrawTextW keine pitch-parameter.

Ich habe versucht mit TextOut (position):
Delphi-Quellcode:
    startx := 100;
    starty := 10;

    for i := 1 to length(content) do
    begin

        WideCanvasTextOut(                // TNTGraphics function
           TCanvasPanel(Panel1).Canvas,
           startx,
           starty,
           content[i]

        );

        startx := startx + 
            WideCanvasTextWidth(
                   TCanvasPanel(Panel1).Canvas,
                   content[i]
                  ) +
                  pitchvalue;

    end;
Klappt auch ABER geht mit zB Arabisch und Hebräisch shief. Zehe Beispiel unten:

Ich vermute das ich über CreateFontIndirectW etwas zuchen muss, aber suche eine Beispiel ?

Text ist : "َجِبُ عَلَى الإنْسَانِ"

Oben mit Textout (codebeispiel), unten mit Drawtext.

himitsu 13. Mai 2018 11:19

AW: Pitch mit Textoutw und Accents ?
 
Das GDI und GDI+ kennt nicht nur MSDN-Library durchsuchenDrawText.

Wenn das etwas nicht kann, dann mal eine der anderen APIs ansehen.
MSDN-Library durchsuchenTextOut?


MSDN-Library durchsuchenDrawString
...

Und es gibt nicht nur das GDI.

myicq 14. Mai 2018 09:33

AW: Pitch mit Textoutw und Accents ?
 
Korrekt, das Problem ist aber, so wie ich das sehe: wenn ich eine Widestring pro-zeichen (for 1..length() ) durchlaufe, und jeder Zeichen ausgebe, ist teil davon auch "diakritische zeichen", also ohne spaces.

Entweder muss ich die Zeichen "kennen", oder ich muss am Font selber die Pitch setzen.

KodeZwerg 14. Mai 2018 09:45

AW: Pitch mit Textoutw und Accents ?
 
Hier zwei simple Unicode Beispiele.

Für Windows NT =
Delphi-Quellcode:
procedure TMyControl.Paint;
var
  S: WideString;
  r: TRect;
begin
  inherited;
  r := ClientRect;
  S := 'This is the integral sign: '#$222b;
  DrawTextW(Canvas.Handle, PWideChar(S), length(S), r, DT_SINGLELINE or
    DT_CENTER or DT_VCENTER or DT_END_ELLIPSIS);
end;
Für Windows 9x =
Delphi-Quellcode:
procedure TMyControl.Paint;
var
  S: WideString;
begin
  inherited;
  S := 'This is the integral sign: '#$222b;
  TextOutW(Canvas.Handle, 0, 0, PWideChar(S), length(S));
end;
Gefunden hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 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