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


$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

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

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
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>

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

Local $count = 0

While 1
    $msg = GUIGetMsg ()
    If $msg = $GUI_EVENT_CLOSE Then
    $Count += 1
    GUICtrlSetData($label, $count)
;~  ControlSetText("test", "", "Static1", $count)
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

  • Recently Browsing   0 members

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