![]() |
DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Hi!
Ich bin irgendwann auf die Funktion ![]() Liege ich da ganz falsch mit meinen Versuchen, oder kann ich die Funktion mit dem BDS einfach nicht verwenden? :gruebel: Übrigens noch der Code für die DLL, den ich probiert habe:
Delphi-Quellcode:
LG, ich
function DrawShadowText(hdc: HDC; pszText: LPCWSTR; cch: UINT;
const pRect: PRect; dwFlags: DWORD; crText: COLORREF; crShadow: COLORREF; ixOffset: Integer; iyOffset: Integer): Integer; external 'ComCtl32.dll'; |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
:!:
Code:
Win XP benutz nur ComCtl32.dll Version 5.xx.
[b]Function Information[/b]
[color=#df0000]Minimum DLL Version ComCtl32.dll version 6 or later[/color] Header - commctrl.h Import library - comctl32.lib Minimum operating systems - Windows XP Bei .Net ist glaube ich Version 6 dabei. :gruebel: |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Hallo,
fehlt bei der Deklaration vielleicht einfach stdcall? Gruß xaromz |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Danke mal für die Antworten! :thumb:
Das stdcall vor die external-Deklaration? Funktioniert nämlich auch nicht... Wie kann man herausfinden, welche Version das ist? Hab mir die dll mal mit Luckies DLLExports angeschaut, aber da ist die Funktion nicht dabei :( Was meinst du mit Zitat:
|
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Moin Matti,
die Bemerkung zu der Funktion hast Du nicht geschrieben ;-) Zitat:
|
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Übrigens, ich bin schon etwas weiter mit den Fehlermeldungen: wenn man es aus der IDE startet (Strg+Shift+F9) schließt sich das Proggie sofort wieder, wenn mans aber anders startet kommt die Fehlermeldung "Einsprungspunkt nicht gefunden...".
Auch die Manifest-Datei hilft nicht weiter:
Code:
abgespeichert als AppName.exe.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="DrawShadowTextSample" type="win32" /> <description>Just a sample proggy for the DrawShadowText-function.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly> :roll: LG, ich - und danke für eure Hilfe!!! |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Delphi-Quellcode:
Und das Manifest muss den Dateinamen haben: <Project1>.exe.manifest, wobei Project1 deinem Exe-Namen vor der Erweiterung entspricht. In diesem Fall hieße die Exe: Project1.exe
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'; implementation {$R *.dfm} procedure TForm1.FormPaint(Sender: TObject); var rect: TRect; begin rect.Top := 10; rect.Left := 10; rect.Bottom := 50; rect.Right := 150; DrawShadowText(Canvas.Handle, 'Hello world', 11, @rect, 0, COLORREF(RGB(255,255,255)), COLORREF(RGB(100,100,100)), 25, 25); end; |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Ja, soweit bin ich nun auch gekommen, das Manifest ist als Res eingebunden. Das Problem bei mir ist das der Text nicht gezeichnet wird. :gruebel:
//Edit #1:
Delphi-Quellcode:
Naja, der Text wird nicht in voller länge ausgegeben "Hallo, ic", also wenn überhaubt.
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'; procedure TForm1.FormPaint(Sender: TObject); const szText = 'Hallo, ich bin ein Text mit Schatten.'; var r: TRect; begin r := Rect(10,10,50,100); DrawShadowText(Canvas.Handle, szText, length(szText), @r, 0, RGB(255, 0, 0), RGB(25, 25, 25), 2, 2); end; //Edit #2: Selberschult, in Rect muss ja der Text passen. Der Tag ist dann doch schon zu lang. :wall: Luckie, danke. |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Es ist ein WideString. Also length*2.
|
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
1. Siehe oben.
2. Warum muss, bzw. machst du
Delphi-Quellcode:
RGB gibt doch ein en Wert von COLORREF zurück.
COLORREF(RGB(100,100,100))
...und es funktioniert doch... :bounce2: |
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; |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Der überflüssige Cast ist irgendwie übrig geblieben. ;)
|
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 |
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] |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Wär das nicht evtl. etwas für die CodeLib?
|
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 |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Hi, ich nochmal... :stupid:
Ich verschlimmbessere gerade experimentell das Aussehen eines Programms mit ![]() 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:
|
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 |
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: |
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 |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
:gruebel: Also TA_CENTER und VTA_CENTER wollen nicht so...
// Edit: Ne, also die Parameter sind wohl doch etwas anders, für dwFlags eingesetzte Werte von 0 .. 2 sind: 0: normal (rechts oben) 1: center text oben 2: links oben Die Parameter von ![]() |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
wo hast du die Werte her? Im PSDK hab ich nix dazu gefunden.
|
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Oder sind das gleich die Werte von DrawText mit DT_ (DT_LEFT, DT_CENTER, DT_RIGHT AND DT_TOP, DT_VCENTER, DT_BOTTOM)?
LG, ich |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Guckt mal Post #21. :mrgreen:
Und kein roter Kasten nicht ... :gruebel: |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
Nein, irgendwie kein roter Kasten :gruebel: (ich glaube dazu kann man nicht zu blöd sein, oder doch :mrgreen: )
Aber danke, jedenfalls... LG, ich |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
So, ich habe noch ein wenig an einer Unit gebastelt um die Funktion DrawShadowText ein
wenig Kompatibler / komfortabler zu machen. Ich bitte mal darum die Unit zu testen und wer Vorschläge oder Verbesserungen hat, her damit. Um die Funktion DrawShadowText zu nutzen ist Windows XP oder höher erforderlich, weiterhin ist es notwendig das Windows XP Manifest mit in das Delphiprojekt einzubinden. An sonnten gibt es nur einen Ersatzschatten. ;)
Delphi-Quellcode:
{
Unit ShadowText by Matthias G. aka turboPASCAL (tP) Version 1.0 Diese Unit stellt die Funktion DrawShadowText aus der ComCtl32.dll zur Verfügung. Bei Windowsversionen unter XP oder ohne Windows XP Manifest wird eine Ersatzfunktion zum Darstellen des Schattens verwendet. } unit ShadowText; interface uses Windows, SysUtils, Graphics; var UseLQShadow : Boolean = True; // legt fest ob der alternative Schatten // verwendet werden soll wenn die Funktion // aus der ComCtl32.dll nicht zur Verfügung // steht // Ausgabe eines Textes mit Schatten über angabe von X und Y - Koordinaten function DrawShadowText(ACanvas: TCanvas; x, y: Integer; AText: string; TextColor, ShadowColor: TColor; ShadowSpaceX, ShadowSpaceY: Integer): Integer; // Ausgabe eines Textes mit Schatten über eine TRect- Struktur mit // angabe der Textformatierung (Textflags siehe Delphi-Hilfe "DrawText") function DrawShadowTextR(ACanvas: TCanvas; TextRect: TRect; x, y: Integer; AText: string; TextColor, ShadowColor: TColor; ShadowSpaceX, ShadowSpaceY: Integer; TextFlags: DWord): Integer; implementation type TDrawShadowTextI = function(hdc: HDC; pszText: LPCWSTR; cch: UINT; const pRect: PRect; dwFlags: DWORD; crText: COLORREF; crShadow: COLORREF; ixOffset: Integer; iyOffset: Integer): Integer; stdcall; var hComCtl32DLL: THandle = 0; DrawShadowTextI: TDrawShadowTextI; OldCanvasColor: TColor; OldBkModeColor: Integer; (* // DrawShadowText aus der ComCtl32.dll ( erfordert das WindowsXP-Manifest! ) ////////////////////////////////////////////////////////////////////////////// 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' name 'DrawShadowText'; *) // IsWindowsXPAndUp ermittelt ob eine Windowsversion ab WinXP vorhanden ist // Verwendung intern der Unit ////////////////////////////////////////////////////////////////////////////// function IsWindowsXPAndUp: Boolean; begin Result := ((Win32MajorVersion = 5) and (Win32MinorVersion >= 1)) or (Win32MajorVersion > 5); end; // Rect - Die Funktion Rect erstellt aus Koordinaten eine TRect-Struktur // Verwendung intern der Unit - no Unit Classes used ////////////////////////////////////////////////////////////////////////////// function Rect(ALeft, ATop, ARight, ABottom: Integer): TRect; begin With Result do begin Left := ALeft; Top := ATop; Right := ARight; Bottom := ABottom; end; end; // DrawShadowTextL (L - Low Quality) // Verwendung intern der Unit ////////////////////////////////////////////////////////////////////////////// function DrawShadowTextL(ACanvas: TCanvas; TextRect: TRect; AText: string; TextColor, ShadowColor: TColor; ShadowSpaceX, ShadowSpaceY: Integer; TextFlags: DWORD): Integer; begin OldBkModeColor := SetBKMode(ACanvas.Handle, TRANSPARENT); OldCanvasColor := ACanvas.Font.Color; if UseLQShadow then begin inc(TextRect.Left, ShadowSpaceX); inc(TextRect.Top, ShadowSpaceY); inc(TextRect.Right, ShadowSpaceX); inc(TextRect.Bottom, ShadowSpaceY); ACanvas.Font.Color := ShadowColor; Result := DrawText(ACanvas.Handle, PChar(AText), length(AText), TextRect, TextFlags); dec(TextRect.Left, ShadowSpaceX); dec(TextRect.Top, ShadowSpaceY); dec(TextRect.Right, ShadowSpaceX); dec(TextRect.Bottom, ShadowSpaceY); end else Result := 1; ACanvas.Font.Color := TextColor; Result := Result and DrawText(ACanvas.Handle, PChar(AText), length(AText), TextRect, TextFlags); ACanvas.Font.Color := OldCanvasColor; SetBKMode(ACanvas.Handle, OldBkModeColor); end; // DrawShadowText: für einfache Ausgabe // Verwendung: export aus Unit ////////////////////////////////////////////////////////////////////////////// function DrawShadowText(ACanvas: TCanvas; x, y: Integer; AText: string; TextColor, ShadowColor: TColor; ShadowSpaceX, ShadowSpaceY: Integer): Integer; var TextRect: TRect; begin TextRect := RECT(x, y, x + ACanvas.TextWidth(AText), y + ACanvas.TextHeight(AText)); if @DrawShadowTextI <> nil then begin Result := DrawShadowTextI(ACanvas.Handle, PWideChar(WideString(AText)), length(AText), @TextRect, 0, COLORREF(TextColor), COLORREF(ShadowColor), ShadowSpaceX, ShadowSpaceY); end else begin Result := DrawShadowTextL(ACanvas, TextRect, AText, TextColor, ShadowColor, ShadowSpaceX, ShadowSpaceY, 0); end; end; // DrawShadowTextR: für formatierte Ausgabe (R - Text[R]ect) // Verwendung: export aus Unit ////////////////////////////////////////////////////////////////////////////// function DrawShadowTextR(ACanvas: TCanvas; TextRect: TRect; x, y: Integer; AText: string; TextColor, ShadowColor: TColor; ShadowSpaceX, ShadowSpaceY: Integer; TextFlags: DWord): Integer; begin if @DrawShadowTextI <> nil then begin Result := DrawShadowTextI(ACanvas.Handle, PWideChar(WideString(AText)), length(AText), @TextRect, TextFlags, COLORREF(TextColor), COLORREF(ShadowColor), ShadowSpaceX, ShadowSpaceY); end else begin Result := DrawShadowTextL(ACanvas, TextRect, AText, TextColor, ShadowColor, ShadowSpaceX, ShadowSpaceY, TextFlags); end; end; // Initialization der Unit ////////////////////////////////////////////////////////////////////////////// initialization if IsWindowsXPAndUp then begin hComCtl32DLL := LoadLibrary('ComCtl32.dll'); @DrawShadowTextI := GetProcAddress(hComCtl32DLL, 'DrawShadowText'); end; // Finalization der Unit ////////////////////////////////////////////////////////////////////////////// finalization if hComCtl32DLL <> 0 then FreeLibrary(hComCtl32DLL); end. |
Re: DrawShadowText in Delphi (commctrl.h/ComCtl32.dll)
So, und damit man die Funktion auch ohne die VCL nutzen kann hab ich schnell noch eine
nonVLC - Version geschrieben. ( für die Tippfaulen ;) )
Delphi-Quellcode:
{
Unit ShadowTextN by Matthias G. aka turboPASCAL (tP) Version 1.0 (nonVCL) Diese Unit stellt die Funktion DrawShadowText aus der ComCtl32.dll zur Verfügung. Bei Windowsversionen unter XP oder ohne Windows XP Manifest wird eine Ersatzfunktion zum Darstellen des Schattens verwendet. } unit ShadowTextN; interface uses Windows; var UseLQShadow : Boolean = TRUE; // legt fest ob der alternative Schatten // verwendet werden soll wenn die Funktion // aus der ComCtl32.dll nicht zur Verfügung // steht // Ausgabe eines Textes mit Schatten über angabe von X und Y - Koordinaten function DrawShadowText(DC: HDC; x, y: Integer; AText: string; TextColor, ShadowColor: COLORREF; ShadowSpaceX, ShadowSpaceY: Integer): Integer; // Ausgabe eines Textes mit Schatten über eine TRect- Struktur mit // angabe der Textformatierung (Textflags siehe Delphi-Hilfe "DrawText") function DrawShadowTextR(DC: HDC; TextRect: TRect; x, y: Integer; AText: string; TextColor, ShadowColor: COLORREF; ShadowSpaceX, ShadowSpaceY: Integer; TextFlags: DWord): Integer; implementation type TDrawShadowTextI = function(HDC: HDC; pszText: LPCWSTR; cch: UINT; const pRect: PRect; dwFlags: DWORD; crText: COLORREF; crShadow: COLORREF; ixOffset: Integer; iyOffset: Integer): Integer; stdcall; var hComCtl32DLL: THandle = 0; DrawShadowTextI: TDrawShadowTextI; (* // Declaration der Funktion DrawShadowText aus der ComCtl32.dll // ( erfordert das WindowsXP-Manifest! ) ////////////////////////////////////////////////////////////////////////////// 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' name 'DrawShadowText'; *) // IsWindowsXPAndUp ermittelt ob eine Windowsversion ab WinXP vorhanden ist // Verwendung intern der Unit ////////////////////////////////////////////////////////////////////////////// function IsWindowsXPAndUp: Boolean; var dwWindowsMajorVersion, dwWindowsMinorVersion, dwVersion: DWORD; begin dwVersion := GetVersion; dwWindowsMajorVersion := LOBYTE(LOWORD(dwVersion)); dwWindowsMinorVersion := HIBYTE(LOWORD(dwVersion)); Result := ((dwWindowsMajorVersion = 5) and (dwWindowsMinorVersion >= 1)) or (dwWindowsMajorVersion > 5); end; // Rect - Die Funktion Rect erstellt aus Koordinaten eine TRect-Struktur // Verwendung intern der Unit - no Unit Classes used ////////////////////////////////////////////////////////////////////////////// function Rect(ALeft, ATop, ARight, ABottom: Integer): TRect; begin With Result do begin Left := ALeft; Top := ATop; Right := ARight; Bottom := ABottom; end; end; // DrawShadowTextL (L - Low Quality) // Verwendung intern der Unit ////////////////////////////////////////////////////////////////////////////// function DrawShadowTextL(DC: HDC; TextRect: TRect; AText: string; TextColor, ShadowColor: longint; ShadowSpaceX, ShadowSpaceY: Integer; TextFlags: DWORD): Integer; var OldTextColor: COLORREF; OldBkMode: Integer; begin OldBkMode := SetBKMode(DC, TRANSPARENT); OldTextColor := GetTextColor(DC); if UseLQShadow then begin inc(TextRect.Left, ShadowSpaceX); inc(TextRect.Top, ShadowSpaceY); inc(TextRect.Right, ShadowSpaceX); inc(TextRect.Bottom, ShadowSpaceY); SetTextColor(DC, ShadowColor); Result := DrawText(DC, PChar(AText), length(AText), TextRect, TextFlags); dec(TextRect.Left, ShadowSpaceX); dec(TextRect.Top, ShadowSpaceY); dec(TextRect.Right, ShadowSpaceX); dec(TextRect.Bottom, ShadowSpaceY); end else Result := 1; SetTextColor(DC, TextColor); Result := Result and DrawText(DC, PChar(AText), length(AText), TextRect, TextFlags); SetBKMode(DC, OldBkMode); SetTextColor(DC, OldTextColor); end; // DrawShadowText: für einfache Ausgabe // Verwendung: export aus Unit ////////////////////////////////////////////////////////////////////////////// function DrawShadowText(DC: HDC; x, y: Integer; AText: string; TextColor, ShadowColor: COLORREF; ShadowSpaceX, ShadowSpaceY: Integer): Integer; var TextSize: TSize; TextRect: TRect; begin GetTextExtentPoint(DC, PChar(AText), Length(AText), TextSize); TextRect := RECT(x, y, x + TextSize.cx, y + TextSize.cy); // TextColor-Bug umgehen if TextColor = $00000000 then TextColor := $00010101; if @DrawShadowTextI <> nil then begin Result := DrawShadowTextI(DC, PWideChar(WideString(AText)), length(AText), @TextRect, 0, TextColor, ShadowColor, ShadowSpaceX, ShadowSpaceY); end else begin Result := DrawShadowTextL(DC, TextRect, AText, TextColor, ShadowColor, ShadowSpaceX, ShadowSpaceY, 0); end; end; // DrawShadowTextR: für formatierte Ausgabe (R - Text[R]ect) // Verwendung: export aus Unit ////////////////////////////////////////////////////////////////////////////// function DrawShadowTextR(DC: HDC; TextRect: TRect; x, y: Integer; AText: string; TextColor, ShadowColor: COLORREF; ShadowSpaceX, ShadowSpaceY: Integer; TextFlags: DWord): Integer; begin // TextColor-Bug umgehen if TextColor = $00000000 then TextColor := $00010101; if @DrawShadowTextI <> nil then begin Result := DrawShadowTextI(DC, PWideChar(WideString(AText)), length(AText), @TextRect, TextFlags, TextColor, ShadowColor, ShadowSpaceX, ShadowSpaceY); end else begin Result := DrawShadowTextL(DC, TextRect, AText, TextColor, ShadowColor, ShadowSpaceX, ShadowSpaceY, TextFlags); end; end; // Initialization der Unit ////////////////////////////////////////////////////////////////////////////// initialization if IsWindowsXPAndUp then begin hComCtl32DLL := LoadLibrary('ComCtl32.dll'); @DrawShadowTextI := GetProcAddress(hComCtl32DLL, 'DrawShadowText'); end; // Finalization der Unit ////////////////////////////////////////////////////////////////////////////// finalization if hComCtl32DLL <> 0 then FreeLibrary(hComCtl32DLL); end. // End of Unit ShadowTextN |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 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