AW: ProgressBar für Perfektionisten
Ein TLabel mit den Eigenschaften
AutoSize = Falsesollte das auch können. Einfach Width schrittweise bis auf 0 verringern. |
AW: ProgressBar für Perfektionisten
XE3 ist halt schon ein paar Jährchen alt. Bei was aktuellerem hätte ich die nahe gelegt, schau dir mal Skia4Delphi an.
|
AW: ProgressBar für Perfektionisten
Liste der Anhänge anzeigen (Anzahl: 1)
Hast du im Setup die "Beispiele" mit installiert?
Aber wie gesagt, soooo hübsch modern ist die Komponente nicht und du kannst das auch aus einer TPaintBox (OnPaint) oder TImage oder aus zwei TShape und einem TPanel selber bauen. (alLeft+alClient und dann links das Width setzen) https://delphi-prg.ru/komponent-delphi-gauge https://www.google.com/search?q=delp...&tbm=isch&sa=X https://docwiki.embarcadero.com/Libr....Gauges.TGauge selber bauen: https://www.codetd.com/article/1056245 Dabei hatte Delphi mal sooo coole Fortschrittsanzeigen. Anhang 55122 |
AW: ProgressBar für Perfektionisten
Zitat:
|
AW: ProgressBar für Perfektionisten
Ein PANEL!
Das ist genial, danke! Habe jetzt zwei Panels übereinandergelegt. Das eine (hintere) grau, das andere (vordere) dunkelgrün. Das dunkelgrüne wird immer enger (width:=width - 1) und gibt dabei die Ansicht aufs graue Panel dahinter schrittweise frei. So sieht es aus wie ein Progress Bar, dessen Länge immer kürzer wird. Count-Down-Progressbar mit einfachsten Mitteln. Und es ist auch noch einfacher zu bedienen als diese ProgressBar-Stepby-Methoden. Und optisch eleganter als das froschgrüne Blinken. Ressourcenschonend ist es auch. Ganz lieben Dank für die Idee! |
AW: ProgressBar für Perfektionisten
Wie gesagt "CountDown" müsste doch auch mit einer ProgrssBar gehen, oder nicht?
So weit bekannt, wird die Animation nur von links nach rechts gemacht, aber nicht von rechts nach links, was somit sofort an der richtigen Stelle zeichnen müsste. [edit] jupp, ist so
Delphi-Quellcode:
[/edit]
// Intervall = 1500
procedure TForm8.Timer1Timer(Sender: TObject); begin if ProgressBar1.Position = 20 then ProgressBar1.Position := 80 else ProgressBar1.Position := 20; end; |
AW: ProgressBar für Perfektionisten
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
evtl. ist hier was dabei
Delphi-Quellcode:
https://sourceforge.net/projects/tcycomponents/TcyProgressionPanel http://tcycomponents.sourceforge.net/ https://github.com/jackdp/JPPack
Delphi-Quellcode:
als schnelles Beispiel. var i:Integer; begin cyProgressionPanel1.Open; cyProgressionPanel1.GetLabel.Alignment:=taLeftJustify; cyProgressionPanel1.GetLabel.Caption:='Fortschritt'; // ProgressionPanel1.GetGauge i:=0; while not cyProgressionPanel1.Canceled do begin cyProgressionPanel1.GetGauge.Position:=i; Inc(i); if i>round(cyProgressionPanel1.GaugeMax) then i:=round(cyProgressionPanel1.GaugeMin); application.ProcessMessages; end; // cyProgressionPanel1.Close; end; Gruß |
AW: ProgressBar für Perfektionisten
Danke für die weiteren Antworten.
Die Lösung, die mir am besten gefiel, postete ich in #15 |
AW: ProgressBar für Perfektionisten
Zitat:
Disclaimer: Das Beispiel ist ein Proof of Concept, der Sourcecode ist weder getestet noch optimiert.
Delphi-Quellcode:
Im Formular lässt es sich dann so einsetzen:
type
TProgressBarGUIHelper = class(TComponent) strict private FPaintBox: TPaintBox; FStepWidth: Double; private FPosition: Integer; FStepCount: Integer; procedure InitInternalControls; procedure RecalcStepWidth; procedure DoPaint(pmSender: TObject); procedure DoResize(pmSender: TObject); public constructor Create(pmOwner: TComponent; pmStepCount: Integer = 100); reintroduce; procedure StepReset(pmStartPosition: Integer = 0); procedure StepUp; procedure StepDown; property StepCount: Integer read FStepCount; end; constructor TProgressBarGUIHelper.Create(pmOwner: TComponent; pmStepCount: Integer); begin Assert(pmOwner is TPanel); inherited Create(pmOwner); FStepCount := pmStepCount; InitInternalControls; RecalcStepWidth; end; procedure TProgressBarGUIHelper.InitInternalControls; begin with TPanel(Owner) do begin Caption := ''; BevelKind := bkFlat; BevelOuter := bvNone; BevelInner := bvLowered; OnResize := DoResize; end; FPaintBox := TPaintBox.Create(Owner); FPaintBox.Parent := TPanel(Owner); FPaintBox.Align := alClient; FPaintBox.Color := clGreen; FPaintBox.OnPaint := DoPaint; end; procedure TProgressBarGUIHelper.RecalcStepWidth; begin FStepWidth := FPaintBox.ClientWidth / FStepCount; end; procedure TProgressBarGUIHelper.DoPaint(pmSender: TObject); var rect: TRect; begin if FPosition = 0 then Exit; //=> with TPaintBox(pmSender) do begin if FPosition < FStepCount then rect.Create(0, 0, Trunc(FPosition * FStepWidth), ClientHeight) else rect.Create(ClientRect); Canvas.Rectangle(rect); end; end; procedure TProgressBarGUIHelper.DoResize(pmSender: TObject); begin RecalcStepWidth; end; procedure TProgressBarGUIHelper.StepReset(pmStartPosition: Integer); begin if pmStartPosition < 0 then FPosition := 0 else if pmStartPosition > FStepCount then FPosition := FStepCount else FPosition := pmStartPosition; FPaintBox.Repaint; end; procedure TProgressBarGUIHelper.StepDown; begin if FPosition > 0 then begin Dec(FPosition); FPaintBox.Repaint; end; end; procedure TProgressBarGUIHelper.StepUp; begin if FPosition < FStepCount then begin Inc(FPosition); FPaintBox.Repaint; end; end;
Delphi-Quellcode:
Bis bald...
TfrmMain = class(TForm)
pnlProgressBar: TPanel; private FProgressBarGUIHelper: TProgressBarGUIHelper; procedure TfrmMain.FormCreate(Sender: TObject); begin FProgressBarGUIHelper := TProgressBarGUIHelper.Create(pnlProgressBar); end; ... FProgressBarGUIHelper.StepUp; Thomas |
AW: ProgressBar für Perfektionisten
Warum nicht pmOwner direkt als TPanel, wenn es sowieso ein TPanel sein muß?
Diese Komponente im Release kompiliert, knallt der Code, aber nicht da wo du denkst, denn das Assert arbeitet dort garnicht. PS: Warum nicht von TPaintBox bzw. besser noch von TGraphicControl abgeleitet, anstatt diesen Umwegen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 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