Statusleistenverknüpfung

  • He Leute!
    Ich bin relativ neu hier und auch in Sachen autoit der Wahrscheinlich blutigste Anfänger hier.
    Dem zu Folge, hab ich natürlich ne Menge Fragen und ich hoffe ich stör nicht oder zieh nicht das Niveau des Forums runter.

    Meine ist Frage ist Folgene:
    Ich bin mit einem einfach Projekt gestartet, welches ich mit dem KodaFormDesigner geformt hab.
    Es hat drei Knöpfe und eine Statusleiste. Nun ist es so, dass sich die Statusleiste um eine, zwei oder drei Einheiten füllen soll,
    je nachdem welcher Knopf gedrückt wird, versteht ihr?
    Mein angezeigtes Script ist anscheinend dieses:


    Spoiler anzeigen


    #include
    #include
    #include
    #include
    #include

    #Region ### START Koda GUI section ### Form=d:\user\desktop\neue ordner\kodaformdesigner\forms\form1.kxf
    $Form1_1 = GUICreate("Test", 301, 213, 349, 216)
    $Button2 = GUICtrlCreateButton("3", 191, 140, 49, 25, 0)
    $Button3 = GUICtrlCreateButton("2", 119, 140, 49, 25, 0)
    $Button4 = GUICtrlCreateButton("1", 47, 140, 49, 25, 0)
    $Progress1 = GUICtrlCreateProgress(56, 72, 177, 33)
    $StatusBar1 = _GUICtrlStatusBar_Create($Form1_1)
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    EndSwitch
    WEnd


    Es gibt doch bestimmt eine Möglichkeit dem Programm zu sagen,
    'wenn auf einen Knopf gedrückt wird, füllt sich die Leiste'.
    Wär's möglich mir möglichst verständlich zu erklären wie das geht?

    Vielen Dank im Voraus,
    ...Buckiuxx...

    Einmal editiert, zuletzt von Buckiuxx (22. Mai 2010 um 11:18)

  • Ich kenne mich mit Koda nicht so aus....
    Aber das ganze ist auch ohne Koda zu realisiern. :!:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    GUICreate("Test", 301, 213, 349, 216)
    $Button3 = GUICtrlCreateButton("100%", 191, 140, 49, 25, 0); Button(s) erstellen
    $Button2 = GUICtrlCreateButton("50%", 119, 140, 49, 25, 0)
    $Button1 = GUICtrlCreateButton("38%", 47, 140, 49, 25, 0)
    $Progress1 = GUICtrlCreateProgress(56, 72, 177, 33); Progress-Bar erstellen
    GUISetState(@SW_SHOW)

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

    While WinExists("Test"); Abfrage der Buttons
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlSetData($Progress1, 38); Progress-Bar verändern
    Case $Button2
    GUICtrlSetData($Progress1, 50)
    Case $Button3
    GUICtrlSetData($Progress1, 100)
    EndSwitch
    WEnd

    [/autoit]

    Hoffe es gefällt

  • Zitat

    Es gibt doch bestimmt eine Möglichkeit dem Programm zu sagen,
    'wenn auf einen Knopf gedrückt wird, füllt sich die Leiste'.
    Wär's möglich mir möglichst verständlich zu erklären wie das geht?


    Erstens ist Koda nur ein kleines Hilfs-Tool, dass dir die Positionierung von Controls in einer GUI erleichtern soll ;).
    Das ganze must du nachher schon selbst zum funktionieren bringen. :D
    Schau dir doch z.B. mal dieses Tutorial an.

  • Hallo Buckiuxx,
    schau dir das

    Beispiel aus [url='http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-09_05_10.zip'

    Hilfe[/url] zu _GUICtrlStatusBar_EmbedControl ]

    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <ProgressConstants.au3>
    #include <SendMessage.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_SB = False ; Prüft den Klassennamen (ClassName), der an die StatusBar-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.

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

    _Main()

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

    Func _Main()

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

    Local $hGUI, $hProgress, $hInput, $input, $progress, $hStatus
    Local $aParts[4] = [80, 160, 300, -1]

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

    ; Erstellt eine GUI
    $hGUI = GUICreate("StatusBar: Control einbinden", 400, 300)

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

    ;===============================================================================
    ; Standard ist 1 Abschnitt und kein Text
    $hStatus = _GUICtrlStatusBar_Create($hGUI)
    _GUICtrlStatusBar_SetMinHeight($hStatus, 20)

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

    ;===============================================================================
    GUISetState()

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

    ; Initialisiert drei Abschnitte
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetText($hStatus, "Abschnitt 1")
    _GUICtrlStatusBar_SetText($hStatus, "Abschnitt 2", 1)

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

    ; Bindet eine Progressbar in das Control ein
    If @OSType = "WIN32_WINDOWS" Then
    $progress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
    $hProgress = GUICtrlGetHandle($progress)
    _GUICtrlStatusBar_EmbedControl($hStatus, 2, $hProgress)
    Else
    $progress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_MARQUEE) ; Der Stil 'marquee' funktioniert bei Windows XP und neuer
    $hProgress = GUICtrlGetHandle($progress)
    _GUICtrlStatusBar_EmbedControl($hStatus, 2, $hProgress)
    _SendMessage($hProgress, $PBM_SETMARQUEE, True, 200) ; Der Stil 'marquee' funktioniert bei Windows XP und neuer
    EndIf

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

    $input = GUICtrlCreateInput("Dies wurde eingebunden", 0, 0)
    $hInput = GUICtrlGetHandle($input)
    _GUICtrlStatusBar_EmbedControl($hStatus, 3, $hInput, 3)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

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

    Beispiel abgeändert auf normalen Fortschrittsbalken:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <ProgressConstants.au3>
    #include <SendMessage.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Main()

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

    Func _Main()

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

    Local $hGUI, $hProgress, $hInput, $input, $progress, $hStatus, $iProgress
    Local $aParts[4] = [80, 160, 300, -1]

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

    ; Erstellt eine GUI
    $hGUI = GUICreate("StatusBar: Control einbinden", 400, 300)

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

    ;===============================================================================
    ; Standard ist 1 Abschnitt und kein Text
    $hStatus = _GUICtrlStatusBar_Create($hGUI)
    _GUICtrlStatusBar_SetMinHeight($hStatus, 20)

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

    ;===============================================================================
    GUISetState()

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

    ; Initialisiert drei Abschnitte
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    _GUICtrlStatusBar_SetText($hStatus, "Abschnitt 1")
    _GUICtrlStatusBar_SetText($hStatus, "Abschnitt 2", 1)

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

    ; Bindet eine Progressbar in das Control ein
    $progress = GUICtrlCreateProgress(0, 0, -1, -1);normaler Fortschrittsbalken
    $hProgress = GUICtrlGetHandle($progress)
    _GUICtrlStatusBar_EmbedControl($hStatus, 2, $hProgress)

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

    $input = GUICtrlCreateInput("Dies wurde eingebunden", 0, 0)
    $hInput = GUICtrlGetHandle($input)
    _GUICtrlStatusBar_EmbedControl($hStatus, 3, $hInput, 3)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    $iProgress +=1
    if $iProgress = 1000 Then _GUICtrlStatusBar_SetText($hStatus, "bin fertig", 1)
    if $iProgress <= 1000 Then GUICtrlSetData($progress,$iProgress/10)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit]

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (21. Mai 2010 um 15:04)

  • ok...zur meiner Übung nochmal...
    while und wend stellen ne schleife die sich immer wieder wiederholt...
    GUICreate ist halt den/die/das GUI erstellen...
    GUICtrlSetData ($progress, wert) ist das die leiste sich zu diesem wert füllt.

    Stimmt das so?

    bleiben 2 fragen...
    - was bewirkt der "case" Befehl?
    - mit ($progress, wert) springt die leiste zu diesem wert...mit welchem Befehl kann ich die ansteigen lassen?

    Information kamen aus dem Script-post von "Script-Bär"
    Der hat mir sehr weiter geholfen danke!
    Die andere teste ich nu auch mal :D

  • mit switch case endswitch (das gehört zusammen) kannst du verschiedene werte einer variable abfragen.

    $nMsg = GUIGetMsg()
    speichere die erhaltene nachricht in der variable $nMsg.
    d.h. wenn ein button gedrückt wird oder in ein input etwas eingegeben oder oder oder dann speichert er die id des controls in $nMsg

    Switch $nMsg
    übersetzt sowas wie vergleiche $nMsg mit den einzelnen Case's


    Case $Button
    wenn der die verglichene Variable (also $nMsg) gleich $Button ist dann macht er das was in diesem case steht also:
    Guictrlsetdata....


    den wert ansteigen lassen könntest du mit einer for schleife z.b. so:
    for $i = 0 to 100
    guictrlsetdata($progress, $i)
    next

    in einen scriptbeispiel so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    GUICreate("Test", 301, 213, 349, 216)
    $Button1 = GUICtrlCreateButton("Lasse ansteigen", 47, 140, 49, 25, 0)
    $Progress1 = GUICtrlCreateProgress(56, 72, 177, 33); Progress-Bar erstellen
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg ; Abfrage der Buttons
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    for $i = 0 to 100
    guictrlsetdata($Progress1, $i)
    next
    EndSwitch
    WEnd

    [/autoit]
  • Hallo

    Zitat von Buckiuxx

    Die andere teste ich nu auch mal

    schau noch einmal in meinen vorherigen Post, ich habe ein 2. Beispiel angehängt,

    mfg (Auto)Bert

  • wow danke ...eine relativ einfach Erklärung des 'case'-Befehls...
    genau so muss das! :thumbup:
    @ Autobert...ich meinte schon sowas wie in den anderen beispiele,
    dass man die leiste einfach nur füllen kann, und das die mitten aber im Fensters steht...
    trotzdem danke! ;)

    PN...gugg ich nu :thumbup:
    Danke an alle die geholfen haben...
    ich hab's weitest gehend verstanden.
    Das hat mir wirklich sehr weiter geholfen!

    Vielen Dank,
    Buckiuxx

  • Habs nu so wie ich wollte...

    Spoiler anzeigen

    #include
    #include
    #include
    #include
    #include


    $i = 2
    $Form1_1 = GUICreate("Test", 301, 213, 349, 221)
    $Button2 = GUICtrlCreateButton("5%", 47, 140, 49, 25, 0)
    $Button3 = GUICtrlCreateButton("10%", 119, 140, 49, 25, 0)
    $Button4 = GUICtrlCreateButton("20%", 191, 140, 49, 25, 0)
    $Progress1 = GUICtrlCreateProgress(56, 72, 177, 33)
    $StatusBar1 = _GUICtrlStatusBar_Create($Form1_1)
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 17)
    GUISetState(@SW_SHOW)


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button2
    $i = $i + 5
    GUICtrlSetData ($Progress1, $i)
    case $Button3
    $i = $i + 10
    GUICtrlSetData ($Progress1, $i)
    case $Button4
    $i = $i + 20
    GUICtrlSetData ($Progress1, $i)
    EndSwitch
    WEnd

    Vielen Dank an alle, die geholfen haben!
    Jetzt muss ich nur noch wissen, wie ich diesen Thread close. :thumbup:


    Gruß,
    Buckiuxx
    :thumbup: :thumbup: :thumbup:

    • Offizieller Beitrag

    1.Post bearbeiten und auf Prefix auf gelöst setzen

  • Dem zu Folge, hab ich natürlich ne Menge Fragen und ich hoffe ich stör nicht oder zieh nicht das Niveau des Forums runter.

    Ach quatsch.
    Wir sind ein Hilfeforum und du kannst so viel fragen, wie du willst.
    Viele "kleine" Fragen sind bereits gefragt worden und du kannst die mit der Suchfunktion suchen. (Siehe oben rechts)
    Viel Spaß weiterhin mit AutoIt!

  • Ich freu mich immer über Fragen...
    Die finde ich tausend mal besser als immer schreiben zu müssen: "Les doch bitte mal die Forenregeln durch"
    Also:
    Scheu dich nicht davor Fragen zu stellen, egal wie dumm du dir dabei vorkommen magst :D

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"