Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Control Animation v2.5
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

Control Animation v2.5

beantworten | zitieren | melden

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! )
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

Bild der Version 2.0
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von gordon2001 am .
Attachments
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

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??
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von gordon2001 am .
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von gordon2001 am .
private Nachricht | Beiträge des Benutzers
trib
myCSharp.de - Member



Dabei seit:
Beiträge: 689

beantworten | zitieren | melden

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);
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von trib am .
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von gordon2001 am .
private Nachricht | Beiträge des Benutzers
trib
myCSharp.de - Member



Dabei seit:
Beiträge: 689

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Praxissemester
myCSharp.de - Member



Dabei seit:
Beiträge: 11

beantworten | zitieren | melden

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 ?? ^^
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Praxissemester am .
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von gordon2001 am .
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

Neue Version v2.0 ist da !!!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von gordon2001 am .
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

Version 2.5 ist da.

Mit neuer Funktion: dem FullScreenLock (siehe Bild)
Attachments
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

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.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
Smou
myCSharp.de - Member



Dabei seit:
Beiträge: 352
Herkunft: Fürstenfeldbruck

beantworten | zitieren | melden

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;
}
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Smou
myCSharp.de - Member



Dabei seit:
Beiträge: 352
Herkunft: Fürstenfeldbruck

beantworten | zitieren | melden

*freu hüpf*

coole sache :D... 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;
}
private Nachricht | Beiträge des Benutzers
trib
myCSharp.de - Member



Dabei seit:
Beiträge: 689

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von trib am .
Attachments
private Nachricht | Beiträge des Benutzers
phreakadelle
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Wolfenbüttel

beantworten | zitieren | melden

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
...
private Nachricht | Beiträge des Benutzers
dIeGoLi
myCSharp.de - Member



Dabei seit:
Beiträge: 28
Herkunft: CH

beantworten | zitieren | melden

ganz praktisch das ding. danke ;)
private Nachricht | Beiträge des Benutzers
schabe
myCSharp.de - Member



Dabei seit:
Beiträge: 176

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
admirandis
myCSharp.de - Member

Avatar #avatar-3030.png


Dabei seit:
Beiträge: 76

beantworten | zitieren | melden

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 °_° --->
private Nachricht | Beiträge des Benutzers
11.08.2006
myCSharp.de - Member



Dabei seit:
Beiträge: 310

beantworten | zitieren | melden

Zitat von gordon2001
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?
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

oh sorry hier mal der Link Control Animation Mobile v1.0, ist schon seit einem Jahr fertig....
private Nachricht | Beiträge des Benutzers
TBR
myCSharp.de - Member



Dabei seit:
Beiträge: 159

beantworten | zitieren | melden

Ich hab auch ein Zeichen-Problem gefunden.

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

Hier das Bild:


MfG
R
Attachments
private Nachricht | Beiträge des Benutzers
gordon2001
myCSharp.de - Member



Dabei seit:
Beiträge: 219
Herkunft: Mecklemburg-Vorpommern

Themenstarter:

beantworten | zitieren | melden

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! :D Freu mich auch über ein paar Screenshots wie und wo ihr das so einsetzt.

P.S. ich hoffe das hilft dir Björn :)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von gordon2001 am .
Attachments
private Nachricht | Beiträge des Benutzers