Laden...

Control Animation v2.5

Erstellt von gelöschtem Konto vor 15 Jahren Letzter Beitrag vor 8 Jahren 34.616 Views
Gelöschter Account
vor 15 Jahren
Control Animation v2.5

Auf der Not herraus so etwas zu brauchen ist das hier entstanden. 🙂

Mit Hilfe der Klasse kann man eine LadeAnimation auf übergebenen Controls oder direkt auf den Bildschirm zeichnen. Großer Vorteil gegenüber anderen Klassen die sowas machen, die Animation zeichnet auch dann weiter wenn eure Application "freeze" ist. Also zum Beispiel etwas lädt ohne Threading zu nutzen (laden von vielen Controls).

Beispiel im Anhang zeigt das Zeichnen auf verschiedenen Controls, direkt auf dem Bildschirm und die Anwendung der WaitBox (Extended MessageBox).

*neu in v2.5: Neu sind die Methoden FullScreenLock und ReleaseFullScreenLock,
diese sperren denn gesamten Bildschirm mit einem halbtransparenten Overlay plus Animation.

Viel Spaß....

Mehr Informationen und Hilfe unter www.balticsd.de
Und hier noch die Portierung auf Windows Mobile.

!!! Alle die das runterladen und ausprobieren dürfen auch gerne etwas dazu schreiben (Anregungen oder Kritik 😉 )

Changelog v2.5

  • FullScreenLock Methode eingeführt

Changelog v2.0

  • static class schließt nun Ordnunggemäß
  • GDI Resourcen werden vollständig freigegeben
  • Thread laufen in einem Threadpool um mehrfach Ausführung auf einem Control zu verhindern
  • Thread beenden sich selbständig beim entfernen aus Threadpool ( kein Thread.Suspend() mehr )
  • alle Methoden und Eigenschaften vollständig mit Kommentaren versehen
  • Namespace korrigiert
  • WaitBox wurde hinzugefügt
  • Zeichen direkt auf Bildschirm wurde hinzugefügt ( achtung experimentell nicht produktiv einsetzen! )
Gelöschter Account
vor 15 Jahren

Bild der Version 2.0

Gelöschter Account
vor 15 Jahren

Hallo gordon2001,

eine hübsche sache, die du dir da ausgedacht hast. Allerdings habe ich ein paar kleinere anmerkungen.

  1. wenn man StopBlinking auf ein control ausführt, das in der property "Tag" nicht deinen thread hat, dann krachts
  2. abort ist ein großer holzhammer für threads. das kann man besser lösen.
  3. es ist in den meisten fällen keine gute idee, einfach das "Tag" property des controls zu überschreiben. ich z.b. nutze das recht häufig und da wäre ein überschreiben fatal.
  4. wenn jemand während der animation das tagproperty überschreibet, dann wird es krachen, wenn er die animation anhalten möchte oder der garbagecollector einfach losrennt
  5. pen und brush haben ein .Dispose und müssen daher freigegeben werden. in deinem fall aber würde sich eine statische lösung anbieten, dammit nicht jedes control seinen eigenen brush und eigenen pen hat und damit sie nicht jedesmal neu erstellt werden. siehe auch:
    Dispose implementieren und verwenden
  6. das verschieben der colors in dem array ist unnötig. du kannst einfach einen count verwenden, der als offsetparameter verwendet wird. das ist deutlich perfomanter.
  7. wenn ein control noch nie angezeigt wurde, dann hat es auch kein handle, welches aber von dir verwendet wird. demnach dürfte es dabei auch krachen. verhindern kannst du das, indem du überprüfst, ob das control sein handle bereits erstellt hat.
  8. thread. sleep ist nicht so gut. besser wäre ein timer.

ansonsten finde ich die komponente wirklich gut.

gruß
Jack

Gelöschter Account
vor 15 Jahren

Danke für die Komentare. Sind alles Sahcen an den ich gerade sitze.
Werde in der nächsten Version aber weder Timer noch Sleep nutzen.
Sondern einfach System interrups registrieren.

Wieso meinst du das der Timer Vorteile bringt??

Gelöschter Account
vor 15 Jahren

Version 1.0 ist nun Online (link im ersten post)

Erneuerungen:

  • 3 Arten wählbar (Punkte , Linien , Kreis)
  • Farbe wählbar
  • 2 Überladungen der Startmethode ermöglichen die Verwendung vordefinierter Zeicheneinstellungen oder eigener (Breite, Größe usw.)
  • übergabe von Control oder Handle möglich
  • Zeichenmethode komplet überarbeitet (z.B. Antialising)
  • diverse Fehler beseitigt

p.s. wegen der Frage ob "Timer" oder "Thread.Sleep()" ich werde weiterhin Thread.Sleep nutzen da diese Art der Unterbrechung keinerlei Prozessorzeit in Anspruch nimmt (im Gegensatz zum Timer).

Hab auch eine Technische Anfrage bei Microsoft zu dem Thema gestartet ( jaja bin Tech Channel Premium User 😁 ) dort wurde mir auch zu Thread.Sleep geraten.

T
708 Beiträge seit 2008
vor 15 Jahren

Hey gordon,

habe das Tool eben heruntergeladen und getestet.
Sieht super aus!

Das ist das Optimale, wenn man eine Form mit mehreren Buttons hat, die alle verschiedenste längerfristige Operationen ausführen. So kann der User sofort erkennen, das da noch ein oder mehrere Prozesse laufen.

Dankeschön!

EDIT:
Habe jetzt das ganze mal in einem eigenen Projekt eingebunden.
Leider "Enabled" es mein Control aber nicht wieder...
Hast du eine Ahnung woran das liegt?

ControlAnimator.startAnimating(this.lbSql, ControlAnimator.DrawMode.Dots, (int)5, (int)15, (int)3, Color.Blue);            
            new Thread(TestThread).Start();                        
            ControlAnimator.stopAnimating(this.lbSql);
Gelöschter Account
vor 15 Jahren

jo sorry werd heute noch version v1.1 hochladen das ist ein bug, habsch vergessen X(
Sonnst haste alles richtig gemacht 🙂
p.s. bin dabei das noch zu erweitern man kann jetzt auch so ein warte kreis irgnendwo auf den bildschirm zeichnen, über allem anderen drüber 🙂


gepatcht ab Version 2.0

T
708 Beiträge seit 2008
vor 15 Jahren

Das klingt gut, vorallem die Erweiterung!

War das 2. was ich bemerkt habe^^
Wird z.B. ein Container mit Inhalt (ListBox...) benutzt, versteckt sich die Animation dahinter.

Viel Erfolg!

EDIT:
Verdammt Praxissemester, du hast Recht!
Ich habe mich schon beim Debuggen gewundert, das mein Programm nach dem Close immer noch im Debug-Modus ist.
Dachte erst, das liegt daran, das ich ziemlich viel von der Form überschrieben habe,
ist aber dann wohl das Control.

P
10 Beiträge seit 2008
vor 15 Jahren

Ich habe die Klasse in mein Projekt eingebunden und bin begeistert.
Erstmal Respekt und Vielen Dank an dieser Stelle.

Habe allerdings das Problem das meine Anwendung nicht richtig beendet wird wen ich die Methoden benutzt habe. Wie wen noch eine Form nicht geschloßen worden wäre. Ist das ein Bug ? oder ein Fehler bei mir ? ohne dein Tool funktioniert es ganz normal.

EDIT:
Beiträge sparen ?? ^^

Gelöschter Account
vor 15 Jahren

hallo ja das ist richtig ist ein bug, arbeite gerade daran. Das passiert d in der static class anscheinend die thread zwar komplett ablaufen aber ihre instanzen noch bestehen und die static class sich dann nicht schließt. sorry heute kommt das update versprochen 😁

p.s. wegen listview bzw. container controls. in solchen fällen wo das control ein handel eines verstecken controls zurück gibt , kannst du meine dritte überladung nehmen, musst dir nur vorhher aus dem container das richtige handle (IntPtr) holen und dann an meine Klasse übergeben.


gepatcht ab Version 2.0

Gelöschter Account
vor 15 Jahren

Neue Version v2.0 ist da !!! 😁

Gelöschter Account
vor 15 Jahren

Version 2.5 ist da.

Mit neuer Funktion: dem FullScreenLock (siehe Bild)

1.696 Beiträge seit 2006
vor 15 Jahren

Hallo gordon2001,

schönes Teil hast du da, Hut ab. Vielen Dank.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

S
341 Beiträge seit 2008
vor 15 Jahren

Servus,

ein sehr cooles ding 😁
Gibt es denn sowas auch kompatibel für Windows Mobile 6 ? 😁
oder verwendet es nur funktionen die auch mit Mobile 6 kompatibel sind bzw die im CF enthalten sind ?..

grüße
Smou

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
Gelöschter Account
vor 15 Jahren

hm ok gute frage. Achne geht net nutze viel methoden aus der gdi32.dll.
Aber gute Nachricht muss nur mein wrapper anpassen sind alle auch im WindowsMobile enthalten (coredll.dll). Werd morgen dann noch eine Version für CF veröffentlichen.

wäre sehr cool wenn ihr mal bilder posten würdet wo ihr das einsetzt , würde mich interessieren 🙂

S
341 Beiträge seit 2008
vor 15 Jahren

*freu hüpf*

coole sache 😄... vielen dank

sobald ich was zeigen kann stell ich gerne auch ein paar screen rein 😁

**Nur die Kenner können mit 10 Fingern bis 1023 zählen !!**
private int Main()
{
   string programmingSkills = getMySkills("programming")
   return = 1;
}
T
708 Beiträge seit 2008
vor 15 Jahren

Ist sicherlich kein super Programm, aber dein Control passt da wie "Faust aufs Auge".
--Das Proggie liest alle Dienste mit Starttyp aus und man kann diese starten/beenden, filtern | suchen. Zusätzlich noch die Prozesse und Autostart Einträge--

Nur den Screenshot zu machen, war nicht so einfach. Denn der Zeigt das Control in seinem letzten Zustand (Sprich: wie das 1. Bild.) auch wenn das Control noch seine Runden dreht. Ging aber mit einem eigenen Screenshooter.

EDIT: Ja, ich spare gerne Beiträge. Weltwirtschaftskrise und so...

Mir ist gerade aufgefallen, wenn die CheckedListBox keine Werte bekommt, bleibt das Control stehen. Sobald die Box neu gezeichnet wird (resize...) verschwindet es wieder.
Nur so zur Info. Stört mich jetzt nicht gerade 🙂

P
66 Beiträge seit 2009
vor 14 Jahren

Hi!

Gibt es die Möglichkeit die Rotationsrichtung zu ändern bzw. ist eine Implementierung dieser Möglichkeit angedacht? Standardmäßig läuft das Ganze ja gegen den Uhrzeigersinn.

Grüße
phreakadelle

...

D
28 Beiträge seit 2005
vor 14 Jahren

ganz praktisch das ding. danke 😉

S
156 Beiträge seit 2007
vor 14 Jahren

Hallo,

ich hab ein Problem mit dem Control. Und zwar wird in einer MDI-Anwendung genutzt um das Laden von einem Datagridview anzuzuzeigen. Wenn in diesem Datagridview schon Daten sind und ich diese aktualisiere wird die Ladeanimation angezeigt aber der Hintergrund des Conrtol selber nicht. Zum genaueren Verständnis habe ich ein Screenshot angehängt.

Gruß

schabe

72 Beiträge seit 2009
vor 14 Jahren

Hi Gordon,

echt coole Sache. Vorallem, dass es nicht hängen bleibt, wenn man mal zu faul ist nen eigenen Thread wegen einer Operation zu machen!

Hut ab und weiter so!

<--- Sir, we are surrounded!! <-> Perfect! We can attack in any direction °_° --->

1
310 Beiträge seit 2006
vor 14 Jahren

hm ok gute frage. Achne geht net nutze viel methoden aus der gdi32.dll.
Aber gute Nachricht muss nur mein wrapper anpassen sind alle auch im WindowsMobile enthalten (coredll.dll). Werd morgen dann noch eine Version für CF veröffentlichen.

wäre sehr cool wenn ihr mal bilder posten würdet wo ihr das einsetzt , würde mich interessieren 😃

Hallo Gordon,

ich würde das Control auch gerne unter Windows Mobile einsetzen. Hast Du es mittlerweile portiert?

Gelöschter Account
vor 14 Jahren

oh sorry hier mal der Link Control Animation Mobile v1.0, ist schon seit einem Jahr fertig....

T
154 Beiträge seit 2009
vor 14 Jahren

Ich hab auch ein Zeichen-Problem gefunden.

Das ganze passiert in Kombination mit dem Qios.DevSuite "QCompositeControl".

Hier das Bild:

MfG
R

Gelöschter Account
vor 8 Jahren

Auf Grund einer Anfrage die mich jetzt (6 Jahre nach dem Erstellen) erreicht hat hier noch mal ein Update. 😃 Da ich schon seit Jahren nicht mehr mit WindowsForms entwickle und nicht mehr auf dem aktuellen Stand bin was die nativen Interfaces betrifft kann ich leider kein Bugfixing mehr machen. Ich entwickle auf dem Desktop grundsätzlich nur noch mit XAML. Da ich aber die Leute die es noch nutzen möchten, nicht gerne im Regen stehen lasse, werde ich den Quelltext veröffentlichen. Diese ist zwar nicht sonderlich toll kommentiert aber da er nur sehr kurz im umfang ist sollte sich jeder zurecht finden. Ich freu mich aber das es tatsächlich noch Anwender findet. Freut mich wirklich sehr! 😄 Freu mich auch über ein paar Screenshots wie und wo ihr das so einsetzt.

P.S. ich hoffe das hilft dir Björn 😃