Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Schrift Umrandung (Outline) auf Image realisieren (https://www.delphipraxis.net/93275-schrift-umrandung-outline-auf-image-realisieren.html)

MisterNiceGuy 3. Jun 2007 18:20


Schrift Umrandung (Outline) auf Image realisieren
 
Hi ich möchte auf einem Canvas einen Text ausgeben, der allerdings umrandet sein soll.
Kennt hier jemand ein Möglichkeit um das hinzubekommen?

DeddyH 3. Jun 2007 18:32

Re: Schrift Umrandung (Outline) auf Image realisieren
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const Offset = 2; //2Pixel Abstand zum Text
var R: TRect;
begin
  R := Rect(10,10,50,50);
  Windows.DrawText(Canvas.Handle,'Hallo Welt',-1,R,DT_CALCRECT or DT_SINGLELINE);
  Windows.Rectangle(Canvas.Handle,R.Left - Offset,R.Top - Offset,R.Right + Offset,R.Bottom + Offset);
  SetBkMode(Canvas.Handle,TRANSPARENT);
  Windows.DrawText(Canvas.Handle,'Hallo Welt',-1,R,DT_VCENTER or DT_CENTER or DT_SINGLELINE);
end;

Luckie 3. Jun 2007 18:35

Re: Schrift Umrandung (Outline) auf Image realisieren
 
Unter outline verstehe ich was anderes, eher so was: http://www.identifont.com/samples/urw/BetonOutline.gif

DeddyH 3. Jun 2007 18:39

Re: Schrift Umrandung (Outline) auf Image realisieren
 
*Ooops* Überschrift nicht gelesen :oops:

Hawkeye219 3. Jun 2007 19:20

Re: Schrift Umrandung (Outline) auf Image realisieren
 
Hallo,

meinst du so etwas?

Delphi-Quellcode:
procedure DrawOutlinedText (aCanvas: TCanvas;
                            aPosX, aPosY: Integer;
                            aText: string;
                            aColor: TColor = clBlack);
var
  DC : HDC;
  OldMode : Integer;
begin
  aCanvas.Pen.Color := aColor;
  DC := aCanvas.Handle;
  OldMode := SetBkMode(DC, TRANSPARENT);
  BeginPath(DC);
  aCanvas.TextOut (aPosX, aPosY, aText);
  EndPath(DC);
  StrokePath(DC);
  SetBkMode(DC, OldMode);
end;

procedure TForm1.Button1Click (Sender: TObject);
begin
  Canvas.Font.Name := 'Arial';
  Canvas.Font.Size := 48;
  DrawOutlinedText (Canvas, 8, 8, 'Hallo Welt!', clBlue);
end;
Es funktioniert allerdings nur mit TrueType-Fonts.

Gruß Hawkeye

OoNapiBLNoO 3. Jun 2007 19:25

Re: Schrift Umrandung (Outline) auf Image realisieren
 
ist denn sowas mit gemeint, also so hab ich das in der Schule gelernt *g

Delphi-Quellcode:
var x,y,Breite,Hoehe : Integer;
s : String;
begin
x:=30;
y:=20;
s:='Computer';
with Image1.Canvas do
begin
Font.Name:='Arial';
Font.Size:=24;
Breite:=TextWidth(s);
Hoehe:=TextHeight(s);
Rectangle(x-10,y-10,x+Breite+10,y+Hoehe+10);
TextOut(x,y,s);
end;
end;

MisterNiceGuy 5. Jun 2007 09:30

Re: Schrift Umrandung (Outline) auf Image realisieren
 
Vielleicht war nicht ganz klar, was ich gemeint habe. Ich will jedem Buchstaben eine Umrandung verpassen.
So wie auf Luckies Bild.

Kann man nicht einfach die Stiftbreite erhöhen mit der man die Buchstaben schreibt und dann mit einem dünneren Stift nochmal drüber
schreiben?

turboPASCAL 5. Jun 2007 09:31

Re: Schrift Umrandung (Outline) auf Image realisieren
 
Hast du den Post von DeddyH gesehen ?

MisterNiceGuy 5. Jun 2007 09:41

Re: Schrift Umrandung (Outline) auf Image realisieren
 
Ja, da passiert auf meinem Canvas garnichts ;)

Hawkeye219 5. Jun 2007 09:43

Re: Schrift Umrandung (Outline) auf Image realisieren
 
Hallo,

ich habe meinen Code aus Beitrag #5 etwas erweitert:

Delphi-Quellcode:
procedure DrawOutlinedText (aCanvas: TCanvas;
                            aPosX, aPosY: Integer;
                            aText: string;
                            aFillColor: TColor;
                            aBorderColor: TColor;
                            aBorderWidth: Integer = 1);
var
  DC : HDC;
  OldMode : Integer;
begin
  aCanvas.Brush.Color := aFillColor;
  aCanvas.Pen.Color := aBorderColor;
  aCanvas.Pen.Width := aBorderWidth;

  DC := aCanvas.Handle;
  OldMode := SetBkMode(DC, TRANSPARENT);

  BeginPath(DC);
  aCanvas.TextOut (aPosX, aPosY, aText);
  EndPath(DC);
  FillPath(DC);

  BeginPath(DC);
  aCanvas.TextOut (aPosX, aPosY, aText);
  EndPath(DC);
  StrokePath(DC);

  SetBkMode(DC, OldMode);
end;


procedure TForm1.Button11Click (Sender: TObject);
begin
  Canvas.Font.Name := 'Arial';
  Canvas.Font.Size := 96;
  DrawOutlinedText (Canvas, 8, 8, 'Hallo Welt!', clYellow, clBlue, 2);
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Seite 1 von 2  1 2      

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