Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [Image.Canvas.TextOut] €-Zeichen "malen" (https://www.delphipraxis.net/74264-%5Bimage-canvas-textout%5D-%80-zeichen-malen.html)

xZise 31. Jul 2006 15:26


[Image.Canvas.TextOut] €-Zeichen "malen"
 
Ich habe die Schriftart BN Machine und will ein €-Zeichen auf ein Image "schreiben"!
Allerdings übergeht er dass und zeichnet anstelle gar nichts...

Und ich habe in einem Label und bei Micorsoft Word das €-Zeichen mit der Schriftart BN MAchine getestet! Und es geht!

3_of_8 31. Jul 2006 15:28

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
Ein Label ist ein TGraphicControl und benutzt intern auch TextOut.

Zeig mal deinen Code.

xZise 31. Jul 2006 15:31

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
Delphi-Quellcode:
const MONEY: array[1..26] of Extended = (0.01, 0.20, 0.50, 1, 5, 10, 20, 50, 100, 200, 300, 400, 500,
                                   1000, 2500, 5000, 7500, 10000, 12500, 15000, 20000, 25000,
                                   50000, 100000, 150000, 250000);

procedure TfMain.bNewGameClick(Sender: TObject);
var
  i, rnd : Integer;
  BM_MoneyNum : array [1..26] of Byte;
  Nums : TNumsArray;
begin
  if not Running then begin
{...}
    LeftMoney.Canvas.Brush.Style := bsClear;
    LeftMoney.Canvas.Font.Name := 'BN Machine';
    LeftMoney.Canvas.Font.Height := 16;
    RightMoney.Canvas.Brush.Style := bsClear;
    RightMoney.Canvas.Font.Name := 'BN Machine';
    RightMoney.Canvas.Font.Height := 16;
    for i := 0 to 12 do begin
      LeftMoney.Canvas.Draw(0, i * 21 + i * 3, Plakette_0.Picture.Graphic);
      LeftMoney.Canvas.TextOut((LeftMoney.Width - LeftMoney.Canvas.TextWidth(FloatToStr(MONEY[i + 1]) + ' €')) div 2, i * 24 + 5, FloatToStr(MONEY[i + 1]) + ' €');
      LeftMoney.Repaint;
      RightMoney.Canvas.Draw(0, i * 21 + i * 3, Plakette_0.Picture.Graphic);
      RightMoney.Canvas.TextOut((RightMoney.Width - RightMoney.Canvas.TextWidth(FloatToStr(MONEY[i + 14]) + ' €')) div 2, i * 24 + 5, FloatToStr(MONEY[i + 14]) + ' €');
      RightMoney.Repaint;
      Sleep(100);
    end;
{...}
end;

himitsu 31. Jul 2006 15:32

Re: [Image.Canvas.TextOut] €-Zeichen "malen&a
 
Welchen Wert (Ordinal) hat'n das €?

Eventuell paßt der ZeichenCode nicht?

im Unicode hat dieses z.B. den Wert 8364 und das paßt z.B. nicht in einen AnsiString ._.

[add]
schau mal in der Zeichentabelle (Programm Charmap) nach und verwende direkt diese Code

3_of_8 31. Jul 2006 15:33

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
Tu das Repaint raus.

xZise 31. Jul 2006 15:44

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
@3of8
Also an dem repaint kann es nicht liegen, weil ich es auch an anderen Stellen mache (ohne repaint)

Zitat:

Zitat von himitsu
Welchen Wert (Ordinal) hat'n das €?

Also laut "Showmessage(IntToStr(ord('€')));" ist es 128.

Zitat:

Zitat von himitsu
[add]
schau mal in der Zeichentabelle (Programm Charmap) nach und verwende direkt diese Code

Wass soll ich da herausfinden? Und wie kann ich Unicodezeichen in einen String schreiben?


[edit]Also ein Chr(128) anstelle des € hats nicht getan :(

himitsu 31. Jul 2006 15:50

Re: [Image.Canvas.TextOut] €-Zeichen "malen&a
 
Zitat:

Zitat von xZise
Wass soll ich da herausfinden? Und wie kann ich Unicodezeichen in einen String schreiben?


[edit]Also ein Chr(128) anstelle des € hats nicht getan :(

icht was es in deinem Ansi (im QuellText für einen Code hat, sonden den Code aus dem Zeichensatz :zwinker:

z.B. ein Edit mit der Schriftart und dem Zeichen und dann.
Delphi-Quellcode:
Edit1.Text := IntToStr(Ord(Edit1.Text[1]));
oder mal mit
Delphi-Quellcode:
Edit1.Text := '€';
überprüfen.

und du bist dir auch sicher, daß der Text innerhalb des Bildes liegt und nicht nur ä bissl außerhalb?


[add]
OK, ich seh grad es sollte zentriert sein ._.

PS: einmal berechnen reicht auch schon aus :)
Delphi-Quellcode:
S := FloatToStr(MONEY[i + 14]) + ' €';
RightMoney.Canvas.TextOut((RightMoney.Width - RightMoney.Canvas.TextWidth(S)) div 2, i * 24 + 5, S);

3_of_8 31. Jul 2006 15:51

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
Das kann mit Repaint eigentlich gar nicht gehen, da dann das Bild komplett überzeichnet wird.

himitsu 31. Jul 2006 15:53

Re: [Image.Canvas.TextOut] €-Zeichen "malen&q
 
Zitat:

Zitat von 3_of_8
Das kann mit Repaint eigentlich gar nicht gehen, da dann das Bild komplett überzeichnet wird.

nur bei 'ner PaintBox, oder ählichem ... aber wenn die Zahl und das Bild dahinter sichtbar sind, dann stimmt halt was mit dem € nicht.

xZise 31. Jul 2006 15:54

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
Ziemlichsicher (ein a zeichnet er :D )

Ich werds mal mit dem Edit prüfen ^^

Zitat:

Zitat von 3_of_8
Das kann mit Repaint eigentlich gar nicht gehen, da dann das Bild komplett überzeichnet wird.

? Und was ist, wenn der gleiche Code ein paar Zeilen tiefer ist (andere Prozedur) und da kein repaint ist?

Muetze1 31. Jul 2006 15:55

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
... und beachtet doch mal, das auch der richtige Font in "LeftMoney" und "RightMoney"-Canvas selektiert ist, weil sonst nützen einem die CharCodes nix. Somit Font nachschauen!

xZise 31. Jul 2006 15:58

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Setze ich doch ein paar Zeilen davor? (wenn ich dich richtig verstanden habe!)

Und mit dem Edit: Also 1. Liefert mir 128 und 2. geht auch!

Flocke 31. Jul 2006 16:41

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
Habe gerade mal in den Font reingeschaut - der Autor hat leider nicht #$80 sondern #$A4 als Code für das Euro-Zeichen genommen, probiere es mal damit.

xZise 31. Jul 2006 16:43

Re: [Image.Canvas.TextOut] €-Zeichen "malen"
 
Oh danke Flocke!

Das wars !!! Aber warum hat es denn im Edit/Label funktioniert?


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