![]() |
"Sanduhr" Funktion / "Programm arbeitet"
Hallo,
in einer meiner Programme wollte ich Wissen, ob mein Programm noch arbeitet oder ob es irgendwo "hängt". Um einfach eine Bewegung anzuzeigen, wie die gute alte Sanduhr die sich bewegte wenn die Anwendung etwas machte, habe ich eine kleine Funktion geschrieben. Vielleicht kann auch jemand anders gebrauchen:
Delphi-Quellcode:
procedure working(labela: TLabel);
var //zeichen1: array[1..4] of string = ('1','2','3','4'); //zeichen1: array[1..4] of string = ('←','↑','→','↓'); //zeichen1: array[1..4] of string = ('░','▒','▓','█'); zeichen1: array[1..2] of string = ('◇','◆'); //zeichen1: array[1..5] of string = ('ᚋ','ᚌ','ᚍ','ᚎ','ᚏ'); i,a,nicht_vorhanden,stop: integer; begin labela.Font.Name := 'Times New Roman'; labela.Font.Style := [fsBold] ; labela.Font.Size := 15; nicht_vorhanden := 0; stop := 0; for i := 1 to length(zeichen1) do begin Application.ProcessMessages; if labela.caption = zeichen1[i] then begin if i = length(zeichen1) then begin labela.Caption := zeichen1[1]; end else begin labela.Caption := zeichen1[i+1]; end; nicht_vorhanden := 1; break; end; end; if nicht_vorhanden = 0 then begin labela.Caption := zeichen1[1]; end; end; Die Anwendung ist ganz einfach: Ein Label auf die Form setzen. Und die Funktion einfach in die zu arbeitende Stellen setzen.
Delphi-Quellcode:
Bei den Zeichen kann man eigene auswählen, ich habe ein paar Beispiele auskommentiert dazu geschrieben (evtl. können nicht alle Zeichen verwendet werden, dann einfach andere auswählen).
// ... hier wird was berechnet, va. in einer Schleife?
working(Label1); // ... hier wird was berechnet LG Monday |
AW: "Sanduhr" Funktion / "Programm arbeitet"
Was hat das
Delphi-Quellcode:
in der Schleife zu suchen?
Application.ProcessMessages;
Maximal einmal nach der Schleife, aber wer ProcessMessages fahrlässig "einfach" so iggendwo rein macht, der gehört gesteinigt. Also maximal ein Repaint/Refresh wäre wirklich vertretbar. (sorry, wenn es etwas böse klingt, aber nach 30 Jahren Misshandlung darf PM zurückschlagen) Wieso ist die Zeichensatzkonstante "zeichen1" eine Variable? Doppelter Code?
Delphi-Quellcode:
Kann weg, bei
if i = length(zeichen1) then begin
labela.Caption := zeichen1[1]; end else begin Zitat:
Delphi-Quellcode:
.
if nicht_vorhanden = 0 then begin
Ein Exit statt Break und die Variable nicht_vorhanden kann auch weg. Denglisch? (englischer Funktionsname und deutsche Variablen ... warum nicht alles deutsch ODER englichcs?) Und dann lässt sich das ganze als Einzeiler auch mathematisch lösen.
Delphi-Quellcode:
(falls ich mich jetzt nicht verrechnet hab)
procedure Working(LabelA: TLabel);
const WorkChars = '░▒▓█'; // '1234' '←↑→↓' '░▒▓█' '◇◆' 'ᚋᚌᚍᚎᚏ' '|/-\' begin LabelA.Caption := WorkChars[(Pos(LabelA.Caption, WorkChars) + Length(WorkChars)) mod Length(WorkChars) + 1]; LabelA.Repaint; end; Mit einem String-Array geht es auch, siehe ![]()
Delphi-Quellcode:
LabelA.Caption := WorkChars[(IndexStr(LabelA.Caption, WorkStrings) + 1 + Length(WorkStrings)) mod Length(WorkStrings)];
|
AW: "Sanduhr" Funktion / "Programm arbeitet"
Warum programmierst was eigenes, wenn doch Window einen Progressbar für so etwas hat?
Falls du die Prozentzahl nicht kennst, lässt der sich auch Marquee umstellen. Hinzu kommt noch, dass es prima mit der Taskbar zusammen spielt. Das Ding kennen die Benutzer und müssen sich nicht an fremde Darstellungen gewöhnen. |
AW: "Sanduhr" Funktion / "Programm arbeitet"
Vielleicht magst Du ja auch noch die Sanduhr als Cursor haben.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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 by Thomas Breitkreuz