Grafik mit Autoit

    • Offizieller Beitrag

    Hi,
    ich versuch mich gerade mal den Grafikmöglichkeiten in Autoit.
    Als erstes wollte ich mich mal an die Grundlagen für eine Analoguhr heranwagen. Laut Hilfe soll man nicht die Parameter von Grafiken verändern, sondern für jeden Zustand eine eigene Grafik anlegen.
    Das hab ich getan, funktioniert auch. Aber ich will innerhalb der Schleife die "verbrauchte" Grafik löschen (sonst liegen ja 60 übereinander) - und das funzt nicht ;( .
    Oder gibt es noch eine andere Möglichkeit "bewegliche" Grafiken darzustellen?
    Was ich auch nicht verstehe - wieso ist beim PIE der Startwert für den 0°-Winkel 90 und nicht 0 ?

    [autoit]

    #include <GUIConstants.au3>
    Dim $StartWinkel = 90, $Child[61], $gr[61] ; seltsamerweise ist 0° = 90
    $Form1 = GUICreate("Main", 200, 200, 40, 40)
    GUISetState()
    CreateChild()

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

    Do
    $msg = GUIGetMsg()
    Until $msg=$GUI_EVENT_CLOSE

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

    Func CreateChild()
    For $i = 0 To 60
    If $i > 0 Then GUIDelete($Child[$i] -1) ; völlig wirkungslos ???
    $Child[$i] = GUICreate("Child " & $i)
    $gr[$i] = GUICtrlCreateGraphic(20, 20)
    GUICtrlSetGraphic(-1, $GUI_GR_PIE, 50, 50, 40, $StartWinkel, 360 -($i*6))
    GUISetState()
    Sleep(100)
    Next
    EndFunc

    [/autoit]
  • Hi Bugfix,

    Du erstellst jedesmal eine neue Gui und nicht nur eine neue Grafik. Du Brauchst aber jeweils nur die alte Grafik löschen und eine neue anlegen.

    [autoit]


    #include <GUIConstants.au3>
    Dim $StartWinkel = 90, $Child[61], $gr[61] ; seltsamerweise ist 0° = 90
    Dim $gr[61]
    $Form1 = GUICreate("Main", 200, 200, 40, 40)
    GUISetState()
    CreateChild()

    Do
    $msg = GUIGetMsg()
    Until $msg=$GUI_EVENT_CLOSE

    Func CreateChild()
    For $i = 0 To 60
    $gr[$i] = GUICtrlCreateGraphic(20, 20)
    GUICtrlSetGraphic($gr[$i], $GUI_GR_PIE, 50, 50, 40, $StartWinkel, 360 -($i*6))
    Sleep(100)
    If $i > 0 Then GUICtrlDelete($gr[$i-1])
    Next
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von jonk (23. Dezember 2006 um 11:48)

    • Offizieller Beitrag

    Ich würde die Hilfe einfach übersetzen, wie sie ist und stattdessen einen Abschnitt im Tutorial dazu verfassen, dann ist man völlig frei in der Ausgestaltung. Dieses Tutorial könnten wir direkt in die Hilfe mit einbauen, aber eben als eigenständigen Teil.

    peethebee

    • Offizieller Beitrag

    Tja, nun kommt der nächste Punkt.
    Ich bekomme einfach keine Farbe in meine Zeichnung. Die Grafik als Träger der Zeichnung kann ich einfärben. Aber weiter komme ich nicht.
    Ich finde auch keinen Unterschied zur Syntax in der Hilfe. Kopiere ich allerdings einen Grafikblock aus dem Hilfecode in mein Beispiel rein, läufts dort auch nicht. ;(

    Also, wo ist hier der Fehler?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Dim $StartWinkel = 90, $Child[61], $gr[61], $kreis ; 0° = 90
    Dim $navajowhite = 0xFFDEAD, $royalblue = 0x4169E1, $black = 0x000000, $white = 0xFFFFFF, $silver = 0xC0C0C0
    $Form1 = GUICreate("Main", 200, 200, -1, -1)
    GUISetState()
    CreateChild()

    Do
    $msg = GUIGetMsg()
    Until $msg=$GUI_EVENT_CLOSE

    Func CreateChild()
    $kreis = GUICtrlCreateGraphic(0, 0, 200, 200)
    GUICtrlSetBkColor(-1,$navajowhite) ; funktioniert
    GUICtrlSetColor(-1,$silver) ; funktioniert
    GUICtrlSetGraphic(-1,$GUI_GR_ELLIPSE, 40, 40, 120, 120) ; Kreis: x, y = Schnittpunkt Tangenten 0° mit 270°
    GUICtrlSetGraphic(-1,$GUI_GR_COLOR, $black, $silver) ; keine Wirkung

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

    For $i = 0 To 60
    $gr[$i] = GUICtrlCreateGraphic(0, 0, 200, 200)
    GUICtrlSetGraphic($gr[$i], $GUI_GR_PIE, 100, 100, 60, $StartWinkel, 360 -($i*6)) ; Teilkreis: x, y = Mittelpunkt
    GUICtrlSetGraphic($gr[$i], $GUI_GR_COLOR, $royalblue, $navajowhite) ; keine Wirkung
    Sleep(100)
    If $i > 0 Then GUICtrlDelete($gr[$i-1])
    Next
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hi,

    du solltest auf die Reihenfolge achten!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Dim $StartWinkel = 90, $Child[61], $gr[61], $kreis ; 0° = 90
    Dim $navajowhite = 0xFFDEAD, $royalblue = 0x4169E1, $black = 0x000000, $white = 0xFFFFFF, $silver = 0xC0C0C0
    $Form1 = GUICreate("Main", 200, 200, -1, -1)
    GUISetState()
    CreateChild()

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

    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

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

    Func CreateChild()
    $kreis = GUICtrlCreateGraphic(0, 0, 200, 200)
    GUICtrlSetBkColor($kreis, $navajowhite) ; funktioniert
    GUICtrlSetColor($kreis, $silver) ; funktioniert
    GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $black, $silver)
    GUICtrlSetGraphic($kreis, $GUI_GR_COLOR, 0x00ff00, 0xffffff)
    GUICtrlSetGraphic($kreis, $GUI_GR_ELLIPSE, 40, 40, 120, 120) ; Kreis: x, y = Schnittpunkt Tangenten 0° mit 270°
    For $i = 0 To 60
    $gr[$i] = GUICtrlCreateGraphic(0, 0, 200, 200)
    GUICtrlSetGraphic($gr[$i], $GUI_GR_COLOR, $royalblue, $navajowhite) ; keine Wirkung
    GUICtrlSetGraphic($gr[$i], $GUI_GR_PIE, 100, 100, 60, $StartWinkel, 360 - ($i * 6)) ; Teilkreis: x, y = Mittelpunkt
    Sleep(100)
    If $i > 0 Then GUICtrlDelete($gr[$i - 1])
    Next
    EndFunc ;==>CreateChild

    [/autoit]

    So long,

    Mega