Throbber in Lazarus-Anwendung

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Targion
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

Beitrag von Targion »

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?

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Throbber in Lazarus-Anwendung

Beitrag von theo »

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?
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.

monta
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

Beitrag von monta »

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.
Johannes

Targion
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

Beitrag von Targion »

Ja, die Komponenten kenne ich. Ich kann das ja mal ausprobieren. (mit OPBitmap)
Zu den libs: Throbber sind in einigen GTK-libs enthalten.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Throbber in Lazarus-Anwendung

Beitrag von theo »

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.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Throbber in Lazarus-Anwendung

Beitrag von theo »

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
Dateianhänge
anigif.zip
(766.99 KiB) 108-mal heruntergeladen

Targion
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

Beitrag von Targion »

:D DANKE! Ich war grade schon dabei, das mit der OPBitmap selbst zu schreiben. (Weil ich nichts für Animationen gefunden habe)
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.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Throbber in Lazarus-Anwendung

Beitrag von theo »

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.

marcov
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

Beitrag von marcov »

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.
TPaintbox?

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Throbber in Lazarus-Anwendung

Beitrag von theo »

marcov hat geschrieben:TPaintbox?
Geht auch. Am besten würde man daraus eine von TGraphicControl abgeleitete Komponente machen.
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;

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Throbber in Lazarus-Anwendung

Beitrag von theo »

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.

ts230
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

Beitrag von ts230 »

Das geht doch so einfach!
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);
Die Variablen sind global.

Code: Alles auswählen

 If beitragHilfreich then leseitdurch()else volle_ignoranz();
tiersendung.funpic.de

KOBOLD Messring GmbH
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

Beitrag von KOBOLD Messring GmbH »

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 :wink: ) 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

mse
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

Beitrag von mse »

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
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. ;-)
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.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Throbber in Lazarus-Anwendung

Beitrag von theo »

ts230 hat geschrieben:Das geht doch so einfach!
Diese Variante hatte ich oben bereits mehrfach erwähnt. Das wollte Targion aber nicht.

@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.

Antworten