![]() |
progressbar problem/gauge
Hallo,
kam gerade auf die idee mir einen kleinen wecker (eher countdowner) zu schreiben, weil ich immer meine pizza anbrennen lasse :shock: klappt eig alles, nur wollte ich den fortschritt, also das zählen der sekunden noch festhalten, zb in einer progressbar (ich hab sgauge genommen, weil da so schön die prozent drinnen stehen ^^) nur schaff ich das irgendwie nicht, dass die sekunden/millisekunden in der progressbar angezeigt werden. weiterhin ist zu erwähnen, dass ich noch nie mit progressbars gearbeitet habe.
Delphi-Quellcode:
#
var
Form1: TForm1; zeit, ms : integer; implementation {$R *.dfm} procedure TForm1.sButton2Click(Sender: TObject); begin messagedlg('blabla', mtinformation, mbokcancel, 0); end; procedure TForm1.sButton1Click(Sender: TObject); var i : integer; begin zeit := strtointdef(sedit1.text, 1); if sedit1.text = '' then begin sedit1.text := '1'; end; ms := zeit * 60 * 1000; timer1.Interval := ms; sgauge1.MinValue := 0; sgauge1.MaxValue := ms; for i := 1 to 100 do begin sgauge1.progress := sgauge1.Progress +1 ; end; Timer1.Enabled := true; Showmessage('Countdown beginnt, alarm in ' + inttostr(zeit) + ' minute/n'); end; procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := false; end; procedure TForm1.Timer1Timer(Sender: TObject); var i: integer; begin for i := 1 to 100 do begin windows.Beep(1000,100) end; sedit1.Clear; end; end. danke |
Re: progressbar problem/gauge
Du kannst mein
![]() |
Re: progressbar problem/gauge
naja hat mir jetzt nicht richtig geholfen, die progressbar funktioniert immer noch nicht ( bzw immer noch falsch)
|
Re: progressbar problem/gauge
Hallo,
guck dir deinen Quelltext nochmal an... So wie er jetzt ist, wird .Progres des Gauges unabhängig vom .MaxValue um 100 erhöht. Dies geschieht bevor der Countdown begonnen hat. Bei einem Gauge gibt MaxValue den Wert für 100% an. Bei 10 Minuten wären 100% also 600000(ms) und so ist es kein Wunder das Du nichts von deinem Progress siehst(,da Du ja bedingungslos um 100 erhöhst)... Siehst Du den Fehler? Grüße |
Re: progressbar problem/gauge
ja, ich seh ihn, aber bin am verzweifeln wie man ihn beseitigen kann
ist doch eigentlich ganz leicht, nur leider scheiterts gerade bei mir an der logik |
Re: progressbar problem/gauge
Ganz genau eigentlich ist es ganz leicht, also möchte ich die Lösung aus dir rauskitzeln :-D
Wo scheiterts denn genau? Welcher Schritt ist nicht klar? |
Re: progressbar problem/gauge
naja ich muss doch irgendwie den timer mit der progress bar synchronisieren oder?
start wert ist 0, max wert ist ms, also die millisekunden, die der countdown runterzählt aber was ich auch versuche, sobald ich den start btn drücke, schießt die progressbar auf 100% |
Re: progressbar problem/gauge
sprichst Du das Gauge immernoch mit der for-Schleife an? Wenn ja dann dann mach doch sowas hier.
Delphi-Quellcode:
Eine Alternative ist natürlich noch, den Gauge.Progress über den Timer zu verändern. Hierzu müsste dann der Timer in kleineren Intervalles ausgeführt werden und abfragen wann das Gauge voll ist.
for i:= 1 to Gauge1.MaxValue do
begin Gauge1.Progress:= Gauge1.Progress +1; Sleep(1); end; (Dass das Gauge auf Max schießt liegt daran, dass die Schleife so schnell abgearbeitet wird, dass keine Zeit bleibt das Ergebnis anzuzeigen. Kleine unterbrechungen ruft Application.ProcessMessages hervor.) |
Re: progressbar problem/gauge
Ich versuchs mal.. aber nur weil mir langweilig ist, da ich auf eventuelle Antworten auf meinen Thread warte... :-D
Delphi-Quellcode:
Hui, der rote Kasten... Whatevers Beispiel wäre auch okay, wenn das Timer-Intervall auf 1000 stehen würde, man auf Gauge1.Progress 1000 addieren würde und man Sleep(1000) benutzen würde. Das liegt daran, weil du hier mit Millisekunden hantierst - warum eigentlich?
procedure TForm1.sButton1Click(Sender: TObject);
var i : integer; begin zeit := strtointdef(sedit1.text, 1); if sedit1.text = '' then begin sedit1.text := '1'; end; ms := zeit * 60 * 1000; // Das Intervall bestimmt, in welchen Abständen der Timer aufgerufen wird. // Also nehmen wir 1000ms = 1sek // Die Schleife war hier völlig über, weil sie nichts anderes gemacht // hat, als sgauge1.Position auf 100 zu setzen (wenn Position 0 war). timer1.Interval := 1000; sgauge1.Position := 0; sgauge1.MinValue := 0; sgauge1.MaxValue := ms; Timer1.Enabled := true; end; procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := false; end; procedure TForm1.Timer1Timer(Sender: TObject); var i: integer; begin // Und hier wird der Progress eben erhöht. // Warum sollte hier 100 mal gebeept werden? sgauge1.progress := sgauge1.progress + 1000; if sgauge1.progress = sgauge1.max then begin // Wenn Ende erreicht, piepen windows.beep(1000, 100); end; end; HTH - und weil Freitag ist und ein Bierchen drin ist keine Garantie auf Richtigkeit, ausserdem ist alles ungetestet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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