GUICtrlSetPos-Problem

  • Dieses Script soll die Häufigkeit von Buchstaben in einem Text zählen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>

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

    Dim $Buchstaben[30]=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","ä","ö","ü","ß"]
    Dim $Letters[UBound($Buchstaben)]

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

    $Form1 = GUICreate("Buchstabenhäufigkeit", 450, 450)
    $Label1 = GUICtrlCreateLabel("Gib einen Text ein, um die Häufigkeit der Buchstaben zu zählen:", 8, 8, 307, 17)
    Dim $Label[UBound($Buchstaben)]
    Dim $LabelBg[UBound($Buchstaben)]
    For $i=0 To UBound($Buchstaben)-1
    $LabelBg[$i]=GUICtrlCreateLabel("",335,8+$i*14,1,13)
    GUICtrlSetBkColor(-1,0x9999ff)
    $Label[$i]=GUICtrlCreateLabel("", 336, 8+$i*14,100,14)
    GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)
    Next
    $Edit1 = GUICtrlCreateEdit("", 8, 32, 305, 345,BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL,$ES_MULTILINE))
    GUISetState(@SW_SHOW)

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

    $OldText=""

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

    While 1
    $NewText=GUICtrlRead($Edit1)
    If $NewText<>$OldText Then
    $OldText=$NewText
    For $i=0 To UBound($Buchstaben)-1
    $Letters[$i]=0
    Next
    Do
    $Letter=StringLeft($NewText,1)
    For $i=0 To UBound($Buchstaben)-1
    If $Buchstaben[$i]=$Letter Then
    $Letters[$i]+=1
    EndIf
    Next
    $NewText=StringTrimLeft($NewText,1)
    Until StringLen($NewText)=0
    $LettersSum=0
    For $i=0 To UBound($Buchstaben)-1
    $LettersSum+=$Letters[$i]
    Next
    For $i=0 To UBound($Buchstaben)-1
    GUICtrlSetData($Label[$i],StringUpper($Buchstaben[$i])&": "&$Letters[$i])
    GUICtrlSetPos($LabelBg[$i],335,8+$i*14,$Letters[$i]*(100/$LettersSum),13) ;<<<<<<<<<<<<<< Problem-Zeile
    Next
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]


    Mit $LabelBg will ich ein Balkendiagramm der Häufigkeit anzeigen lassen. Allerdings verhalten sich die Breiten der Balken nicht korrekt. Warum?

  • Hi,
    bei mir XP32 und V3.3.8.0 sowie der aktuellen Beta funktioniert alles wie es soll...
    Ggf solltest du die am häufigsten verwendeten Buchstaben als 100% ansetzen, dann werden die Balken breiter skaliert.
    Weiterhin kann man sowohl die Buchstaben in das Array (ein Array ist garnicht nötig) , als auch das Zählen noch wesentlich vereinfachen, stichwort stringreplace() und @extended auswerten.