AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

Ein Thema von MaBuSE · begonnen am 18. Jun 2018 · letzter Beitrag vom 4. Jun 2024
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.783 Beiträge
 
Delphi 12 Athens
 
#1

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 18. Jun 2018, 23:41
Aber ich hatte ja die Hoffnung, das das Delphi schon kann und man es nur einschalten muss.
So ganz aus dem Stand noch nicht, aber wenn man die TDirect2DCanvas ableitet und TextOut geringfügig modifiziert:
Angehängte Grafiken
Dateityp: png 19-06-_2018_00-40-16.png (9,5 KB, 54x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.783 Beiträge
 
Delphi 12 Athens
 
#2

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 18. Jun 2018, 23:44
Hier noch der Quelltext der Form-Unit:
Delphi-Quellcode:
unit Unit299;

interface

uses
  Vcl.Forms;

type
  TForm299 = class(TForm)
    procedure FormPaint(Sender: TObject);
  public
  end;

var
  Form299: TForm299;

implementation

uses
  Winapi.D2D1,
  System.Win.ComObj,
  Vcl.Graphics, Vcl.Direct2D;

{$R *.dfm}

type
  TMyCanvas = class(TDirect2DCanvas)
  public
    procedure TextOut(X, Y: Integer; const Text: string); override;
  end;

procedure TMyCanvas.TextOut(X, Y: Integer; const Text: string);
var
  TextRange: TDwriteTextRange;
  TextLayout: IDWriteTextLayout;
  TextMetrics: TDWriteTextMetrics;
begin
  OleCheck(DWriteFactory.CreateTextLayout(PWideChar(Text), Length(Text),
    Font.Handle, 0, 0, TextLayout));
  TextRange.startPosition := 0;
  TextRange.length := Length(Text);
  if fsUnderline in Font.Style then
    TextLayout.SetUnderline(True, TextRange);

  if fsStrikeOut in Font.Style then
    TextLayout.SetStrikethrough(True, TextRange);

  TextLayout.SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);

  RequiredState([csHandleValid, csFontValid, csBrushValid]);
  if Brush.Style <> bsClear then
  begin
    TextLayout.GetMetrics(TextMetrics);
    RenderTarget.FillRectangle(D2D1RectF(X, Y,
      X+TextMetrics.widthIncludingTrailingWhitespace,
      Y+TextMetrics.height), Brush.Handle);
  end;

  RenderTarget.DrawTextLayout(D2D1PointF(x-0.5, y-0.5), TextLayout,
    Font.Brush.Handle, 4);
end;

procedure TForm299.FormPaint(Sender: TObject);
var
  FD2DCanvas: TDirect2DCanvas;
begin
  FD2DCanvas := TMyCanvas.Create(Canvas.Handle, ClientRect);
  try
    FD2DCanvas.BeginDraw;
    FD2DCanvas.TextOut(10, 10, '😍😀😊😜☹😐😅😎❤😘😂😃💋💖😋😭😇🙄💩🙈🙉🙊🔞');
    FD2DCanvas.EndDraw;
  finally
    FD2DCanvas.Free;
  end;
end;

end.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 18. Jun 2018, 23:51
@Uwe.. Kurz und knapp verdient.
Das musste jetzt sein.

gruss

Geändert von EWeiss (18. Jun 2018 um 23:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 19. Jun 2018, 01:20
Ich bekomme Uwes Code nicht zum laufen, auch forciert per Knopf nicht.
Es ensteht nur ein weißes leeres Rechteck.
Windows: 7
Delphi: Tokyo 10.2.3
Text: die Unicode zeichen hab ich mit für mich lesbaren Text ersetzt ("Hallo Welt!")
Brush.Style: solid forciert
Font.Color: black forciert
Window Hintergrund: blue (damit ich überhaupt bemerke das was gemalt wurde)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 19. Jun 2018, 01:27
Ich bekomme Uwes Code nicht zum laufen, auch forciert per Knopf nicht.
Es ensteht nur ein weißes leeres Rechteck.
Windows: 7
Delphi: Tokyo 10.2.3
Text: die Unicode zeichen hab ich mit für mich lesbaren Text ersetzt ("Hallo Welt!")
Brush.Style: solid forciert
Font.Color: black forciert
Window Hintergrund: blue (damit ich überhaupt bemerke das was gemalt wurde)
Das sollte normal sein.. Oder?
Windows 7 unterstützt keine Farbigen Fonts und erzwingen kannst du da gar nichts.

Verwende W10 oder mindestens W8.1 dann geht's.

gruss

Geändert von EWeiss (19. Jun 2018 um 01:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 19. Jun 2018, 02:03
Und wo in Uwes Code geht hervor das eine Windows 8.1 aufwärts Font geladen und benutzt wird?
Oder bzw welcher Code-Teil ist Windows 8.1+ exclusive?
Ich habe Font Segio UI, ob die diese Zeichen hat weiß ich nicht, ich wollte es testen dazu aber generell den Code erstmal zum laufen bringen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 19. Jun 2018, 02:32
Und wo in Uwes Code geht hervor das eine Windows 8.1 aufwärts Font geladen und benutzt wird?
Oder bzw welcher Code-Teil ist Windows 8.1+ exclusive?
Ich habe Font Segio UI, ob die diese Zeichen hat weiß ich nicht, ich wollte es testen dazu aber generell den Code erstmal zum laufen bringen.
Sorry lasse dir das von anderen erklären es ist so wie ich sagte!
Win7 vergiss es.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 19. Jun 2018, 10:15
Aber ich hatte ja die Hoffnung, das das Delphi schon kann und man es nur einschalten muss.
So ganz aus dem Stand noch nicht, aber wenn man die TDirect2DCanvas ableitet und TextOut geringfügig modifiziert:
WOW,
danke für das Beispiel. Funktioniert gut. 👍🏻👍🏻👍🏻 🤘🏻

Der einzige Unterschied zwischen deiner TextOut und der von Embarcadero is ja nur der Parameter:

Code:
D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT             = 0x00000004
Aus
Delphi-Quellcode:
RenderTarget.DrawTextLayout(D2D1PointF(x-0.5, y-0.5), TextLayout,
    FFont.FBrush.Handle, D2D1_DRAW_TEXT_OPTIONS_NONE);
wird
Delphi-Quellcode:
  RenderTarget.DrawTextLayout(D2D1PointF(x-0.5, y-0.5), TextLayout,
    Font.Brush.Handle, 4);
Geht das nur mit Direct2D oder könnte man das auch generell in der VLC für alle Controls anschalten. (z.B. via ClassHelper oder ähnliches)

Viele Grüße
MaBuSE
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.783 Beiträge
 
Delphi 12 Athens
 
#9

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 19. Jun 2018, 10:32
Der einzige Unterschied zwischen deiner TextOut und der von Embarcadero is ja nur der Parameter:
Faktisch ja. Durch das Überschreiben mussten noch ein paar Zugriffe von private fields auf public properties umgeleitet werden. Ich würde das aber auch lieber als Option im Originalcode unterbringen. Leider funktioniert es wohl nur ab Anniversary Update bzw. einer bestimmten Direct2D Version. Ich weiß nur noch nicht, wie man das am besten erkennen kann, denn dann würde ich einen entsprechenden Feature-Request ins QP einstellen.

Geht das nur mit Direct2D oder könnte man das auch generell in der VLC für alle Controls anschalten. (z.B. via ClassHelper oder ähnliches)
Vermutlich nicht. Die Controls basieren in der Regel auf GDI und wenn es hoch kommt auf GDI+. Soweit ich weiß ist dieses Feature dort aber nicht implementiert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Anzeige farbiger Emoji (unicode Zeichen) mit Segoe UI Emoji Schrift in Delphi

  Alt 19. Jun 2018, 10:38
Soweit ich weiß ist dieses Feature dort aber nicht implementiert.
Schade 😒

Vielen Dank für die Infos. 👍🏻👍🏻👍🏻 🤘🏻
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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