Throbber in Lazarus-Anwendung
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Throbber in Lazarus-Anwendung
Hallo!
Gibt es eine Möglichkeit, einen Throbber auf einem Formular (möglichst ohne weitere externe Komponenten) anzeigen zu lassen? Kann man den aus einer lib importieren, oder muss man eine GIF-Animation reinbauen?
Gibt es eine Möglichkeit, einen Throbber auf einem Formular (möglichst ohne weitere externe Komponenten) anzeigen zu lassen? Kann man den aus einer lib importieren, oder muss man eine GIF-Animation reinbauen?
Re: Throbber in Lazarus-Anwendung
Verstehe zwar nicht ganz was du meinst mit "lib importieren" ... "ohne weitere externe Komponenten", aber das voraussetzungsfreieste ist wohl, wenn du einfach mit Timer gesteuert verschiedene Bilder in ein TImage lädst.Targion hat geschrieben:Hallo!
Gibt es eine Möglichkeit, einen Throbber auf einem Formular (möglichst ohne weitere externe Komponenten) anzeigen zu lassen? Kann man den aus einer lib importieren, oder muss man eine GIF-Animation reinbauen?
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: Throbber in Lazarus-Anwendung
Alternativ eventuell auch ein Animiertes Gif, setzt allerdings eine entsprechende Komponente voraus.
OpBitmap kann das glaub ich. (theo wird mich da berichtigen) Und TGifAnim gibts auch, nur die Seite von Wile64 ist irgendwie down.
OpBitmap kann das glaub ich. (theo wird mich da berichtigen) Und TGifAnim gibts auch, nur die Seite von Wile64 ist irgendwie down.
Johannes
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Throbber in Lazarus-Anwendung
Ja, die Komponenten kenne ich. Ich kann das ja mal ausprobieren. (mit OPBitmap)
Zu den libs: Throbber sind in einigen GTK-libs enthalten.
Zu den libs: Throbber sind in einigen GTK-libs enthalten.
Re: Throbber in Lazarus-Anwendung
Bei OpBitmap sind zwar die Voraussetzungen im GIF Reader schon vorhanden, aber die Animations-Funktionalität ist nicht direkt abrufbar.
(Passt irgendwie nicht so recht zum Rest).
Es gibt aber noch einen Uralt-Thread wo ich das mit einem Vorläufer von OpBitmap gemacht habe:
http://www.lazarusforum.de/viewtopic.php?p=1694#p1694" onclick="window.open(this.href);return false;
DIe Gif Libs da sind die selben wie in OpBitmap. Das liesse sich wahrsch. relativ schnell anpassen, wenn du das machen möchtest.
Kann man nat. auch so verwenden. Dann vielleicht die doppelten Dateien entfernen, wenn du's parallel mit Opbitmap betreiben willst.
Oder die Kompo von Wile64 verwenden, die ich jetzt aber auch nicht finde.
Ich finde die Lösung mit TTimer und TImage aber am einfachsten, wenn man keine GIF lesen MUSS.
EDIT: Ich probier's mal mit OpBitmap hinzukriegen, kann keine grosse Sache sein.
(Passt irgendwie nicht so recht zum Rest).
Es gibt aber noch einen Uralt-Thread wo ich das mit einem Vorläufer von OpBitmap gemacht habe:
http://www.lazarusforum.de/viewtopic.php?p=1694#p1694" onclick="window.open(this.href);return false;
DIe Gif Libs da sind die selben wie in OpBitmap. Das liesse sich wahrsch. relativ schnell anpassen, wenn du das machen möchtest.
Kann man nat. auch so verwenden. Dann vielleicht die doppelten Dateien entfernen, wenn du's parallel mit Opbitmap betreiben willst.
Oder die Kompo von Wile64 verwenden, die ich jetzt aber auch nicht finde.
Ich finde die Lösung mit TTimer und TImage aber am einfachsten, wenn man keine GIF lesen MUSS.
EDIT: Ich probier's mal mit OpBitmap hinzukriegen, kann keine grosse Sache sein.
Re: Throbber in Lazarus-Anwendung
So, anbei Anigif mit den OpBitmap libs.
Da Threads verwendet werden, muss man im Project.lpr die {$IFDEF UseCThreads} löschen oder den Compilerschalter mitgeben.
Das könnte man natürlich noch in eine nette Klasse packen und auch sonst verbessern, aber da habe ich jetzt keine Zeit zu.
Ich glaube es wird auch so klar, wie man's verwendet
Da Threads verwendet werden, muss man im Project.lpr die {$IFDEF UseCThreads} löschen oder den Compilerschalter mitgeben.
Das könnte man natürlich noch in eine nette Klasse packen und auch sonst verbessern, aber da habe ich jetzt keine Zeit zu.
Ich glaube es wird auch so klar, wie man's verwendet
- Dateianhänge
-
anigif.zip
- (766.99 KiB) 108-mal heruntergeladen
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: Throbber in Lazarus-Anwendung

Ich bin aber so weit gekommen, dass ca. 3 Einzelbilder gezeigt wurden und es dann eine Exception gab. (Und dann habe ich festgestellt, dass sich der Aufwand für einen simplen Splashscreen nicht lohnt)
Aber so wird bestimmt noch was draus!
Zuletzt geändert von Targion am Fr 13. Feb 2009, 19:10, insgesamt 1-mal geändert.
Re: Throbber in Lazarus-Anwendung
Schon gut.
Nimm vielleicht besser anstatt TPanel Timage oder sowas zum anzeigen, dann geht's auch auf Qt.
Ist halt nicht so ganz fertig, dafür aber flexibel.
Musst vielleicht selber noch fine-tunen.
Nimm vielleicht besser anstatt TPanel Timage oder sowas zum anzeigen, dann geht's auch auf Qt.
Ist halt nicht so ganz fertig, dafür aber flexibel.

Musst vielleicht selber noch fine-tunen.
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Throbber in Lazarus-Anwendung
TPaintbox?theo hat geschrieben:Schon gut.
Nimm vielleicht besser anstatt TPanel Timage oder sowas zum anzeigen, dann geht's auch auf Qt.
Ist halt nicht so ganz fertig, dafür aber flexibel.
Musst vielleicht selber noch fine-tunen.
Re: Throbber in Lazarus-Anwendung
Geht auch. Am besten würde man daraus eine von TGraphicControl abgeleitete Komponente machen.marcov hat geschrieben:TPaintbox?
Irgendwie gab's das schon mal von Wile64, darum habe ich das nicht nochmal gemacht.
Aber die Site ist down: http://wile64.neuf.fr/" onclick="window.open(this.href);return false;
Re: Throbber in Lazarus-Anwendung
Ich habe im französischen Forum nachgefragt.
Die GifAnim Komponente von Wile64 kann man auch hier downloaden. http://www.espace-malin.fr/download/component/gifanim/" onclick="window.open(this.href);return false;
Die ist bestimmt etwas ausgefeilter als meine Lösung.
Die GifAnim Komponente von Wile64 kann man auch hier downloaden. http://www.espace-malin.fr/download/component/gifanim/" onclick="window.open(this.href);return false;
Die ist bestimmt etwas ausgefeilter als meine Lösung.
-
- Beiträge: 109
- Registriert: Sa 20. Dez 2008, 20:42
- OS, Lazarus, FPC: Linux (L 0.9.24)
- CPU-Target: 32Bit
- Wohnort: San Jose,CA
- Kontaktdaten:
Re: Throbber in Lazarus-Anwendung
Das geht doch so einfach!
Ne ImageList mit den Einzelbildern,Ein Image und timer.
In den Timer kommt folgender Code rein:
Die Variablen sind global.
Ne ImageList mit den Einzelbildern,Ein Image und timer.
In den Timer kommt folgender Code rein:
Code: Alles auswählen
if i = 15 then i:=0;
if i = 0 then y:=1;
if y = 1 then i:=i+1;
ImageList1.GetBitmap(i, Image1.Picture.Bitmap);
Code: Alles auswählen
If beitragHilfreich then leseitdurch()else volle_ignoranz();
-
- Beiträge: 155
- Registriert: Mi 22. Aug 2007, 14:52
- OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 65719 Hofheim am Taunus
- Kontaktdaten:
Re: Throbber in Lazarus-Anwendung
So habe ich das auch gemacht:
TTimer-Komponente, einen Zähler (kann man auch in der Function OnTimer analog zu' ner C Static Var mit
CONST nZaehler : Integer = 0;
deklarieren)
und dann aus einer ImageList, die Bilder in ein TImage rein (exakt wie ts230 beschrieben)
ABER,... ich habe folgende Merkwürdigkeit, ¿vielleicht einer von Euch eine Idee zur Abhilfe?
Ich starte den Timer,
dann kommt eine Datenbankabfrage (auf eine AS/400 über ODBC), die dauert ihre guten 10 Sekunden.
Während diese läuft, steht auch der Timer ¡und mein Throbber auch!
Doch genau dafür bräuchte ich ihn ja, damit der Anwender weiss, dass das Programm noch arbeitet und sich (noch
) nicht aufgehängt hat.
¿Habt Ihr 'ne Idee, wie man so einen Timer dazu bewegen kann, immer zu arbeiten? (natürlich habe ich auch in die OnTimer-Proc ein Application.ProcessMessages nach dem setzen des Images drin, aber das ist scheinbar egal, da kommt gar keine System-Message, weil die Anwendung wohl soooo mit der SQL-Abfrage beschäftigt ist
TTimer-Komponente, einen Zähler (kann man auch in der Function OnTimer analog zu' ner C Static Var mit
CONST nZaehler : Integer = 0;
deklarieren)
und dann aus einer ImageList, die Bilder in ein TImage rein (exakt wie ts230 beschrieben)
ABER,... ich habe folgende Merkwürdigkeit, ¿vielleicht einer von Euch eine Idee zur Abhilfe?
Ich starte den Timer,
dann kommt eine Datenbankabfrage (auf eine AS/400 über ODBC), die dauert ihre guten 10 Sekunden.
Während diese läuft, steht auch der Timer ¡und mein Throbber auch!
Doch genau dafür bräuchte ich ihn ja, damit der Anwender weiss, dass das Programm noch arbeitet und sich (noch

¿Habt Ihr 'ne Idee, wie man so einen Timer dazu bewegen kann, immer zu arbeiten? (natürlich habe ich auch in die OnTimer-Proc ein Application.ProcessMessages nach dem setzen des Images drin, aber das ist scheinbar egal, da kommt gar keine System-Message, weil die Anwendung wohl soooo mit der SQL-Abfrage beschäftigt ist
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Throbber in Lazarus-Anwendung
Falls du die Abfrage im main thread aufrufst, solltest du dich nicht wundern, da ja während des Aufrufes niemand die timer Ereignisse aus der Warteliste holt und auswertet.KOBOLD Messring GmbH hat geschrieben: ¿Habt Ihr 'ne Idee, wie man so einen Timer dazu bewegen kann, immer zu arbeiten? (natürlich habe ich auch in die OnTimer-Proc ein Application.ProcessMessages nach dem setzen des Images drin, aber das ist scheinbar egal, da kommt gar keine System-Message, weil die Anwendung wohl soooo mit der SQL-Abfrage beschäftigt ist

Wenn dein DB-System keinen wait-callback zur Verfügung stellt, bleibt wohl nichts anderes übrig als Animation und DB-Abfrage in verschiedenen threads auszuführen.
Re: Throbber in Lazarus-Anwendung
Diese Variante hatte ich oben bereits mehrfach erwähnt. Das wollte Targion aber nicht.ts230 hat geschrieben:Das geht doch so einfach!
@Kobold: Meine Gif Variante benutzt zwar Threads, aber wenn der Hauptthread blockt, kann sie wahrsch. auch nicht synchronisieren.
Wie mse sagt, müsstest du deine DB Abfrage wahrsch. auch in einen Thread auslagern, wenn diese keine "Lebenszeichen" von sich geben kann.