1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Nach _ExcelBookOpen folgt immer ein Namenskonflikt

    • BugFix
    • 4. Februar 2013 um 13:03
    Zitat von Sivvis

    Hat den wirklich noch nie jemand, dieses oder ein ähnliches Problem gehabt?


    Nein, und mit deinem bruchstückhaften Code sind wir auch nicht in der Lage den Fehler zu reproduzieren.
    Wenn du Hilfe brauchst, ist es sinnvoll Code einzustellen, der den Fehler hervorbringt.

  • _RandomDistance()

    • BugFix
    • 4. Februar 2013 um 09:17

    Ich hatte gerade die Fragestellung, wie ich zufällig den ersten Index von jeweils 3 aufeinanderfolgenden, zusammenhängenden Werten eines Arrays anspreche.
    Das könnte vielleicht auch für jemand anderen interessant sein, z.B. um auf dem Display zufällig den ersten Pixel einer Gruppe bestimmter Breite anzusprechen (Pixelblöcke zeichnen mit 4x4 Größe o.ä.)

    Die Funktion lieferten den ersten Wert zurück für einen Bereich dessen Breite mit $_iDistance festgelegt wird.

    Code
    z.B. $_iDistance = 3
    Random   _RandomDistance
      0              0
      1              0
      2              0
      3              3
      4              3
      5              3
      6              6
    [autoit]

    ; #FUNCTION# =======================================================================================
    ; Name ..........: _RandomDistance
    ; Description ...: Determines a random positive integer at the start position of a given distance
    ; Syntax ........: _RandomDistance($_iFrom, $_iTo, $_iDistance)
    ; Parameters ....: $_iFrom - value from ( >= 0 )
    ; ...............: $_iTo - value to
    ; ...............: $_iDistance - count of elements in range
    ; Return values .: Success First integer in a random range
    ; ...............: Failure -1 set error=1 invalid parameter(s)
    ; Author ........: BugFix
    ; ==================================================================================================
    Func _RandomDistance($_iFrom, $_iTo, $_iDistance)
    If $_iFrom < 0 Or $_iTo <= $_iFrom Or $_iDistance < 1 Then Return SetError(1,0,-1)
    Local $iR = Random($_iFrom, $_iTo, 1)
    Return $iR + ($_iDistance - Mod($iR, $_iDistance)) - $_iDistance
    EndFunc ;==>_RandomDistance

    [/autoit]
  • [MultiGraph UDF] - dynamischer GDI+ LineGraph (als Software-Oszilloskop geeignet)

    • BugFix
    • 4. Februar 2013 um 07:28
    Zitat von SBond

    Gibt es da eine andere Möglichkeit?


    Ja, das ist machbar. Dazu fängst du mit einer eigenen Prozedur die Nachricht ab, verarbeitest diese und reichst sie dann an das System weiter (oder verwirfst sie).
    Knackpunkt ist hier die Verarbeitungsdauer. Wenn es zu lange dauert entstehen unvorhersehbare Systemzustände. Also immer so schnell, wie möglich sein - User-Interaktionen oder Messageboxen sind absolut tabu.
    Hier mal aus meiner Bsp.-Sammlung:

    Spoiler anzeigen
    [autoit]

    #Region - TimeStamp
    ; 2012-05-08 17:52:07
    #EndRegion - TimeStamp

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

    #cs
    WM_ -Message Hook
    - Nachricht wird erst in einer eigenen Funktion ausgewertet
    - dann an das System zurückgegeben (auswertbar mit GUIRegisterMsg)
    - oder verworfen ("Return 0" nach Msg-Auswertung in _WinProc, s. Zeile 78)
    #ce

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

    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    Local Const $GWL_WNDPROC = -4

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

    $hGui = GUICreate("Test", 400, 400)
    $hListView = _GUICtrlListView_Create($hGui, "Listview", 10, 10, 380, 380)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))

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

    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)

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

    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
    GUISetState()

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

    ;
    $hProc = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam') ; == hier registriere ich die Funktion "_WinProc" als Callback, Returntype ist "ptr", Parametertypen
    $hHook = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProc)) ; == hier wird dem Fenster die Adresse der Callback-Prozedur übergeben, diese ersetzt jetzt die Standard-Window-Prozedur

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

    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

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

    While GUIGetMsg() <> -3
    Sleep(10)
    WEnd

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

    _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hHook) ; == nach Programmende: originale WinProc wiederherstellen
    DllCallbackFree($hProc)

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

    Func _WinProc($hWnd, $iMsg, $iwParam, $ilParam) ; == die Prozedur soll ausschließlich WM_NOTIFY auswerten
    ; wenn nicht die gewünschte Msg kommt - Rückgabe an System ; == andere Messages werden gleich durchgereicht ans System zur Auswertung
    If $iMsg <> $WM_NOTIFY Then Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)

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

    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_COLUMNCLICK ; A column was clicked ; == Ich möchte nicht, dass diese Msg verwertet werden kann und verwerfe sie
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ConsoleWrite('MyProc: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    Return 0 ; <== Nachricht wird jetzt verworfen und kann über GUIRegisterMsg nicht verwertet werden

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

    Case $NM_CLICK ; == Diese Msg lasse ich durch ans System
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    ConsoleWrite("MyProc: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    " -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
    EndSwitch
    EndSwitch
    ; jetzt wird die normale WinProc aufgerufen, die man mit GuiRegisterMsg auswerten kann
    Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
    EndFunc ;==>_WinProc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_COLUMNCLICK ; A column was clicked <== Diese Nachricht erreicht die Funktion nicht mehr
    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ConsoleWrite('GUIRegisterMsg: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    ConsoleWrite("GUIRegisterMsg: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    " -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
    EndSwitch
    EndSwitch
    Return 0
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • [MultiGraph UDF] - dynamischer GDI+ LineGraph (als Software-Oszilloskop geeignet)

    • BugFix
    • 3. Februar 2013 um 22:09

    Erst mal Willkommen "Machdeborjer" :D ,wohne ca. 50 km von dir entfernt.

    Ich bin eher der "Non"-Grafik Typ, hatte mich aber mal an was Ähnlichem versucht. Daher kann ich aus Erfahrung sagen: :thumbup:
    Dein Werk gefällt mir und ich hoffe, dass wir noch weitere schöne Skripte von dir sehen werden.

  • Zeichen in Datei per regulärem Ausdruck tauschen

    • BugFix
    • 1. Februar 2013 um 10:36

    Wenn du mit RegExp arbeiten möchtest, solltest du auch RegExp-Befehle verwenden. :whistling:

    Also statt:

    [autoit]


    StringReplace

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

    ; verwende:
    StringRegExpReplace

    [/autoit]
  • RegularExpression

    • BugFix
    • 30. Januar 2013 um 19:47
    Zitat von qwert23

    Leider liefert die Funktion im Falle von z.Bsp. dxe_a1 und dxa_a11 und dxe_111 nur den Wert zurück, der am längsten ist. Das ist nicht gewollt. Es sollen die Werte


    Kann ich nicht bestätigen, dein Bsp. lieferte alle 3 Ergebnisse genau, wie gewollt.

  • Problem mit Array Variable

    • BugFix
    • 28. Januar 2013 um 22:07

    Unabhängig von deinem Problem: Warum machst du das so kompliziert?
    Das kannst du ohne Java-Gedöns und sauber per CMD-Line-Befehlen des PDFCreators erledigen. Und das Beste: Diese Befehle wurden schon in eine AutoIt-UDF portiert. Bemühe mal die SuFu.

  • Variablendeklaration

    • BugFix
    • 25. Januar 2013 um 10:37
    Zitat von x0r

    ich fürchte, ich werde bis an mein Lebensende Variablen deklarieren ;(


    Was ist daran schlimm? - Somit wirst du zum sauberen Umgang mit Variablen gezwungen. Du mußt dir also Gedanken machen welche Variablen du wo einsetzen willst, anstatt einfach eine Variable mitten im Skript aus der Luft zu greifen. Bei kurzen Skripten ist das sicher unproblematisch, aber bei längeren Sachen sollte man zwingend alles vorab deklarieren um die Übersicht zu behalten.
    Wenn du nicht extra deklarierst, werden alle Variablen als Global betrachtet - dafür kannst du ein Skript von mir nutzen, das das erledigt: Variablendeklaration automatisiert. Habe das zwar ewig nicht angewendet, sollte aber noch seinen Dienst tun. Da es von 2008 ist, kann es aber gut sein, dass einige (neuere) Konstanten als Variablen interpretiert werden. Müßte das Skript mal angepaßt werden.

  • EmptyDllCreator

    • BugFix
    • 23. Januar 2013 um 20:34

    RR04

    Zitat

    EmptyDllCreator, gab es den nicht schon einmal vor einiger Zeit ? :!:


    Du solltest schon lesen, in welchem Thread du postest! - Das hier ist der Thread zum "EmptyDllCreator" - s. Post #1 :rofl:

  • EmptyDllCreator

    • BugFix
    • 23. Januar 2013 um 16:00
    Zitat von Blume

    Benutzt du ein x64 Betriebssystem? weil AFAIK hatte Ich die Dll damals für 32 Bit kompiliert.


    Ja, hatte aber extra "#AutoIt3Wrapper_UseX64=N" verwendet.

  • EmptyDllCreator

    • BugFix
    • 23. Januar 2013 um 15:09

    Ich habe heute mal eine Dll damit erstellt und versucht zu nutzen. Jedoch kann ich nichts aus der Dll wieder laden.
    Habe dann eine existierende Dll ausgeschlachtet und die identischen Inhalte eingebaut - daraus kann ich auch wieder laden.
    Bei deiner Dll kann die "SizeofResource" nicht ermittelt werden. Ich habe beide Dll mal angehängt.

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <WinAPI.au3>
    #include <Memory.au3>
    #include <GDIPlus.au3>

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

    $res1 = @ScriptDir & '\ressource.dll' ; Leer-Dll erstellt mit "EmptyDllCreator"
    $res2 = @ScriptDir & '\my_res.dll' ; vorhandene Dll ausgeschlachtet

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

    $hBmp = _GetImageFromResource('POWER_ON', $res1)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hBmp = ' & $hBmp & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $hBmp = _GetImageFromResource('POWER_ON', $res2)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $hBmp = ' & $hBmp & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    #cs
    @@ Debug ($res1): $hBmp = 0
    >Error code: 5 << "SizeofResource" Ermittlung schlägt fehl!!
    @@ Debug ($res2): $hBmp = 0x28051D4D
    >Error code: 0
    #ce

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

    ;#Function# ============================================================================================================================================
    ; Name............: _GetImageFromResource
    ; Description.....: Laden eines Bildes (BMP,GIF,JPG) aus einer Resourcedatei
    ; Syntax..........: _GetImagefromResource($Resname, $Resfile = -1, $ResType = 10)
    ; Parameters......:
    ; $Resname - Name der Resource
    ; $Resfile - Resourcedateiname , wenn leer wird die Autoit Exe Datei verwendet
    ; $ResType - Resourcetype 2= Bitmap, alle anderen = 10. GIF und JPG Dateien müssen als RCDATA gespeichet sein.
    ; Return values .:
    ; Success - Handle des des Bitmaps
    ; Failure - Comming soon
    ; Author ........:
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ; ======================================================================================================================================================
    Func _GetImagefromResource($Resname, $Resfile = -1, $ResType = 10)
    Local Const $IMAGE_BITMAP = 0
    Local $hmod, $hwnd, $InfoBlock, $ResSize, $Mem, $pMem, $dll, $dll2, $hData, $pData, $pStream, $ret, $hBitmap, $pBitmap
    If $Resfile = -1 Then; Resfile = Executable Autoit Exe
    $hmod = _WinAPI_GetModuleHandle("")
    If @error Then Return SetError(1, 0, 0)
    Else
    ;~ $hmod = _WinAPI_LoadLibrary($Resfile)
    $hmod = _WinAPI_LoadLibraryEx($Resfile, 0x00000020) ; $LOAD_LIBRARY_AS_DATAFILE ; ############
    If @error Then Return SetError(2, 0, 0)
    EndIf
    If $ResType =2 Then
    $hBitmap = _WinAPI_LoadImage($hmod, $Resname, $IMAGE_BITMAP, 0, 0, 0)
    If @error Then Return SetError(3, 0, 0)
    If $Resfile <> -1 Then DllCall("Kernel32.dll", "int", "FreeLibrary", "str", $hmod)
    Return $hBitmap
    Else
    $InfoBlock = DllCall("kernel32.dll", "int", "FindResourceW", "int", $hmod, "wstr", $Resname & Chr(0), "long", $ResType) ; ############
    ;~ ConsoleWrite('FindResourceW: ' & $InfoBlock[0] & @LF)
    If @error Then Return SetError(4, 0, 0)
    $InfoBlock = $InfoBlock[0]
    If $InfoBlock = 0 Then Return SetError(5, 0, 0)
    $ResSize = DllCall("kernel32.dll", "dword", "SizeofResource", "int", $hmod, "int", $InfoBlock)
    If @error Then Return SetError(6, 0, 0)
    $ResSize = $ResSize[0]
    If $ResSize = 0 Then Return SetError(7, 0, 0)
    $Mem = DllCall("kernel32.dll", "int", "LoadResource", "int", $hmod, "int", $InfoBlock)
    If @error Then Return SetError(8, 0, 0)
    $Mem = $Mem[0]
    If $Mem = 0 Then Return SetError(9, 0, 0)
    $pMem = DllCall("kernel32.dll", "int", "LockResource", "int", $Mem)
    If @error Then Return SetError(8, 0, 0)
    $pMem = $pMem[0]
    If $pMem = 0 Then Return SetError(10, 0, 0)
    If $Resfile <> -1 Then DllCall("Kernel32.dll", "int", "FreeLibrary", "str", $hmod)
    $hData = _MemGlobalAlloc($ResSize, 2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($pMem, $pData, $ResSize)
    _MemGlobalUnlock($hData)
    $ret = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData, "long", 1, "Int*", 0)
    $pStream = $ret[3]
    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
    $pBitmap = $pBitmap[2]
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap)
    _GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    $dll = DllStructCreate("Uint", $pStream)
    $dll2 = DllStructCreate("uInt", DllStructGetData($dll, 1) + 8)
    DllCall("", "UInt", DllStructGetData($dll2, 1), "UInt", $pStream)
    _WinAPI_DeleteObject($pStream)
    $pStream = 0
    _MemGlobalFree($hData)
    If $Resname <> -1 Then _WinAPI_FreeLibrary($hmod)
    Return $hBitmap
    EndIf
    EndFunc ;==>_GetImagefromResource

    [/autoit]

    Dateien

    ressource.zip 164,61 kB – 536 Downloads
  • Problemlösung bei 2.GUIs und Maus

    • BugFix
    • 23. Januar 2013 um 14:01
    Zitat von General Kaboom

    Hoppla...mein Fehler ^^ Moment

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("NLT", 105, 116, 192, 133, $GUI_SS_DEFAULT_GUI, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
    $Label1 = GUICtrlCreateLabel("Nova Lüftungstool", 9, 8, 91, 17)
    $Label2 = GUICtrlCreateLabel("Status: On/Off", 18, 32, 73, 17)
    $Button1 = GUICtrlCreateButton("Tastenbelegung", 5, 72, 83, 17)
    $Button2 = GUICtrlCreateButton("Hilfe", 5, 96, 83, 17)
    $Label3 = GUICtrlCreateLabel("v.0.4", 40, 48, 28, 17)
    GUISetState(@SW_SHOW)

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

    $Form2 = GUICreate("Nova Lüftungstool Tastenbelegung", 540, 230, 666, 394)
    $Label1 = GUICtrlCreateLabel("Nova Lüftungstool", 152, 32, 133, 24)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("Tastenbelegung", 160, 64, 103, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label3 = GUICtrlCreateLabel("Eckig: Kanal=a; Bogen=s; Übergang=ü; Übergang eckig>rund=p; T-Stück=t; Hosenstück=h", 56, 104, 449, 17)
    $Label4 = GUICtrlCreateLabel("Rund: Rohr=w; Bogen=r; T-Stück=e; Übergang=u", 56, 144, 456, 17)
    $Label5 = GUICtrlCreateLabel("Konstruktionshilfe: Linie=l; K-Linie=k; Verbinder=v; Messen=m; Draggen=d; Drehen=y; Spiegeln=g", 56, 184, 463, 17)
    $Label6 = GUICtrlCreateLabel("Textmodus=q; Beenden=Einfg", 144, 200, 371, 17)
    GUISetState(@SW_HIDE)

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

    While 1
    $nMsg = GUIGetMsg($Form1)
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUISetState(@SW_HIDE, $Form1)
    GUISetState(@SW_Show, $Form2)
    While 1
    $nMsg = GUIGetMsg($Form2)
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE, $Form2)
    GUISetState(@SW_Show, $Form1)
    ExitLoop
    EndSwitch
    WEnd
    EndSwitch
    WEnd

    [/autoit]
    Alles anzeigen


    Das sollte man so auf gar keinen Fall verwenden. Gerade für solche Fälle gibt es ein Flag in der Funktion GuiGetMsg(), wie im Bsp. von Make-Grafik gezeigt.

  • ListviewItem nach best. Spalte sortieren

    • BugFix
    • 23. Januar 2013 um 10:27
    Zitat von crdy

    ich hab gerade nicht einmal eine Idee wie ich die Sortierreihenfolge umdrehen kann


    Ganz simpel bei Benutzung von " _GUICtrlListView_SimpleSort " :
    • erster Aufruf sortiert aufwärts
    • zweiter Aufruf sortiert dann abwärts
    usw.
    oder du übergibst als Flag True/False - s. Hilfe

  • Array oder String+Stringsplit schneller?

    • BugFix
    • 23. Januar 2013 um 10:05
    Zitat von FKFK

    Da die Arraygröße erst am Schluss bekannt ist, ist stringsplit wohl die beste Lösung.


    Nicht unbedingt. Du kannst doch sicher abschätzen, ob es 100.000 oder 1.000.000 Einträge werden. Erstelle ein Array am Beginn, das auf jeden Fall größer ist als die zu erwartende Anzahl an Einträgen. Den Zähler für die Anzahl Elemente erhöhst du bei jedem neuen Element und verwendest ihn dann als Index für den Eintrag im Array (Achtung: Index beginnt bei 0). Nach dem letzten Element-Eintrag schneidest du mit ReDim die überzähligen Arrayelemente ab. Du kannst auch den Zähler an Position [0] im Array führen, wenn die Anzahl der Elemente im weiteren von Bedeutung ist (erspart dir ein UBound ;)).

    Spoiler anzeigen
    [autoit]

    Global $array[100000] = [0] ; Zähler an [0] führen

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

    For $i = 0 To $iPasses
    $array[$array[0]] = $i ; Eintrag an aktueller Zählerposition
    $array[0] += 1 ; Zähler um eins erhöhen
    Next

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

    ReDim $array[$array[0]]

    [/autoit]
  • Farben ändern

    • BugFix
    • 20. Januar 2013 um 22:21
    Zitat von Christoph54

    und ich hab außerdem keine Lust auf zu viele Typen mit ner Jägerlizens, die im Wald rumballern


    [OT]
    Aber da muß ich den Jäger mal in Schutz nehmen.
    Die Wildbestände haben in unseren Wäldern stark zugenommen. In vielen Gebieten übersteigt es deutlich die Sättigungswerte (max. Anzahl Tiere je Fläche). Es mag Ausnahmen geben - aber in der Regel sind Jäger verantwortungsbewußte Gesellen, denen die Hege und Pflege des Wildes am Herzen liegt. Und dazu gehört nunmal auch die Regelung der Bestandsgröße. Und kommt mir bitte nicht mit dieser Scheinmoral "oooch, die armen Rehlein.." dreht euch dann um, geht in die Küche und bratet euch ein Steak. :whistling:
    [/OT]

  • Listview Inhalt in eine SQLite Datenbank schreiben

    • BugFix
    • 20. Januar 2013 um 01:02

    Warum machst du dir doppelte Arbeit?
    Du liest die Daten aus dem Listview und schreibst sie in ein Array. Dann liest du die Daten aus dem Array und schreibst sie in die Datenbank. - Welchen Sinn hat dann bitte das Array, es wird nicht benötigt, du kannst, wie in meinem Entwurf gezeigt, sofort den SQL-String erstellen.
    Und wie in meiner Funktion ersichtlich: Führe nicht nach jedem Schritt eine SQL-Anweisung aus, bei 3 Datensätzen geht das - aber wenn du ein paar hundert hast, verlierst du viel Zeit. Setze, wie gezeigt, einen SQL-String mit allen Anweisungen zusammen und führe ihn in einem einzigen Aufruf aus: SQL-String: "BEGIN TRANSACTION;Befehl;Befehl;Befehl;COMMIT;"

    Und folgender Teil ist auch ohne tiefen Sinn:

    [autoit]

    For $i = 0 To $ListviewCount -1
    If $i > 0 Then ReDim $ListViewArray[UBound($ListViewArray, 1) +1][5]
    For $k = 0 To 5
    If $k > 0 Then ReDim $ListViewArray[UBound($ListViewArray, 1) +1][6]
    $ListViewArray[$i][$k] = _GUICtrlListView_GetItemText($ListviewAusgaben, $i, $k)
    Next
    Next

    [/autoit]

    Wenn du das Array erstellst, ist doch bereits mit "$ListviewCount " die Anzahl der Elemente bekannt - wofür also ReDim verwenden, erstell das Array von Anfang an in der richtigen Größe.
    Und das ReDim für Spalten ist übrigens komplett falsch. Ein ReDim in Spalten, angewendet auf ein bestehendes Array birgt die Gefahr des Datenverlusts im Array.

  • Listview Inhalt in eine SQLite Datenbank schreiben

    • BugFix
    • 19. Januar 2013 um 22:02

    Ohne jetzt ins Detail zu gehen ist mir eines sofort aufgefallen:

    [autoit]

    For $i = 0 To $ListviewCount -1 Step +1
    _SQLite_Exec($db_data, "CREATE TABLE tbl_ausgaben (" & '''' & $ListviewAusgabenUeberschrift[$i][0] & ''',''' & $ListviewAusgabenUeberschrift[$i][1] & ''',''' & $ListviewAusgabenUeberschrift[$i][2] & ''',''' & $ListviewAusgabenUeberschrift[$i][3] & ''',''' & $ListviewAusgabenUeberschrift[$i][4] & ''',''' & $ListviewAusgabenUeberschrift[$i][5] & '''' & ");")
    Next

    [/autoit]

    Was soll das bedeuten? Du erstellst für JEDE Zeile des Listview immer wieder dieselbe Tabelle mit Namen "tbl_ausgaben"? Das ergibt keinen Sinn.

    EDIT:
    Mal schnell aus der Hüfte geschossen, wie diese Funktion aussehen sollte:

    [autoit]

    Func AddToDatabase()
    If $ListviewCount < 1 Then Return
    Local $sSQL = 'BEGIN TRANSACTION;'
    _SQLite_Startup() ; .. UND _SQLite_Shutdown sollten am Programmanfang bzw. -ende stehen, nicht in Funktionen
    ; == nur, wenn Datei nicht existiert wird die Tabelle erstellt
    If Not FileExists($db_data_dir) Then
    ; == nur den SQL-String erstellen, noch nicht ausführen
    $sSQL &= "CREATE TABLE tbl_ausgaben (" & '''' & $ListviewAusgabenUeberschrift[0] & ''',''' & $ListviewAusgabenUeberschrift[1] & ''',''' & $ListviewAusgabenUeberschrift[2] & ''',''' & $ListviewAusgabenUeberschrift[3] & ''',''' & $ListviewAusgabenUeberschrift[4] & ''',''' & $ListviewAusgabenUeberschrift[5] & '''' & ");")
    EndIf
    ; == INSERT zusammenstellen
    For $i = 0 To $ListviewCount -1
    $sSQL &= "insert into tbl_ausgaben ("
    For $k = 0 To 5
    $sSQL &= '"' & _GUICtrlListView_GetItemText($ListviewAusgaben, $i, $k) & '",'
    Next
    $sSQL = StringTrimRight($sSQL, 1) & ");"
    Next
    $sSQL &= "COMMIT;"
    _GUICtrlListView_DeleteAllItems($ListviewAusgaben)
    $db_data = _SQLite_Open($db_data_dir)
    _SQLite_Exec($db_data, $sSQL)

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

    ;~ Local $d = _SQLite_Exec(-1, "Select rowid,* From tbl_ausgaben", "_select") ; _cb will be called for each row
    ;~ Local $d = _SQLite_Exec(-1, "Select * From tbl_ausgaben", "_select") ; _cb will be called for each row

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

    EndFunc

    [/autoit]
  • Happy Birthday Oscar

    • BugFix
    • 18. Januar 2013 um 15:48

    Auch von mir:

    [Blockierte Grafik: http://www.smilies-paradies.de/smileys/geburtstag/animierte-smilies-geburtstag-049.gif]

  • Welchen E-Mail Anbieter nutzt ihr?

    • BugFix
    • 17. Januar 2013 um 10:56

    :rofl::rofl::rofl:

    Ich habe gerade mal die Abstimmungsgrafik angeschaut: Die Summe der ausgewiesenen Prozentanteile ergibt nicht etwa 100 sondern: 204!! :D
    Somit erscheinen dort die 19 Stimmen (von 65 gesamt) für GMAIL mit sagenhaften 59% statt der realen 29%.
    Ich weiß nicht was für ein seniler Algorithmus dort hinterlegt wurde - sollte aber dringend geändert werden, damit gibt man sich echt der Lächerlichkeit preis.

  • Photoshop CS2 - Pfad teilen

    • BugFix
    • 17. Januar 2013 um 10:47

    Ähhm..

    Selbst OT-Themen sollten schon im Umfeld von AutoIt angesiedelt sein oder zumindest irgendeinen Bezug zu AutoIt erahnen lassen.
    Mit dieser Frage bist du sicher in einem Photoshop-Forum besser aufgehoben.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™