AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Ich will die Sanduhr zurück!
Thema durchsuchen
Ansicht
Themen-Optionen

Ich will die Sanduhr zurück!

Ein Thema von p80286 · begonnen am 3. Feb 2017 · letzter Beitrag vom 6. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

Ich will die Sanduhr zurück!

  Alt 3. Feb 2017, 12:40
Hallo zusammen,
blöder Titel, trifft aber beinahe was ich will.
Jedes Mal wenn meine Anwendung auf eine DB zugreift (Screen.Cursor:=crHourglass; wird nach Tagesform mal Wasserstand in der Regenrinne div Sekunden der vollen Stunde) die "Sanduhr" angezeigt.
Ja, die Abfrage läuft in einem eigenen Thread, die GUI hat also eigentlich genug Zeit sich um Wichtiges zu kümmern. Unter NT war es ein richtiger Volkssport sich eigene Cursor zu basteln, aber das scheint aus der Mode gekommen zu sein. Ich hätte mir sonst da etwas auffälliges für die Datenbank gebastelt.
Oder wäre es besser auf der Oberfläche eine "Aktivitätskomponente" zu platzieren, das ist selbst gemacht, da weiß man was man hat?

Was würdet Ihr empfehlen?
Gruß
K-H

P.S.
Meine Ansprüche würden auch vom "DOS-Turner" (|/-\|/-\) befriedigt. Haupsache man sieht etwas.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#2

AW: Ich will die Sanduhr zurück!

  Alt 3. Feb 2017, 12:57
Das mit dem Cursor würde heute wahrscheinlich niemand mehr verstehen

Heute benutzt man eigentlich nur noch Ladeanimationen als Bild in der GUI. Zumindest an der Webentwicklung sollte der praktischerweise dort sein, wo der Benutzer eine Aktion auslöst. Beispiel: Ich klicke auf meiner Seite auf den Button "Rechnung als bezahlt markieren". Dann verschwindet dieser Button und wird von einer Ladeanimation ersetzt. Das wird auf native Anwendungen wohl auch übertragbar sein.

Bei der Bildersuche der Suchmaschine deines Vertrauens findest du mit "loading gif" und "spinner gif" Beispiele für Animationen. Es gibt auch etliche Webseiten, die dir eine Animation generieren, die du dann herunterladen kannst.
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.581 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Ich will die Sanduhr zurück!

  Alt 3. Feb 2017, 13:09
Ich habe in einer kompakten GUI z.B. eine Ladeanimation direkt im Button gemacht. Sprich der Button wurde inaktiv, bekam die Caption Lade... und unter dem Text erschien eine ProgressBar, die natürlich auch in der Taskleiste entsprechend eingeblendet wurde.

Das hat den Vorteil, dass man das Fenster auch minimieren kann und trotzdem noch den Status sieht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Ich will die Sanduhr zurück!

  Alt 3. Feb 2017, 13:19
Das mit dem Cursor würde heute wahrscheinlich niemand mehr verstehen
Oh man, oh mann, ich werde nicht nur, ich bin wohl alt.
Vielen Dank für die Anregung, dann werde ich mich mal umschauen.
(In einer Neueren TOAD-Version habe ich vor kurzem ein Fenster mit "Laufzeit der Abfrage: x sec" gesehen, das war eigentlich nicht schlecht)

Vielen Dank
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Ich will die Sanduhr zurück!

  Alt 3. Feb 2017, 13:39
Für "Damit der Anwender was zu sehen hat." nehme ich regelmäßig aus der JVCL den TJvProgressDialog.
Der hat 'ne Progressbar, in der man halt die Position verschieben kann und 'ne Caption, in der man "Fortschrittstexte" anzeigen kann.

Dazu kommt bei Datenbankabfragen ganz altertümlich Screen.Cursor := crSQLWait; Ja, das mit dem Werden bzw. Sein stimmt wohl, erwischt uns alle irgendwann, da kommt das "Früher war alles Besser" irgendwie ganz von alleine Ist halt der Anfang vom Ende der Flexibilität beim Älterwerden.

Was ich auch ganz gerne mal mache, wenn irgendwelche Arbeitsschritte hintereinander sehr lange dauern:

Application.Title := 'was machen wir-Beschreibung'; Wenn's dann fertig ist, kommt wieder der alte Application.Title dahin. Man sieht halt auch bei minimiertem Programm, dass es noch lebt und noch nicht fertig ist.

Die Sanduhr verschwindet, auch wenn sie eingeschaltet ist, oft, wenn man mit der Maus über irgendwelchen Komponenten vorbeikommt, die entweder irgendwas editierbares haben oder über Scrollbars verfügen. Da wird die Sanduhr dann schonmal beim Drüberkommen umgeändert in das "für die Komponente Richtige" und beim Verlassen nicht zur Sanduhr zurückgeändert, sondern zum Defaultcursor. Ist halt ein bisserl wie Lotto, nur mit weniger "Gewinnchancen"
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Ich will die Sanduhr zurück!

  Alt 3. Feb 2017, 14:19
Die Sanduhr verschwindet, auch wenn sie eingeschaltet ist, oft, wenn man mit der Maus über irgendwelchen Komponenten vorbeikommt, die entweder irgendwas editierbares haben oder über Scrollbars verfügen. Da wird die Sanduhr dann schonmal beim Drüberkommen umgeändert in das "für die Komponente Richtige" und beim Verlassen nicht zur Sanduhr zurückgeändert, sondern zum Defaultcursor. Ist halt ein bisserl wie Lotto, nur mit weniger "Gewinnchancen"
Danke, der Zusammenhang ist mir noch gar nicht aufgefallen.
Ich habe bei einigen Anwendungen ein MSGLabel bzw. ein MSGPanel falls mehrere Arbeitsschritte hintereinander anfallen. Da es sich bei meinem Sorgenkind um eine Dialoganwendung handelt hatte ich so etwas (ähnliches) erst gar nicht in Betracht gezogen.

Früher war's nicht besser, es war weniger bunt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.581 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Ich will die Sanduhr zurück!

  Alt 5. Feb 2017, 10:21
Application.Title := 'was machen wir-Beschreibung'; Wenn's dann fertig ist, kommt wieder der alte Application.Title dahin. Man sieht halt auch bei minimiertem Programm, dass es noch lebt und noch nicht fertig ist.
Das ist doch genau der Anwendungszweck der Fortschrittsanzeige in der Taskleiste. Das hat Microsoft ja genau für diesen Zweck eingebaut. Deshalb macht das auch Sinn das zu benutzen wie ich oben schon schrieb.

Das finde ich auch viel intuitiver als nur den Anwendungstitel zu setzen, den ich nur sehe, wenn ich die Maus drüberhalte. Vor allem kann man auch direkt signalisieren, wenn die Aktion pausiert ist oder z.B. ein Fehler passiert ist, durch den eine Benutzereingabe erforderlich ist. Dazu kommt, dass man ein Overlay-Icon setzen kann um direkt in der Taskleiste zu signalisieren was gerade passiert, wenn das in so kleiner Form möglich ist.
Das sieht dann z.B. so aus:

taskbarstate.png
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Ich will die Sanduhr zurück!

  Alt 5. Feb 2017, 12:50
Application.Title := 'was machen wir-Beschreibung'; Wenn's dann fertig ist, kommt wieder der alte Application.Title dahin. Man sieht halt auch bei minimiertem Programm, dass es noch lebt und noch nicht fertig ist.
Das ist doch genau der Anwendungszweck der Fortschrittsanzeige in der Taskleiste. Das hat Microsoft ja genau für diesen Zweck eingebaut. Deshalb macht das auch Sinn das zu benutzen wie ich oben schon schrieb.

Das finde ich auch viel intuitiver als nur den Anwendungstitel zu setzen, den ich nur sehe, wenn ich die Maus drüberhalte. Vor allem kann man auch direkt signalisieren, wenn die Aktion pausiert ist oder z.B. ein Fehler passiert ist, durch den eine Benutzereingabe erforderlich ist. Dazu kommt, dass man ein Overlay-Icon setzen kann um direkt in der Taskleiste zu signalisieren was gerade passiert, wenn das in so kleiner Form möglich ist.
Das sieht dann z.B. so aus:

Anhang 46603
Über "Intuitiv" kann man wohl diskutieren, wobei es sein kann, daß ich der einzige bin, der sehr selten auf die Taskleiste schaut. Davon abgesehen, wie kann man (ich) das realisieren (Jedi?)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Ich will die Sanduhr zurück!

  Alt 5. Feb 2017, 13:13
Du kannst eigentlich an beliebiger Stelle im Progamm einfach Application.Title eine beliebige Zeichenfolge zuweisen. Die wird dann in der Taskleiste angezeigt.

So 'ne Art Fortschrittsanzeige könne so aussehen:
Delphi-Quellcode:
var
  sTitle : String;
begin
  sTitle := Application.Title;
  Table1.First;
  while not Table1.EoF do begin
    Table1.Edit;
    // Irgendwas ändern
    Table1.Post;
    Table1.Next;
    Application.Title := Format('ID: %.5d',[Table1.FieldByName('ID').AsInteger]);
  end;
  Application.Title := sTitle;
end;
Möchtest Du auch noch das Icon ändern, so müsste Application.Icon dafür die richtige Eigenschaft sein.

[EDIT]
Wenn Du einen eigenen Dialog haben möchtest, so kannst Du den TJvProgressDialog von den Jedis nehmen.

Aktualisieren des Dialoges könnte so gehen:
Delphi-Quellcode:
// pd -> Komponente TJvProgressDialog auf dem Formular
type
  Tform1 = class(TForm)
    pd: TJvProgressDialog;
  public
    { Public-Deklarationen }
    procedure pdAnzeigen(sCaption : String; sText : String = ''; iMin : Integer = 0; iMax : Integer = 100; iPosition : Integer = 50);
    procedure pdHide;
  end;

procedure Tform1.pdAnzeigen(sCaption : String; sText : String = ''; iMin : Integer = 0; iMax : Integer = 100; iPosition : Integer = 50);
begin
  pd.Caption := sCaption;
  pd.Text := sText;
  pd.Min := iMin;
  pd.Max := iMax;
  pd.Position := iPosition;
  pd.Show;
  if sText <> 'then Application.Title := sText;
end;

procedure TfmTextverwaltung.pdHide;
begin
  pd.Hide;
  Application.Title := 'Mein Programmname';
end;

// irgendwo im Programm
var
  iMin : Integer;
  iMax : Integer;
  iPos : Integer;
  sCaption : String;
  sText : String;

begin
  Screen.Cursor := crSQLWait;
  pdAnzeigen('Datenbankabfrage läuft ...');
  qrySQL.ExecSQL;

// oder
  pdAnzeigen('SQL-Statement wird ausgeführt ...',qrySQL.SQL.Text);
  qrySQL.ExecSQL;

//oder:
  pdAnzeigen('Öffne Abfrage ...',qrySQL.SQL.Text);
  qry.Open;
  iMin := 0;
  iMax := qry.RecordCount;
  iPos := 0;
  sCaption := Format('%d Datensätze werden verarbeitet ...',[iMax]);
  sText := '';
  pdAnzeigen(sCaption, sText, iMin, iMax , iPos);
  qry.First
  while not qry.Eof do begin
    Inc(iPos);
    sText := Format('ID: %.5d',[qry.FieldByName('ID').AsInteger]);
    pdAnzeigen(sCaption, sText , iMin, iMax, iPos);
    // Irgendwas mit den Daten machen ...
    qry.Next;
  end;
  qry.Close;
  pdHide;
  Screen.Cursor := crDefault;
[/EDIT]

Geändert von nahpets ( 5. Feb 2017 um 14:05 Uhr) Grund: Text ergänzt
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Ich will die Sanduhr zurück!

  Alt 5. Feb 2017, 13:50
Mal schauen,
Vielen Dank!

K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 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