GUICtrlSetData und Label ?

  • Hy,

    ich hab mir ein kleines Script geschrieben das ein paar Daten kopiert und dachte mir, dass ich die bereits übertragenen Prozent oder auch MB anzeigen lasse.

    Folgendes hab ich zusammengebastelt:

    [autoit]


    $copyperc = GUICtrlCreateLabel("",50,482)

    [/autoit][autoit][/autoit][autoit]

    While 1
    $msg = GUIGetMsg()

    [/autoit][autoit][/autoit][autoit]

    Select
    Case $msg = $exit
    ExitLoop
    Case $msg = $target
    $targetfolder = FileSelectFolder("Zielordner:", "", 1)
    GUICtrlSetData($pathlabel,$targetfolder)
    _WinAPI_CopyFileEx('U:\Video\dvd1.mdf', 'D:\dvd1.mdf', DllCallBackGetPtr($hProgressRoutine), $COPY_FILE_FAIL_IF_EXISTS)
    MsgBox(0, 'CopyFileEx', _WinAPI_GetLastErrorMessage())
    DllCallbackFree($hProgressRoutine)

    [/autoit][autoit][/autoit][autoit]

    EndSelect
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _Progress($iTotalFileSize, $iTotalBytesTransferred, $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $iData)
    GUICtrlSetData($copyperc,Round(($iTotalBytesTransferred / $iTotalFileSize * 100), 1) & '%')
    ;Sleep(10)
    If _IsPressed('1B') Then
    Return $PROGRESS_CANCEL
    Else
    Return $PROGRESS_CONTINUE
    EndIf
    EndFunc

    [/autoit]


    Das ist nur der Ausschnitt dazu.
    Nun habe ich folgendes Probelm:
    Mit einem Progress-Bar funktionierts einwandfrei. Wenn ich nun aber versuche ein Label zu erneuern dann schreibt er dies nicht neu, sondern setzt den Text einfach drüber, sodass man nichts mehr lesen kann. Wenn ich aber zum Abbrechen ESC drücke, erscheint die richtige Zahl.

    Wenn mir das jemand erklären könnte, warum das so ist, wäre ich sehr dankber :)

    MfG
    Alex

    edit: Ok ich habs rausgefunden. Es lag daran, dass ich den Hintergrund auf Transparent gesetzt hatte. Aber trotzdem bleibt ein Flimmern der anzeige wenn es etwas schneller geht, solange ich den Hintergrund auf die richtige Farbe setzte. Gibts da eine effektivere "Aktualierungsmethode" ?

    Einmal editiert, zuletzt von Metzlmane (19. August 2009 um 13:41)

  • vielleicht wäre es effektiv, wenn du dafür sorgst, dass er nich alle 0.4 sek aktualisiert, so schnell nimt ein gehirn das was steht eh net wahr...

    Dies ist ein Arzeneimittel.
    Bei Risiken und Haluzinationen fressen sie die Packungsbeilage und schlagen Sie ihren Arzt oder Apotheker.
    Jede Haftung wird abgelent.

    Vielen Dank für Ihre Kundentreue.
    mfg. TimBlo

    Aperture Science

    http://www.youtube.com/watch?v=Y6ljFaKRTrI

    • Offizieller Beitrag

    Das geflackere des Label kannst du auch verringern, wenn du deine Progress Funktion abänderst. Einfach eine Abfrage einbauen ob sich der anzuzeigende Wert geändert hat und nur bei Änderung mit GuiSetData das Label neu setzen.