Image flackern

Mahlzeit

hab mal wieder ein problem.
und zwar ist es so das ich auf meiner form ca 10 image habe.
dazu kommen noch einpaar timer.
mein problem liegt darin das die image flackern sobald einige
timer laufen. also immer dann wenn ein timer gestartet wird.
es ist allerdings egal wieviel timer laufen.
und es ist bei 2 von 10 forms nicht so.
irgendwie komisch.
kennt jemand das problem auch oder kann mir so helfen???

mfg fressbrett

Hallo fressbrett,

die Images flimmern eigentlich nur, wenn das Bild neu geladen wird oder Du das Image bewegst. Das ist beim Image auch nicht zu verhindern.
Ich nehme an, Du hast ein Image statt ein Picture genommen, weil Du Teile transparent darstellen willst. Ich habe ein OCX für ein Picture, mit dem Du Bilder mit transparentem Hintergrund flimmerfrei (auch zur Laufzeit mit der Maus) verschieben kannst. Ich kann Dir ein Beispielprogramm mailen, das bei der Installation das OCX bei Dir registriert.

Gruß, Rainer

Hallo auch,

ein Flackern bekommst du auch, wenn du ein Refresh auf die Form machst, also irgendwo me.refresh stehen hast, daß dann mit dem Timer gestartet wird.

Alternativ zum me.refresh kannst du, wenn es nicht das Image betrifft, auch die einzelnen Objects refreshen (Textfelder, Listen, Buttons etc. haben alle einen eignenen refresh Befehl)

Hoffe es hilft dir…

danke für eure antworten nur leider helfen sie mir nicht ganz.
da ich

  1. kein refreshs habe und es ja auch
    komischer weise nicht bei allen forms ist.
    die form wo die meisten timer laufen flimmert z.b. nicht.

und 2. hab ich image gewählt weil ich da die funktion „stretch“ habe.

seidem ich meine buttons auf image umgestellt habe stürzt auch dauernd mein vb ab wenn ich das programm dadrüber starte.
wobei ich net weiß ob das zusammen hängt.

kleiner nachtrag:
hab den timer gefunden der das ganze verursacht.

Private Sub Timer200_Timer()
Label100.Caption = Format(Now, „hh:mm:ss“)
Label200.Caption = Format(Now, „dd.mm.yy“)
End Sub

der hat ne interval von 500 hab ihn schon auf 1000 gesetzt aber
da hat sich nix geändert außer den flimmern abständen.

Hallo,
ich möchte auch mal schreiben:
Jedes Mal wenn Du die Uhrzeit aktualisierst machst Du einen Refresh.
Jedes Mal wenn Du die Formgröße änderst machst Du einen Refresh.
Ist es vielleicht möglich, daß Du unter diesen Bedingungen die Images kurzzeitig unsichtbar machst und danach wieder sichtbar ?
Ich habe mit so einem Trick beim Grid-Füllen SuperErfolge gehabt …

Hallo,

hab den timer gefunden der das ganze verursacht.

Private Sub Timer200_Timer()
Label100.Caption = Format(Now, „hh:mm:ss“)
Label200.Caption = Format(Now, „dd.mm.yy“)
End Sub

der hat ne interval von 500 hab ihn schon auf 1000 gesetzt
aber
da hat sich nix geändert außer den flimmern abständen.

hmmm, falsch ist daran aber nichts. Eventuell hat Der einfach nur zu viel zu tun, weil Dein Programm so umfangreich ist. Mein einziger Gedanke wäre, ihn etwas zu entlasten. Versuch doch mal …

Private Sub Timer200_Timer()
Label100.Caption = Format(Time, „hh:mm:ss“)
Label200.Caption = Format(Date, „dd.mm.yy“)
End Sub

… dann muß nicht erst Datum oder Zeit aus Now gesucht werden, mit Glück geht das schneller.

Eine Frage zu ‚Label200‘. Verwendest Du keine Steuerelemente Felder? Bei so großen Projekten ist das notwendig, Du verschleuderst Resourcen! Es würde mich nicht wundern, wenn das die eigentliche Ursache für Dein Problem ist.

Statt …

Label1
Label2
Label3

… würde bei mir da stehen:

Label1(1)
Label1(2)
Label1(3)

Dann siehst Du immer noch drei Label, aber es werden viel weniger Resourcen verbraucht. Ein Textfeld ist z.B. fast so groß, wie ein ganzes Notepad.

Text1
Text2

Ist dann etwa so, als würdest Du Notepad zwei mal starten.

Text1(1)
Text1(2)

Ist aber nur ein Notepad mit zwei offenen Dokumenten, das ist sehr viel sparsamer.

Weil Du für den Index auch viel leichter Variablen verwalten kannst, wird das Programm davon meist auch schneller und kürzer.

Beim Timer ist das etwas anderes, die würde ich nicht indizieren.

Gruß, Rainer

also das „now“ hab ich schon entfernd aber leider keine verbesserung.
mal ne kleine erklärung.
ich habe 7 forms die jeweils links

-eine lautstärkenregelung
-7 menü buttons
-oben eine leiste wo time und date wiedergegeben werden.

bei zwei forms ist alles in ordnung nur bei den anderen fünf
fangen alle images an zu flackern sobald ich zb die lautstärke
verändere oder aber ein image ändere. aber wieso flimmern dann alle?

die ganzen sachen zu indizieren wäre nun ein riesen aufwand.
vondaher möchte ich davon erstmal absehen genau so wie alle
images gegen picture zu erneuern.
ich verzweifel hier bald.
gerade die forms die nix wirklich zu tun haben flimmern.

Hallo,

ich habe 7 forms die jeweils links …

das klingt so, als hättest Du sieben Formen, die gleich aussehen und die selbe Funktion haben. Warum nimmst Du nicht eine Form und lädtst die so oft, wie Du sie brauchst? Wie das genau geht, hat Anno neulich erklärt …
http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…

So ein Problem wie Du es gerade hast, habe ich noch nicht gesehen, ich muß raten, wo die Ursache liegen könnte. Offensichtlich hast du aber wenigstens 100 mal so viele Steuerelemente wie nötig verwendet und ich könnte mir vorstellen, daß das Deine Probleme verursacht.

Erzähl doch mal, was das Programm tun soll. Schreibst Du auch einen Chat (oder etwas ICQ-Ähnliches)? Frag mal Anno, der hat seinen schon fertig (glaub ich), bei dem ist das eher eine Vodeokonferenz geworden. :smile:

Gruß, Rainer

Hallo Fressbrett,

hoffentlich hast du aus deinen Fehlern gelernt und begehst sie nicht nochmal *zwinker* Nun aber mal zu deinem Problem. Woher weisst du das es ausgerechnet der Timer ist? hast du ihn mal deaktiviert= Flimmert es da auch noch? Wenn nein dann lieht es daran.

Abhilfe dagegen zu schaffen ist rel. Simple. Aber deiner Menge an Steuercontrolen muss man schon etwas tricksen, damit net soviel schreiben muss.

Mir fehlt gerade etwas die Zeit. Aber probiere mal folgendes. Wenn es an dem Timer liegt. Dann schreibe mal bevor du die Zuweisung an die Labels machst. Folgendes

 Call Frost(True,Me)

und nachdem du die Daten an die 2 labels zugewiesen hast, dann wieder

 Call Frost(False,Me)

Nun schreibe dir Fix eine eine Sub Fost mit foldenden Inhalt. Am besten in ein Modul packen :wink:

Option explicit

Private Declare Function LockWindowUpdate Lib "user32.dll" ( \_
 ByVal hwndLock As Long) As Long

Public Sub Frost(Einfrieren as Boolean, F as Form)
Dim Hwnd as Long
Dim c as Control
For each c in F
if typeof c is Image then
'Ein Image wurden gefunden
'Zugreifen kannst du mittels c auf das Element
' Hier das Hwnd ermitteln. Musst mal schauen wie man das am besten ' 'machen kann. Aus dem Stehgreif faellt mir nichts ein. 
' Das Handle des Image an Hwnd zuweisen
if Einfrieren then 
 LockWindowUpdate(Hwnd)
else
 LockWindowUpdate(&0)
end if
next
End Sub 

Sinn ist es alle Images einzufrieren für den Moment der aktualisierung :wink:

MfG Alex

Hallo Fressbrett,

habe gerade eine noch simplere Lösung gefunden :wink: Obs klappt weiss ich net, aber das wurde mir mal gesagt.

Probiere mal folgendes. Setze auf die Form das Control Mediaplayer 10!
Weisse ihm ein Bild zu. Mache das Control so klein das es man net mehr sieht. Starte dann mal dein Project. Das Flackern sollte nun weg sein *zwinker* Ist net scheen die Variante aber geht. Wurde mir zumindest mal gesagt und ein versuch allemal wert :smile:

MfG Alex

1 Like

das war mal ne geile idee.
die natürlich auch klappt.
hätte mir eigentlich selbst in den sinn kommen können
da die zwei forms die nicht flackern einen
media control drin haben :smiley:

thx´s nochmal

Nichts zu danken. Dafür simma ja da :smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]