Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DrawShadowText in Delphi (commctrl.h/ComCtl32.dll) (https://www.delphipraxis.net/66678-drawshadowtext-delphi-commctrl-h-comctl32-dll.html)

turboPASCAL 3. Apr 2006 16:35

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich naochmal ;)


Delphi-Quellcode:
implementation

{$R *.dfm}

function DrawShadowText(hdc: HDC; pszText: LPCWSTR; cch: UINT;
   const pRect: PRect; dwFlags: DWORD; crText: COLORREF;
   crShadow: COLORREF; ixOffset: Integer;
   iyOffset: Integer): Integer; stdcall; external 'ComCtl32.dll';


function _DrawShadowText(ACanvas: TCanvas; x,y: Integer; AText: LPCWSTR;
  TextColor, ShadowColor: TColor; ShadowSpaceX, ShadowSpaceY: Integer): Integer;
var TextRect: TRect;
begin
   TextRect := Rect(x, y, x + ACanvas.TextWidth(AText),
     y + ACanvas.TextHeight(AText));

   Result := DrawShadowText(ACanvas.Handle, AText, length(AText), @TextRect, 0,
               COLORREF(TextColor), COLORREF(ShadowColor),
               ShadowSpaceX, ShadowSpaceY);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Font.Name := 'MS Sans Serif';
  Canvas.Font.Size := 8;
  Canvas.Font.Style := [];

  _DrawShadowText(Canvas, 10,25, 'Hallo, ich bin ein Text mit Schatten.',
    clBtnText, clGray, 3, 3);


  Canvas.Font.Name := 'Arial';
  Canvas.Font.Size := 14;
  Canvas.Font.Style := [fsBold];

  _DrawShadowText(Canvas, 10, 50, 'Ich auch !', clRed, clBlue, 5, 2);

  Canvas.Font.Name := 'Arial';
  Canvas.Font.Size := 10;
  Canvas.Font.Style := [];

  _DrawShadowText(Canvas, 10, 80, 'Na und ich erst !', clBlue, clBlack, 2, 2);
end;

Luckie 3. Apr 2006 18:04

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Der überflüssige Cast ist irgendwie übrig geblieben. ;)

Delphi-Freak 3. Apr 2006 18:13

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Tschuldigung, dass ich mich jetzt nicht gemeldet habe... ich häng nur momentan mit der Schule etwas dran
Also VIELEN DANK euch beiden!! :thumb:
Ich werde mir das in ein paar Tagen (leider erst, vorher komm ich nicht dazu...) anschauen; aber nach dem Beweis-"foto" und Source kann nichts mehr schief gehen. Sonst meld ich mich halt wieder.

Also nochmal VIELEN DANK & LG, ich

Delphi-Freak 7. Apr 2006 19:55

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, es funzzt wirklich :mrgreen:
Habs aber nicht anders erwartet :dp:

Habe das ganze jetzt noch in eine Unit gepackt (die auch die Ressourcen einbindet, müssen halt vorhanden sein) und die Funktion, die man aufruft, heißt jetzt DrawShadowText und die andere (direkt aus der DLL) _DrawShadowText. Außerdem hat die Funktion so manches Problem mit einer schwarzen Schriftfarbe, dann wird kein Schatten gezeichnet -> Abhilfe: wenn Schriftfarbe schwarz dann auf $00010101 gesetzt, man sollte also keinen Unterschied sehen, außer natürlich, dass der Schatten dann doch gezeichnet wird :mrgreen:

Also noch mal DANKE für eure Hilfen & LG, ich

PS: Nochmal für die, die sich mit Ressourcen etc. nicht so gut auskennen (wo ich eigentlich auch dazu gehöre), man braucht nur die 4 Dateien ins lib-Verzeichnis kopieren, die Unit einbinden und dann natürlich die Funktion auch verwenden...

[edit]So manch kleiner Fehler ausgebessert...[/edit]

[nochmaledit]Ich seh gerade noch im Screenshot oben, dass das mit schwarz irgendwie doch funktionieren dürfte, außerdem hat mein Rechner das ursprüngliche Beispiel türkis gezeichnet und nicht schwarz, keine Ahnung wieso :gruebel: [/nochmaledit]

Daniel G 7. Apr 2006 20:02

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Wär das nicht evtl. etwas für die CodeLib?

Delphi-Freak 7. Apr 2006 20:07

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Stimmt... eigentlich schon, fragt sich nur, mit oder ohne möglicherweise unnötiges schwarz-Workaround :gruebel:
Könnte wer anderer das vlt. auch noch testen, obs bei ihm mit schwarzer (wirklich $00000000) Schriftfarbe geht?

LG, ich

turboPASCAL 15. Apr 2006 18:52

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Hi, ich nochmal... :stupid:

Ich verschlimmbessere gerade experimentell das Aussehen eines Programms mit MSDN-Library durchsuchenDrawShadowText.

Jetzt hänge ich wieder an der selben Stelle wie schon einmal, kann mir jemand bitte mal sagen was der Parameter dwFlags anstellt ?

Code:
int DrawShadowText(     
    HDC hdc,
    LPCWSTR pszText,
    UINT cch,
    const RECT *pRect,
    [b]DWORD dwFlags,[/b]
    COLORREF crText,
    COLORREF crShadow,
    int ixOffset,
    int iyOffset
);
Zitat:

Zitat von MDSN Home
dwFlags
DWORD that specifies how the text is to be drawn.

Aha !? :gruebel:

Delphi-Freak 15. Apr 2006 19:03

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Hat das vlt. mit links- bzw. rechtsbündig etc. zu tun - das was bei TextOut der Parameter uFormat macht, die Typen passen zusammen (DWORD bzw. UINT)...

LG, ich

turboPASCAL 15. Apr 2006 19:42

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Ja natürlich, da ich das Ausgaberechteck immer angepasst habe ist mir das nicht aufgefallen...
Also TA_BOTTOM, TA_TOP, TA_CENTER, TA_LEFT, und TA_RIGHT (etc.) funktionieren.

:roteyes:

Delphi-Freak 15. Apr 2006 19:47

Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
 
Was ist es dann eigentlich für vertikales Zentrieren (TA_VCENTER dürfte er nicht kennen...)

LG, ich


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.
Seite 2 von 3     12 3      

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