Beiträge von sumsum

    _GDIPlus_ImageLoadFromFile()


    Hast du da vielleicht das

    _GDIPlus_ImageDispose

    vergessen?


    Überhaupt sollten auch

    _GDIPlus_BrushCreateSolid()


    und

    _GDIPlus_PenCreate()

    nicht in schleifen aufgerufen werden, erstell sie doch bitte einmal am Anfang und gebe sie wieder frei wenn dein Script beendet wird.


    Hab ich schonmal probiert, das problem ist das ich keine Möglichkeit sehe wie ich mit AutoIt dann die exe Datei starten soll ohne das es sich wieder selbst aufruft.

    Hallo Leute^^,
    nachdem ich jetzt schon stunden lang nach dem dämlichen Fehler gesucht habe wende ich mich mal an euch.
    Im Anhang findet ihr ein Zip Archiv in dem sich ein Beispiel befindet das mein Problem zeigt.
    Nachdem man das Script gestartet hat befinden sich im Script Ordner zwei Bitmaps, eine 16x16 und eine 20x20.
    Allerdings enthalten sie beide nicht das selbe, bei der 20x20 Bitmap wird aus mir nicht erklärbaren Gründen noch eine Reihe und eine Spalte mehr des Tilesets gezeichnet (Sieht man in der untersten Pixel Reihe). Beim 16x16 funktioniert alles wie es sollte.


    Hoffe das jemand die Lösung findet^^,


    sumsum

    Ok hab ne Lösung gefunden die das ganze deutlich schneller macht (Braucht auf meinem PC dann noch etwa 8 Sekunden.
    Ignorier einfach meine andere^^


    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Timers.au3>


    Global $n = 50
    Global $components = $n * $n
    Global $id[$components]
    Global $cells[$n][$n]
    Global $Graphics[$n][$n]
    Global $tsample = 10000000
    Global $thr = 0.592746
    Global $time = 0
    Global $akt_thr = 0


    $fac = 5
    $Form = GUICreate("Simulation {" & $n * $n & "}", $n * $fac, $n * $fac + 50, 100, 100)
    $Label_Comp = GUICtrlCreateLabel("Components: " & $components, 10, $n * $fac + 10, 200, 17)
    $Label_CT = GUICtrlCreateLabel("Cur. Threshold: 0", 10, $n * $fac + 30, 200, 17)
    $Label_T = GUICtrlCreateLabel("Time converge: ", 120, $n * $fac + 10, 200, 17)
    GUICtrlSetColor(-1, 0x000080)
    GUISetState(@SW_SHOW)


    _GDIPlus_Startup()


    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($n * $fac, $n * $fac + 50, $hGraphic)
    Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)


    $hBrushBlue = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $hBrushB = _GDIPlus_BrushCreateSolid(0xFF000000)
    For $i = 0 To $n - 1
    For $j = 0 To $n - 1
    _GDIPlus_GraphicsFillRect($hBuffer, $i * $fac, $j * $fac, $fac, $fac, $hBrushBlue)
    Next
    Next


    For $i = 0 To $components - 1
    $id[$i] = $i
    Next


    For $k = 0 To $n - 2
    unite(cell($k, 0), cell($k + 1, 0))
    unite(cell($k, $n - 1), cell($k + 1, $n - 1))
    Next
    For $k = 0 To $n - 1
    $cells[$k][0] = True
    $cells[$k][$n - 1] = True
    Next
    _show()
    $t = _simulate()
    ConsoleWrite("treshold: " & (1 * $t / ($n * $n)) & " - t: " & $t & " - time: " & $time & " - akt_thr: " & $akt_thr & @CRLF)


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndSwitch
    WEnd


    Func _simulate()
    $t = 0
    While True
    Local $stt = _Timer_Init()
    If _root(cell(0, 0), cell($n - 1, $n - 1)) Then Return $t
    _step()
    ;_show()
    _GDIPlus_GraphicsDrawImage($hGraphic,$hBitmap,0,0)


    $t += 1
    Local $tsample = _Timer_Diff($stt)
    $time += $tsample
    $akt_thr = ($thr - ($t / ($n * $n))) * $tsample
    GUICtrlSetData($Label_T, "Time converge: " & Round($akt_thr, 2))
    GUICtrlSetData($Label_CT, "Cur. Threshold: " & ($t / ($n * $n)))
    WEnd
    EndFunc ;==>_simulate



    Func _show()
    For $r = 0 To $n - 1
    For $p = 0 To $n - 1
    If $cells[$r][$p] Then
    _GDIPlus_GraphicsFillRect($hBuffer, $r * $fac, $p * $fac, $fac, $fac, $hBrushB)
    EndIf
    Next
    Next
    EndFunc ;==>_show



    Func _step()
    Local $m, $h
    While $cells[$m][$h]
    $m = Random(0, $n - 1, 1)
    $h = Random(0, $n - 1, 1)
    WEnd
    $cells[$m][$h] = True
    _GDIPlus_GraphicsFillRect($hBuffer, $m * $fac, $h * $fac, $fac, $fac, $hBrushB)
    If $m < $n - 1 And $cells[$m + 1][$h] Then unite(cell($m, $h), cell($m + 1, $h))
    If $m > 0 And $cells[$m - 1][$h] Then unite(cell($m, $h), cell($m - 1, $h))
    If $h < $n - 1 And $cells[$m][$h + 1] Then unite(cell($m, $h), cell($m, $h + 1))
    If $h > 0 And $cells[$m][$h - 1] Then unite(cell($m, $h), cell($m, $h - 1))
    EndFunc ;==>_step


    Func cell($i, $j)
    Return $i + $j * $n
    EndFunc ;==>cell


    Func _find($x)
    While $x <> $id[$x]
    $id[$x] = $id[$id[$x]]
    $x = $id[$x]
    WEnd
    Return $x
    EndFunc ;==>_find


    Func _root($p, $q)
    Return _find($p) == _find($q)
    EndFunc ;==>_root


    Func unite($p, $q)
    $i = _find($p)
    $j = _find($q)
    If $i == $j Then Return
    $id[$i] = $j
    $components -= 1
    GUICtrlSetData($Label_Comp, "Components: " & $components)
    EndFunc ;==>unite


    Die einzelnen Quadrate werden nur einmal auf den Buffer gezeichnet was das ganze deutlich beschleunigt

    Ja du verwendest es falsch^^. Einerseits musst du nicht jedes mal wenn du etwas zeichnest

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form)

    aufrufen, das ganze einmal am Script Anfang sollte reichen. Außerdem solltest du einen "Buffer" verwenden. Ich habe mal einen in dein Script eingebaut, vielleicht hilft es dir ja^^.

    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Timers.au3>


    Global $n = 50
    Global $components = $n * $n
    Global $id[$components]
    Global $cells[$n][$n]
    Global $Graphics[$n][$n]
    Global $tsample = 10000000
    Global $thr = 0.592746
    Global $time = 0
    Global $akt_thr = 0


    $fac = 5
    $Form = GUICreate("Simulation {" & $n * $n & "}", $n * $fac, $n * $fac + 50, 100, 100)
    $Label_Comp = GUICtrlCreateLabel("Components: " & $components, 10, $n * $fac + 10, 200, 17)
    $Label_CT = GUICtrlCreateLabel("Cur. Threshold: 0", 10, $n * $fac + 30, 200, 17)
    $Label_T = GUICtrlCreateLabel("Time converge: ", 120, $n * $fac + 10, 200, 17)
    GUICtrlSetColor(-1, 0x000080)
    GUISetState(@SW_SHOW)


    _GDIPlus_Startup()


    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($n * $fac, $n * $fac + 50, $hGraphic)
    Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)


    $hBrushBlue = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $hBrushB = _GDIPlus_BrushCreateSolid(0xFF000000)
    For $i = 0 To $n - 1
    For $j = 0 To $n - 1
    _GDIPlus_GraphicsFillRect($hBuffer, $i * $fac, $j * $fac, $fac, $fac, $hBrushBlue)
    Next
    Next


    For $i = 0 To $components - 1
    $id[$i] = $i
    Next


    For $k = 0 To $n - 2
    unite(cell($k, 0), cell($k + 1, 0))
    unite(cell($k, $n - 1), cell($k + 1, $n - 1))
    Next
    For $k = 0 To $n - 1
    $cells[$k][0] = True
    $cells[$k][$n - 1] = True
    Next


    $t = _simulate()
    ConsoleWrite("treshold: " & (1 * $t / ($n * $n)) & " - t: " & $t & " - time: " & $time & " - akt_thr: " & $akt_thr & @CRLF)


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndSwitch
    WEnd


    Func _simulate()
    $t = 0
    While True
    Local $stt = _Timer_Init()
    If _root(cell(0, 0), cell($n - 1, $n - 1)) Then Return $t
    _step()
    _show()
    _GDIPlus_GraphicsDrawImage($hGraphic,$hBitmap,0,0)


    $t += 1
    Local $tsample = _Timer_Diff($stt)
    $time += $tsample
    $akt_thr = ($thr - ($t / ($n * $n))) * $tsample
    GUICtrlSetData($Label_T, "Time converge: " & Round($akt_thr, 2))
    GUICtrlSetData($Label_CT, "Cur. Threshold: " & ($t / ($n * $n)))
    WEnd
    EndFunc ;==>_simulate


    Func _show()
    For $r = 0 To $n - 1
    For $p = 0 To $n - 1
    If $cells[$r][$p] Then
    _GDIPlus_GraphicsFillRect($hBuffer, $r * $fac, $p * $fac, $fac, $fac, $hBrushB)
    EndIf
    Next
    Next
    EndFunc ;==>_show


    Func _step()
    Local $m, $h
    While $cells[$m][$h]
    $m = Random(0, $n - 1, 1)
    $h = Random(0, $n - 1, 1)
    WEnd
    $cells[$m][$h] = True
    If $m < $n - 1 And $cells[$m + 1][$h] Then unite(cell($m, $h), cell($m + 1, $h))
    If $m > 0 And $cells[$m - 1][$h] Then unite(cell($m, $h), cell($m - 1, $h))
    If $h < $n - 1 And $cells[$m][$h + 1] Then unite(cell($m, $h), cell($m, $h + 1))
    If $h > 0 And $cells[$m][$h - 1] Then unite(cell($m, $h), cell($m, $h - 1))
    EndFunc ;==>_step


    Func cell($i, $j)
    Return $i + $j * $n
    EndFunc ;==>cell


    Func _find($x)
    While $x <> $id[$x]
    $id[$x] = $id[$id[$x]]
    $x = $id[$x]
    WEnd
    Return $x
    EndFunc ;==>_find


    Func _root($p, $q)
    Return _find($p) == _find($q)
    EndFunc ;==>_root


    Func unite($p, $q)
    $i = _find($p)
    $j = _find($q)
    If $i == $j Then Return
    $id[$i] = $j
    $components -= 1
    GUICtrlSetData($Label_Comp, "Components: " & $components)
    EndFunc ;==>unite


    Und wegen der Geschwindigkeit, ist das Problem nicht einfach nur das vorallem gegen Ende bei den Randoms einfach viele schon schwarze quadrate getroffen werden?

    Hallo Leute^^,
    falls hier jemand unterwegs ist der Power Basic kann,
    könnte eher mir erklären was mit den Variablen in dieser zeile passiert?


    #AD_APPLY_ALL = #AD_APPLY_SAVE | #AD_APPLY_HTMLGEN | #AD_APPLY_REFRESH



    Mir gehts darum wie sich #AD_APPLY_ALL am schluss zusammensetzt.



    Danke schonmal im vorraus^^



    EDIT: War BitOr

    Danke das klappt wunderbar^^


    Jetz bleiben noch die Comboboxen auf den Bildern, muss ich die da irgendwie manuell drauf machen oder geht das auch so?

    Das Problem ist das das nicht im
    $LVS_ICON Style funktioniert, dort werden dann gar keine Icons / Bilder mehr angezeigt.

    Schau dir mal die Hilfe zu _GUICtrlListView_SetImageList an.

    Wie gesagt, habe ich mir schon angeguckt aber keine Möglichkeit gefunden die icons größer zu bekommen. (Wenn ich bei _GuictrlListview_setImageList den Type auf 0 setze (große Icons) kommt überhaupt nichts mehr)

    Hallo zusammen,


    ich versuche grade ein Listview zu erstellen das in etwa so aussieht
     [Blockierte Grafik: http://img593.imageshack.us/img593/1108/screenkv.png]


    Hierbei ist mir wirklich nur der markierte Bereich wichtig, die Checkboxen dabei wären toll sind aber nicht notwendig, ich habe mir schon einige Beispiele für Listview mit icons angesehen aber keine Möglichkeit gefunden diese zu vergrößern.


    Hoffe Jemand hat da eine Idee


    Danke im Vorraus^^

    VIelleicht solltest du das nicht mit den FTP funktionen machen damit da niemand einfach auf den FTP geht und alles löscht.


    Außerdem musst du die Autoit3.exe nicht mitliefern da jedes compiliertes Script auch so autoit code ausführen kann.


    Ich fühl mich veräppelt - das ist doch die stinknormale Windows-cmd.exe. Viel komplizierter hätte man die auch nicht beschreiben können. :D


    Und das Skript soll erkennen, wenn die Umgebung in der es läuft (besser: lief) nicht mehr existiert? Halte ich für sehr unwahrscheinlich. Ist ja ähnlich als ob du dein Betriebssystem runtergefahren hast. Diese Info nützt ja auch keinem Programm mehr.

    Bei nem normalen GUI wird das "schliessen" per X ja auch gemeldet. Deshalb dacht ich das man das auch bei anderen Fenstern machen könnte. Es würde auc hschon reichen irgendwie die OnAutoitExitregister funktion zum laufen zu kriegen.

    Ich meine die Konsole die man mit den Konsole****** Befehlen verwendet (Wenn das Script kompiliert ist), beim schliessen dieser Konsole wird die per OnAutoitExitregister gesetzte Funktion nämlich nicht aufgerufen. Stattdessen wird einfach der Autoit Prozess gekillt.