Flackern von Gifs

Hallo,
zuersteinmal muss ich sagen, das ich absoluter Beginner bei VB6 bin. Das sollte dann meine schlechte Programmierung entschuldigen.

Ich habe eine Binäre Uhr programmiert.
Soweit funktioniert alles gut, bis auf ein paar Kleinigeiten, die ich aber noch abändere.
Das Hauptproblem jedoch, ist das Flackern der Gif-„Lichter“, das ca. alle 30 Sekunden auftritt wenn die Uhr umschaltet.

Aber macht euch am besten selbst ein Bild davon.
Ich habe die exe und die Projektfiles mal hochgeladen.

www.dona.kilu.de/Uhr

Ich hoffe ihr könnt mir helfen.

mfg Daniel

Hallo,

ich habe das Projekt nicht geldan und angesehen, ich nehme an, daß das nicht nötig ist, im Moment ist das nicht möglich, würde erst heute Abend gehen.

Du verwendest zum Anzeigen der Uhr vermutlich ein Picture-Steuerelement. Stelle da die Eigenschaft ‚Autoredraw‘ auf ‚True‘, dann ist das Flimmern weg.

Falls Du ein ‚Image‘-Steuerelement verwendest, musst Du überlegen, ob Du das ändern kannst, das unterstützt so viel ich weiß kein ‚Doublebuffering‘, d.h. Du kannst das Flimmern da nicht unterdrücken.

Falls das nicht hilft, kann ich erst heute Abend helfen. :smile:

Gruß Rainer

Hallo Rainer,
danke für deine schnelle Antwort, ich werde es im Laufe des Nachmittages probieren, dann schreib ich ob es geklappt hat.

mfg Daniel

OT Wie geht das?
Hallo Daniel,

zuersteinmal muss ich sagen, das ich absoluter Beginner bei
VB6 bin. Das sollte dann meine schlechte Programmierung
entschuldigen.

willste mich veräppeln? Ein absolut Beginner schreibt nicht solch einen Code *sicher bin*

Ich habe eine Binäre Uhr programmiert.

Danke, jetzt weiß ich was das ist und wie man sie abliest. Ich glaube irgendwo in D steht so eine Uhr auf dem marktplatz o.ä. und außer den Eingeweihten weiß keiner wie man die abliest :smile:

Soweit funktioniert alles gut, bis auf ein paar Kleinigeiten,
die ich aber noch abändere.

Ja, manches geht noch nicht, Beenden ncht und wenn man auf „Uhr“ klickt tut sich nix weiter, aber das sind Peanuts.

Wenn es dich interessiert, wenn man das übliche „retained=0“ aus der vbp entfernt läuft dein Code auch mit VB5.0.

Das Hauptproblem jedoch, ist das Flackern der Gif-„Lichter“,
das ca. alle 30 Sekunden auftritt wenn die Uhr umschaltet.

Ich nehme an du mußt da wie von Rainer geraten die Images in Pictures tauschen.

Was mich als eher absolut Beginner :smile: viiiiiiiiel mehr interessiert,

wie geht das:

http://www.bilder-space.de/show.php?file=22.12IOQcb3…

a) Wie erstellt man da die „Menuezeile“ mit „Uhr“ und „Hilfe“, sodaß sich bei Klick darauf ein Untermenu öffnet?

b) In der Titelzeile der Form fehlt rechts das Schließkreuz (gibt es dafür eigentlich einen besseren Namen?) und die Symbole für minimieren und maximieren, wie macht man das? In Vba braucht man dafür API-Aufrufe.

c) im Code werden die Images mit Lampe(0), Lampe(1) usw. referenziert/angesprochen. Habe ich diese Index-Möglichkeit automatisch wenn ich verschiedene Images mit dem gleichen Namen versehe oder muß ich da noch was extra dafür tun?

Zu deiner Anfrage, eine (ungetestete) Idee hätte ich wegen des Flimmerns, wie wäre es du hast da an gleichen Stellen in der Form ein Image eines roten und eines grünen Punktes. Dann jenachdem den einen oder anderen durch visible sichtbar machen, may be es flimmert dann nicht mehr.

Danke ^ Gruß
Reinhard

Hallo Reinhard,

willste mich veräppeln? Ein absolut Beginner schreibt nicht
solch einen Code *sicher bin*

Naja, mit VB6 habe ich erst gestern angefangen, aber VBS kann ich schon ne Weile relativ „sicher“, deshalb ist der Scriptteil nicht allzu schwer.

Ja, manches geht noch nicht, Beenden ncht und wenn man auf
„Uhr“ klickt tut sich nix weiter, aber das sind Peanuts.

Bei mir passiert schon was Wenn ich auf Uhr klcike, dann öffnet sich das Untermenü und Beenden funktioniert bei mri auch.

Ich nehme an du mußt da wie von Rainer geraten die Images in
Pictures tauschen.

Habe ich gemacht, das flackern ist um einiges besser geworden, aber ab und zu ist es noch da.

Was mich als eher absolut Beginner :smile: viiiiiiiiel mehr
interessiert,

wie geht das:

a) Wie erstellt man da die „Menuezeile“ mit „Uhr“ und „Hilfe“,
sodaß sich bei Klick darauf ein Untermenu öffnet?

Hier ist ein gutes Tutorial, dort habe ich es auch gelernt:
http://www.vb-seminar.de/vb_20.htm

b) In der Titelzeile der Form fehlt rechts das Schließkreuz
(gibt es dafür eigentlich einen besseren Namen?) und die
Symbole für minimieren und maximieren, wie macht man das? In
Vba braucht man dafür API-Aufrufe.

Standardmäßig ist das Kreuz Vorhanden, doch ich habe es deaktivert, weil wenn man daraufklickt, sich die Uhr zwar optisch schließt, aber bei den Prozessen immer noch vorhanden ist und 50% CPU-Leistung braucht.
Bei Uhr–>Beenden, ist das nicht der Fall.

c) im Code werden die Images mit Lampe(0), Lampe(1) usw.
referenziert/angesprochen. Habe ich diese Index-Möglichkeit
automatisch wenn ich verschiedene Images mit dem gleichen
Namen versehe oder muß ich da noch was extra dafür tun?

Das macht es Automatisch, wenn du Lampe kopierst(STRG+C) und einfügst, dann kommt eine Meldung ob man ein Control Array anlegen möchte und die muss man mit Ja beantworten. Dann muss man nur fleißig weiter Einfügen(STRG+V), denn alles wird Durchnummeriert --> Lampe(X).

Zu deiner Anfrage, eine (ungetestete) Idee hätte ich wegen des
Flimmerns, wie wäre es du hast da an gleichen Stellen in der
Form ein Image eines roten und eines grünen Punktes. Dann
jenachdem den einen oder anderen durch visible sichtbar
machen, may be es flimmert dann nicht mehr.

Ich versuchs mal, aber ich glaube ich gebe mich mit der Picturebox- lösung zufrieden, das bisschen flackern kann ich verkraften.

mfg Daniel

Hallo Daniel,

willste mich veräppeln? Ein absolut Beginner schreibt nicht
solch einen Code *sicher bin*

Naja, mit VB6 habe ich erst gestern angefangen, aber VBS kann
ich schon ne Weile relativ „sicher“, deshalb ist der
Scriptteil nicht allzu schwer.

„seit gestern“ *umfall*
Das kostet mich wieder mal locker 20 Stunden beim Therapeuten um das zu verkraften, ist ein massivster Angriff auf mein Selbstbewußtsein daß ich fähig bin VB zu erlernen :smile:

Wenn ich wieder röchel und diesen Schock verdaut habe schau ich mir an was du noch geschrieben hast, aber nicht ohne vorher Herztropfen genommen zu haben, vielleicht steht da noch was wie „vorgestern habe ich C++ erlernt und dann mal kurz damit ein verbessertes Windows geschrieben“ o.ä.

*gg*

Gruß
Reinhard

Hallo Reinhard,

b) In der Titelzeile der Form fehlt rechts das Schließkreuz
(gibt es dafür eigentlich einen besseren Namen?) und die
Symbole für minimieren und maximieren, wie macht man das?

Die Eigenschaft Controlbox der Form auf False setzen. Wenn Caption = „“ ist, verschwindet die blaue Kopfzeile ganz.

c) im Code werden die Images mit Lampe(0), Lampe(1) usw.
referenziert/angesprochen. Habe ich diese Index-Möglichkeit
automatisch wenn ich verschiedene Images mit dem gleichen
Namen versehe oder muß ich da noch was extra dafür tun?

Nur der Eigenschaft Index einen Wert geben. Dann kannst Du mehreren Steuerelementen den selben Namen geben, aber verschoedene Inizes. Wie man üblicher Weise dazu kommt weißt Du ja inzwischen schon.

Daß VBA das nicht kann, ist der zweitgrößte Nachteil gegenüber VB. Der größte Vorteil der Methode: Du hast mehrere Steuerelemente mit gemeinsamen Ereignisprozeduren. Also drei Knöpfe, egal welchen Du klickst, es wird der selbe Code abgeaarbeitet, welcher Knopf geklickt wurde steht in der Variablen ‚Index‘. Zweitgrößter Nachteil von VB, weil die fehlenden Handles, die oft den Einsatz von API vereiteln der größte Nachteil sind. :smile:

Gruß Rainer

Hallo Rainer,

b) In der Titelzeile der Form fehlt rechts das Schließkreuz
(gibt es dafür eigentlich einen besseren Namen?) und die
Symbole für minimieren und maximieren, wie macht man das?

Die Eigenschaft Controlbox der Form auf False setzen. Wenn
Caption = „“ ist, verschwindet die blaue Kopfzeile ganz.

c) im Code werden die Images mit Lampe(0), Lampe(1) usw.
referenziert/angesprochen.

Nur der Eigenschaft Index einen Wert geben. Dann kannst Du
mehreren Steuerelementen den selben Namen geben, aber
verschoedene Inizes.

Danke dir für die Erklärungen.

Daß VBA das nicht kann, ist der zweitgrößte Nachteil gegenüber
VB. Der größte Vorteil der Methode: Du hast mehrere
Steuerelemente mit gemeinsamen Ereignisprozeduren. Also drei
Knöpfe, egal welchen Du klickst, es wird der selbe Code
abgeaarbeitet,

Ja, in VBA muß man dann ein Klassenmodul schreiben um die gleiche Funktionalität zu haben.

welcher Knopf geklickt wurde steht in der
Variablen ‚Index‘. Zweitgrößter Nachteil von VB, weil die
fehlenden Handles, die oft den Einsatz von API vereiteln der
größte Nachteil sind. :smile:

Das habe ich (wir) schon gemerkt :smile:

Gruß
Reinhard

Hallo Rainer,

zu a) hast du keine Erklärung?

Gruß
Reinhard

Hallo Reinhard,

zu a) hast du keine Erklärung?

ich habe mir das Projekt nicht angesehen. Ich weiß also noch gar nicht, wovon Du sprichst. Aber OK, ich seh’s mir nachher an …

Fortsetzung folgt … :smile:

Gruß Rainer

Hallo Reinhard,

zu a) hast du keine Erklärung?

Wenn du die Form siehst. Also nicht den Source, sondern die Form wo du deine Steuerelemente drauf ziehst.
Dann schau mal auf die Toolbar ( die bunten Bildchen unter dem menu ( datei, bearbeiten etc.)
Dort findest du als 3 Symbol von Rechts den MenuEditor.
Dort kannst du dein Menu erstellen. Schau es Dir mal an und wenn du fragen hast, so melde Dich einfach noch einmal :smile:
Das alles hier zu erklären würde den Rahmen sprengen :wink:

Alternativ findest du diesen auch unter Extras -> Menueditor oder er ist ueber den Shortcut STRG+E erreichbar. In beiden Faellen muss aber die form sichtbar sein :smile:

MfG Alex

Wenn du die Form siehst. Also nicht den Source, sondern die
Form wo du deine Steuerelemente drauf ziehst.
Dann schau mal auf die Toolbar ( die bunten Bildchen unter dem
menu ( datei, bearbeiten etc.)

Hallo Alex,

danke dir, man kann da schon sagen gut versteckt.

Gruß
Reinhard

Hallo Daniel,

ich habe mir Deinen Code mal angesehen und habe eine Anmerkung dazu.

Wenn Du die Zaheln schon binär darstellst, warum zerlegst Du die nicht zuerst und nutzt das dann gleich für das Programm aus?

Mein Alternativvorschlag ist ganz sicher auch noch nicht optimal, aber sieh ihn Dir trotzdem mal an. Etwas weniger Code habe ich schon.

Gruß Rainer

Option Explicit

Private Sub Timer1\_Timer()
 Dim i As Integer, w As Integer

 Me.Caption = Time

 Dim VHZ As Integer
 Dim VHE As Integer
 Dim VMZ As Integer
 Dim VME As Integer
 Dim VSZ As Integer
 Dim VSE As Integer

 VHZ = Hour(Now) \ 10
 VHE = Hour(Now) - VHZ \* 10
 VMZ = Minute(Now) \ 10
 VME = Minute(Now) - VMZ \* 10
 VSZ = Second(Now) \ 10
 VSE = Second(Now) - VSZ \* 10

 For i = 0 To 3
 w = 2 ^ i
 Sl(i).Picture = Bs((VSE And w) / w).Picture
 Ml(i).Picture = Bs((VME And w) / w).Picture
 Hl(i).Picture = Bs((VHE And w) / w).Picture
 If i 


<sub><pre>Tippfehler im Code beseitigt</pre></sub>

Hallo Daniel,

Ja, manches geht noch nicht, Beenden ncht und wenn man auf
„Uhr“ klickt tut sich nix weiter, aber das sind Peanuts.

Bei mir passiert schon was Wenn ich auf Uhr klcike, dann
öffnet sich das Untermenü und Beenden funktioniert bei mri
auch.

ich habe heute nochmal getestet, jetzt klappt es auch bei mir, hatte wohl nicht-Vb Gründe daß das Bild damals einfror.

a) Wie erstellt man da die „Menuezeile“ mit „Uhr“ und „Hilfe“,
sodaß sich bei Klick darauf ein Untermenu öffnet?

Hier ist ein gutes Tutorial, dort habe ich es auch gelernt:
http://www.vb-seminar.de/vb_20.htm

Danke für den Link, die Seite sieht sehr interessant aus.

Gruß
Reinhard

Soweit funktioniert alles gut, bis auf ein paar Kleinigeiten,
die ich aber noch abändere.

Hi Daniel,

an sich wollte ich dich auf die API-Funktion Sleep hinweisen für deine Warteschleifen, aber eben fand ich etwas was besser sein soll:

http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipp…

Eben beim Schreiben sehe ich daß man das aufruft mit

Wait 5

für 5 Sekunden, das ist gar nicht gut, Millisekunden einstellbar sollten es schon sein, muß das mal testen.
Sollte es so sein, dann nimm halt doch Sleep mit einem DoEvents davor.

Gruß
Reinhard

Ich habe eine Binäre Uhr programmiert.
Soweit funktioniert alles gut, bis auf ein paar Kleinigeiten,
die ich aber noch abändere.
Das Hauptproblem jedoch, ist das Flackern der Gif-„Lichter“,
das ca. alle 30 Sekunden auftritt wenn die Uhr umschaltet.

Hallo Daniel,

ungetestet mit „bestückten“ Formularen, wie wäre es du arbeitest mit zwei Formularen. Eines wird angezeigt, in der Zwischenzeit wird das andere, nicht angezeigte, Formular aktualisiert.

Dann im Sekundentakt die Formulare wechesln.

Form1 hat einen Commandbutton…

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'
Private Sub Command1\_Click()
Dim N
For N = 1 To 10
 If N Mod 2 = 0 Then
 Form1.Visible = False
 Form2.Visible = True
 Else
 Form1.Visible = True
 Form2.Visible = False
 End If
 DoEvents
 Sleep 1000
Next N
End Sub
'
Private Sub Form\_Load()
Form2.Show
Form2.Visible = False
End Sub

Gruß
Reinhard