Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   RichEdit Text mit schatten (https://www.delphipraxis.net/159505-richedit-text-mit-schatten.html)

thomas2009 30. Mär 2011 21:18

RichEdit Text mit schatten
 
Hi

mit diesem Code kann ich den Text in RichEdit mit einem Schatten-Effekt zeichnen
Das Problem, alle Linien von RichEdit kommen in eine Linie

Gibt es eine Andere Funktion für Richedit? Der Code ist normalerweise für eine String gedacht und nicht für TString
Delphi-Quellcode:
var
   lf: LOGFONT; // Windows native font structure
  // text: string;
begin
   Canvas.Brush.Style := bsClear; // set the brush style to transparent
   FillChar(lf, SizeOf(lf), Byte(0)) ;
   lf.lfHeight := 100;
   lf.lfFaceName := 'Arial';
   Canvas.Font.Handle := CreateFontIndirect(lf) ;
   Canvas.Font.Color := clBlack;
   //text := txtText.Text;
   Canvas.TextOut(20, 100, RichEdit1.Lines.Text) ; // shadow in black
   //Canvas.Font.Color := clGray;
   Canvas.Font.Color := clBlue;
//Canvas.TextOut(19, 99, Edit1.Text) ; // // text in gray 1pxl left and up
   Canvas.TextOut(19, 99, RichEdit1.Lines.Text) ;
end;

daywalker9 30. Mär 2011 21:26

AW: RichEdit Text mit schatten
 
Oder Du gehst alle Lines durch und gibts diese einzeln aus zB so:

Delphi-Quellcode:
for i:=0 to RichEdit.Lines.Count -1 do
  begin
    Canvas.TextOut(x,y,RichEdit.Lines[i]);
    inc(y,20);
  end;

s.h.a.r.k 30. Mär 2011 21:41

AW: RichEdit Text mit schatten
 
Verstehst du eigentlich, was der Code macht? Es ist doch sinnlos alles nur via Copy&Paste zusammenzutragen und andere um die Änderung des Codes zu fragen... Auf die Dauer verstehe ich da die anderen.

@daywalker9: so könnte man es machen, wobei das nicht das Rätsels Lösung ist, da die Position der Scrollbalken eine sehr elementare Rolle spielt ;)

himitsu 30. Mär 2011 21:50

AW: RichEdit Text mit schatten
 
Was für ein Grund hat die Erstellung eines Fonts via WinAPI in diesem VCL-Code?
(dazumal es hier keinerlei Grund dafür gibt)

Delphi-Referenz durchsuchenTCanvas.TextOut kann nunmal nur Sinle-Line-Texte ausgeben, da es intern MSDN-Library durchsuchenExTextOut nutzt, welches dieses nicht bietet.

Delphi-Referenz durchsuchenTCanvas.TextRect nutzt MSDN-Library durchsuchenDrawText/MSDN-Library durchsuchenDrawTextEx und das kann es, wenn es entsprechend eingestellt ist.

Mit entsprechender Recherche in der OH und im MSDN hätte man sowas bestimmt auch selber rausbekmmen können.


Und nochwas zum Codes da oben:
- entweder man nutzt nur WinAPI
- oder man nutzt die VCL

Aber auf keinem Fall sollte man sowas mischen ... jedenfalls nicht, wenn es keinerlei Gründe dafür gibt, also wenn man das gleiche Verhalten sehr leicht mit jeweils nur einer Variante erreichen kann.



Und ich kann s.h.a.r.k nur zustimmen. Will man wirklich programmieren, dann muß man wenigstens Ansatzweise wissen was man da macht, sonst bringt es einfach nix.

Ab jetzt: 10¢ pro Antwort
Ich glaub ich bin bald Millionär.

thomas2009 30. Mär 2011 23:22

AW: RichEdit Text mit schatten
 
Zitat:

Zitat von daywalker9 (Beitrag 1092135)

Delphi-Quellcode:
    Canvas.TextOut(x,y,RichEdit.Lines[i]);
    inc(y,20);
  end;

Es erscheint zu funktionieren :thumb:
Delphi-Quellcode:
procedure TfrmMain.Button2Click(Sender: TObject);
var
   lf: LOGFONT;
  i, x, y: Integer;
begin
x:=0;
y:=1;
    Canvas.Brush.Style := bsClear;
   FillChar(lf, SizeOf(lf), Byte(0)) ;
   lf.lfHeight := 100;
   lf.lfFaceName := 'Arial';
   Canvas.Font.Handle := CreateFontIndirect(lf) ;
   Canvas.Font.Color := clBlack;
   Canvas.Font.Color := clBlue;

    for i:=0 to RichEdit1.Lines.Count -1 do
  begin
    Canvas.TextOut(0,y*80,RichEdit1.Lines[i]);
 inc(y);
  end;
end;
Es gibt ein kleines Problem und zwar wenn der Text in Richedit (Zeile) nicht den die selbe Font.Size :roll:
Dann kann es sein dass die Text-Zeile über einander oder weit weg von einander kommen

s.h.a.r.k 30. Mär 2011 23:42

AW: RichEdit Text mit schatten
 
Liest du überhaupt das, was man dir schreibt? Es macht irgendwie so gar nicht den Eindruck.


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