Jump to content

flikker text


Recommended Posts

i have a problem i wanna count the lengt from text in my sms prog, the problem is it flickers because it calulate the hole time i inigrate this script in the while from my gui, anyone a idea to fix this? i tryed sleep this works but the gui is verry slow then

$length = StringLen(GuiCtrlRead($TEXT)) 
GUICtrlSetData ($Characters,"Totaal Char: "&$length)
For $i = 1 To string($length/161)+1
$y  =String(160*$i-$length)
GUICtrlSetData($SMS,"SMS: "&$i&"  Remaining Char: "&$y)
Link to comment
Share on other sites

at the start of the loop you do something like this:

$timer = Timerinit()

and in the loop you test the expired time like this:

if Timerdiff($imer) > $x then

; your stringcode

$timer = Timerinit() ; reinitialize Timer

endif

$x is the time it waits

Edited by bluelamp
Link to comment
Share on other sites

The best way around this is to register a _WM_COMMAND function to notify your script when the text changes for your input.

#include <GUIConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

$gMain = GUICreate("_WM_COMMAND Example", 362, 150, -1, -1, BitOR($WS_MINIMIZEBOX,$WS_CAPTION,$WS_POPUP,$WS_MAXIMIZEBOX))
GUICtrlCreateLabel("String:", 31, 8, 34, 17, $SS_RIGHT)
$edString = GUICtrlCreateEdit("", 72, 8, 265, 73, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
$lbCount = GUICtrlCreateLabel("Count: 0", 24, 90, 100, 17)

$bTyped = False
GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Select
        Case $nMsg = $GUI_EVENT_CLOSE
            Exit
        Case $bTyped
            GUICtrlSetData($lbCount, "Count: " & StringLen(GUICtrlRead($edString)))
            $bTyped = Not $bTyped
    EndSelect
WEnd

Func _WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)

    Switch $nID
        Case $edString
            If $nNotifyCode = $EN_CHANGE Then $bTyped = True
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc  ;==>MY_WM_COMMAND
Link to comment
Share on other sites

I say the easiest way is to store the previous value into a variable then compare the previous value and the current one. If it's changed then update the label and save the current value to the variable.

Link to comment
Share on other sites

First try this one, then uncomment ControlSetText() and comment GUICtrlSetData() and see if there is any difference.

#include <GUIConstants.au3>

GUICreate("test")
$label = GUICtrlCreateLabel("0", 150, 150, 100, 100)
GUICtrlSetColor($label, 0xFF0000)
GUICtrlSetBkColor($label, 0xFFFFFF)
GUISetState()

Local $count = 0

While 1
    $msg = GUIGetMsg ()
    If $msg = $GUI_EVENT_CLOSE Then
        ExitLoop
    EndIf
    $Count += 1
    GUICtrlSetData($label, $count)
;~  ControlSetText("test", "", "Static1", $count)
WEnd
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...