![]() |
Prozentualer Fortschritt als Text in ProgressBar...
Ich würde gern den prozentualen Fortschritt als Text in der Mitte einer Progressbar anzeigen. Ich weiß, das TGauge das kann, jedoch wird diese nicht von der von mir verwendeten Skinengine (suiskin) "geskinnt", weshalb ich den Text nun gern irgendwie auf eine normale Progressbar packen würde :gruebel:
|
Re: Prozentueller Fortschritt als Text in ProgressBar...
Hi,
du könntest über Canvas draufmalen. Ansonsten könntest du auch noch gucken, ob das PSDK irgendwas hergibt in diese Richtung. Zum Beispiel irgendeine Nachricht, die das automatisch macht, die aber nicht von der VCL gekapselt wurde oder sowas. Chris |
Re: Prozentualer Fortschritt als Text in ProgressBar...
Einfach auf den Canvas der Progressbar schreiben:
Delphi-Quellcode:
Man müsste das natürlich noch verfeinern, damit er eine andere Farbe für die Schrift nimmt, wenn der balken unter dem Text liegt. Aber etwas kannst du ja auch selber machen. ;)
procedure foo(Progressbar: TProgressbar; const Text: String);
var dc: HDC; rect: TRect; begin dc := GetWindowDC(Progressbar.Handle); GetClientRect(Progressbar.Handle, rect); SetBkMode(dc, TRANSPARENT); DrawText(dc, PChar(Text), length(Text), rect, DT_SINGLELINE or DT_VCENTER or DT_CENTER); InvalidateRect(Progressbar.Handle, @rect, True); end; |
Re: Prozentualer Fortschritt als Text in ProgressBar...
Danke Luckie ;)
Ich hab den Code noch etwas angepasst...
Delphi-Quellcode:
Die procedure rufe ich nun bei jedem Setzen der Position auf. 3 Probleme hab ich allerdings noch:
procedure TDupFind_Main.WritePercent(Progressbar: TProgressbar);
var dc: HDC; rect: TRect; Text: string; begin if (ProgressBar.Max = 0) or (ProgressBar.Position = 0) then Text := '0%' else if ProgressBar.Max = ProgressBar.Position then Text := '100%' else Text := IntToStr(Trunc(100 / ProgressBar.Max * ProgressBar.Position)) + '%'; dc := GetWindowDC(Progressbar.Handle); rect := ProgressBar.ClientRect; SetBkMode(dc, TRANSPARENT); DrawText(dc, PChar(Text), length(Text), rect, DT_SINGLELINE or DT_VCENTER or DT_CENTER); InvalidateRect(Progressbar.Handle, @rect, True); end; 1. Wie ändere ich die Textfarbe? "SetDCBrushColor(dc,clred);" funktioniert jedenfalls nicht... 2. Wie ändere ich den Textstyle? Jetzt ist der Text immer Fett... 3. Es ist alles stark am Flimmern. Bei jedem neuzeichnen des Progressbar wird der Text wieder weggebügelt |
Re: Prozentualer Fortschritt als Text in ProgressBar...
1.:
![]() 2.: ![]() ![]() 3.: Bei meinem Code flackert nichts, auch wenn sie schnell läuft. Nachtrag: Dein Code flackert bei mir auch nicht. Löst du irgendwo anders noch irgendwelche Repaints aus? |
Re: Prozentualer Fortschritt als Text in ProgressBar...
Moin,
alternativ gibt es auch eine fertige Komponente (im Reiter Beispiele) -> Gauge. MfG Thorsten |
Re: Prozentualer Fortschritt als Text in ProgressBar...
Hi,
Zitat:
Chris |
Re: Prozentualer Fortschritt als Text in ProgressBar...
Ups, sorry - du hast recht
|
Re: Prozentualer Fortschritt als Text in ProgressBar...
Zitat:
1. und 2. hab ich hinbekommen. 3. Der Code flackert Doch! Also hier ist nun meine aktuelle procedure:
Delphi-Quellcode:
Der Aufruf erfolgt bei mir so:
procedure TDupFind_Main.WritePercent(Progressbar: TProgressbar);
var dc: HDC; myfont: Cardinal; rect: TRect; Text: string; begin if (ProgressBar.Max = 0) or (ProgressBar.Position = 0) then Text := '0%' else if ProgressBar.Max = ProgressBar.Position then Text := '100%' else Text := IntToStr(Trunc(100 / ProgressBar.Max * ProgressBar.Position)) + '%'; dc := GetWindowDC(Progressbar.Handle); myfont := CreateFont(-12, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, 'Verdana'); SetBkMode(dc, TRANSPARENT); SetTextColor(dc, clBlack); SelectObject(dc, myfont); rect := ProgressBar.ClientRect; SetBkMode(dc, TRANSPARENT); DrawText(dc, PChar(Text), length(Text), rect, DT_SINGLELINE or DT_VCENTER or DT_CENTER); InvalidateRect(Progressbar.Handle, @rect, True); end;
Delphi-Quellcode:
Beim Setzen der Position wird die Progressbar neu gezeichnet und damit mein Text überzeichnet, durch das anschließende neu schreiben des Textes entsteht ein ziemlich nerviger Flimmereffekt...
ProgressBar1.Position := FCnt;
WritePercent(ProgressBar1); |
Re: Prozentualer Fortschritt als Text in ProgressBar...
wer zuletzt kommt... folge dem Link...
![]() Kann auch % Text Darstellen und ist bei den Farben variabel. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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