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

  • AdlibEnable

    • BugFix
    • 13. Juni 2008 um 23:07
    Zitat von Deepred

    was ist daran falsch? :huh:


    Die fehlende Problembeschreibung! :D

  • Pixel mit Abständen vergleichen, Wenn Wahr, dann einen weiteren Pixel überprüfen

    • BugFix
    • 13. Juni 2008 um 20:14

    Schau mal meine Funktion _pix_scan an: Scan Screen - Ergebnis sortiert

  • übergebene Parameter auslesen

    • BugFix
    • 13. Juni 2008 um 19:02

    Wenn du mit SciTE arbeitest: cmdlineselect und SPACE
    Dann erscheint:

    Spoiler anzeigen
    [autoit]

    #region - CmdlineSelect
    If $CMDLINE[0] Then
    For $i = 1 To $CMDLINE[0]
    Select
    Case $CMDLINE[$i] = '/?'
    MsgBox(0x40000, @ScriptName & ' Help', _
    'Switches are:' & @CRLF _
    & @CRLF & '/extract' _
    & @CRLF & @TAB & 'Extract files to current directory' _
    & @CRLF & '/x' _
    & @CRLF & @TAB & '' _
    & @CRLF & '/x' _
    & @CRLF & @TAB & '' _
    & @CRLF & '/x' _
    & @CRLF & @TAB & '' _
    & @CRLF & '/x' _
    & @CRLF & @TAB & '')
    Exit
    Case $CMDLINE[$i] = '/extract'
    FileInstall('x', @ScriptDir & '\')
    Exit
    Case $CMDLINE[$i] = '/x'
    Case $CMDLINE[$i] = '/x'
    Case $CMDLINE[$i] = '/x'
    Case $CMDLINE[$i] = '/x'
    Case Else
    MsgBox(0x40000, 'Incorrect switch used', _
    'Command used:' & @CRLF & $CMDLINERAW & @CRLF & _
    @CRLF & 'Use /? for the switches available.')
    Exit
    EndSelect
    Next
    EndIf
    #endregion

    [/autoit]
  • Pfad/Dateiname der aktuell geöffneten Datei auslesen

    • BugFix
    • 13. Juni 2008 um 14:23

    Ich versteh den Sinn der Frage nicht.
    Keine Anwendung ist einfach mal so geöffnet. Du mußt sie aufrufen. Und wenn du das tust, weißt du doch auch den Pfad.

  • Eine Grafik angeben und deren Inhalt auf dem Bildschirm suchen

    • BugFix
    • 13. Juni 2008 um 14:10
    Zitat von latemail

    aber z.B. um eine Anwendung zu starten, ohne wissen zu müssen, wo auf dem DT das Icon ist .... oder eine Anwendung/Fenster zu schließen, auch wenn ich die genaue Position des jeweiligen Buttons nicht kenne (Auflösun kann anders sein etc.)


    Im Normalfall brauchst du für nix davon die Position der entsprechenden Controls. (ControlClick, ControlSend etc.)
    Koordinaten eines Fensters kannst du dir z.B. mit WinGetPos holen. Auch Control-Positionen kannst du dir ausgeben lassen (ControlGetPos).

    Also genug Möglichkeiten um sich den Aufwand, den du betreiben möchtest, zu ersparen.

  • Mein Script lässt sich nicht beenden

    • BugFix
    • 13. Juni 2008 um 13:59

    Warum wollt ihr keine AutoIt-Funktion nutzen? ?(

    [autoit]

    $var = Ping("www.AutoIt.de",250)
    If $var Then; also possible: If @error = 0 Then ...
    Msgbox(0,"Status","Online, Reaktionszeit: " & $var & 'ms')
    Else
    Msgbox(0,"Status","Fehler, Nummer: " & @error)
    EndIf

    [/autoit]
  • ListView - Editieren aller SubItems

    • BugFix
    • 13. Juni 2008 um 09:41

    Hi,
    in einem Listview lassen sich mit dem Style $LVS_EDITLABELS Einträge on-the-fly editieren. Dies gilt aber nur für die Einträge in Spalte 0.
    Mit der folgenden Methode lassen sich alle SubItem sofort editieren. In der zuständigen Funktion verwende ich OnEventMode. Ich habe es aber so geschrieben, dass nur für die Ausführung der Funktion in den OnEventMode geschaltet wird, anschließend wird wieder in den vorherigen Modus zurückgeschaltet (Für all jene, die sich noch immer mit GUIGetMsg rumplagen möchten :D ).
    Das Bsp. habe ich daher auch mal im GetMsgMode erstellt.
    Um den Editiermodus nutzen zu können, darf $LVS_EDITLABELS hier nicht gesetzt sein.

    - mit Doppelklick öffnet sich genau über der angeklickten Spalte ein Editfenster mit dem Inhalt des SubItem
    - der untere Rand des Editfensters liegt an der Mauszeigerspitze
    - das Eingabefeld paßt sich der Breite der zugehörigen Spalte an
    - ist das Fenster so verschoben, dass eine Spalte nach links/rechts über den Desktop hinausragt, wird das Editfenster am Bildschirmrand, statt mittig über der Spalte positioniert
    - der geänderte Inhalt des Fensters wird mit ENTER übernommen und in das SubItem geschrieben
    - findet keine Änderung statt muß das Fenster mit ESC geschlossen werden
    - während des Editierens werden im Fenstertitel Zeilennummer und Spaltenname des editierten SubItem angezeigt

    Bsp. Edit SubItems
    [autoit]

    #include<StaticConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #include<StructureConstants.au3>
    #include<WindowsConstants.au3>
    #include <GUIListView.au3>

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

    Global $currentItem[2], $title, $currentOpt[2] = ["none"]

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

    $GUI = GUICreate('test')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2|Spalte3', 10, 10, 300, 200, $LVS_REPORT)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 70)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 60)
    _GUICtrlListView_SetColumnWidth($hListView, 2, $LVSCW_AUTOSIZE_USEHEADER )
    For $i = 1 To 9
    GUICtrlCreateListViewItem('Z. ' & $i & ' - Sp. 1|Z. ' & $i & ' - Sp. 2|Z. ' & $i & ' - Sp. 3', $hListView)
    Next

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

    $EditBox = GUICreate('', 200, 30, -1, -1, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
    $hEdit = GUICtrlCreateInput('', 5, 5, 190, 20, $SS_CENTER)
    HotKeySet('{ESC}', '_EscEdit')

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

    GUISetState(@SW_SHOW, $GUI)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While True
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

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

    Func _LeftDblClick($Info)
    If $Info[3] = -1 Then Return
    If $currentOpt[0] = "none" Then
    $currentOpt[0] = Opt('GUICoordMode', 1)
    $currentOpt[1] = Opt("GUIOnEventMode", 1)
    EndIf
    GUICtrlSetOnEvent($hEdit, '_EditEnter')
    _GUICtrlListView_SetSelectedColumn($Info[1], $Info[4])
    $title = WinGetTitle($GUI)
    Local $mouse = MouseGetPos(), $posEdit = WinGetPos($EditBox)
    Local $posGUI = WinGetPos($GUI), $posLV = ControlGetPos($GUI, '', $hListView)
    Local $colInfo = _GUICtrlListView_GetColumn($Info[1], $Info[4]), $sumWidth = 0, $tmp
    WinSetTitle($GUI, '', 'Editiere: Zeile ' & $Info[3]+1 & ', ' & $colInfo[5])
    For $i = 0 To $Info[4]
    $tmp = _GUICtrlListView_GetColumn($Info[1], $i)
    $sumWidth += $tmp[4]
    Next
    $sumWidth -= $colInfo[4]
    Local $xPos = $posGUI[0]+$posLV[0]+$sumWidth
    If $xPos+$colInfo[4]+10 > @DesktopWidth Then $xPos = @DesktopWidth - ($colInfo[4] + 10)
    If $xPos < 0 Then $xPos = 0
    WinMove($EditBox, '', $xPos, $mouse[1]-$posEdit[3], $colInfo[4]+10)
    GUICtrlSetData($hEdit, _GUICtrlListView_GetItemText($Info[1], $Info[3], $Info[4]))
    $currentItem[0] = $Info[3]
    $currentItem[1] = $Info[4]
    GUISetState(@SW_SHOW, $EditBox)
    EndFunc

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

    Func _EscEdit()
    WinSetTitle($GUI, '', $title)
    Opt('GUICoordMode', $currentOpt[0])
    Opt("GUIOnEventMode", $currentOpt[1])
    $currentOpt[0] = "none"
    GUISetState(@SW_HIDE, $EditBox)
    EndFunc

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

    Func _EditEnter()
    WinSetTitle($GUI, '', $title)
    Opt('GUICoordMode', $currentOpt[0])
    Opt("GUIOnEventMode", $currentOpt[1])
    $currentOpt[0] = "none"
    _GUICtrlListView_SetItemText($hListView, $currentItem[0], GUICtrlRead($hEdit), $currentItem[1])
    GUISetState(@SW_HIDE, $EditBox)
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView ; ID des LV
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) ; ID des LV
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $aInfo[5] = [$hWndFrom, $iIDFrom, $iCode, DllStructGetData($tInfo, "Index"), _
    DllStructGetData($tInfo, "SubItem")]
    _LeftDblClick($aInfo)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    Hier mal eine alternative Variante, die EditBox kann bei nichtgeändertem Inhalt jetzt auch mit ENTER verlassen werden.

    Spoiler anzeigen
    [autoit]

    #include<StaticConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #include<StructureConstants.au3>
    #include<WindowsConstants.au3>
    #include <GUIListView.au3>

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

    Global $currentItem[2], $title, $currentOpt[2] = ["none"]

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

    $GUI = GUICreate('test')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2|Spalte3', 10, 10, 300, 200, $LVS_REPORT)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 70)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 60)
    _GUICtrlListView_SetColumnWidth($hListView, 2, $LVSCW_AUTOSIZE_USEHEADER )
    For $i = 1 To 9
    GUICtrlCreateListViewItem('Z. ' & $i & ' - Sp. 1|Z. ' & $i & ' - Sp. 2|Z. ' & $i & ' - Sp. 3', $hListView)
    Next

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

    $EditBox = GUICreate('', 200, 30, -1, -1, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
    $dummy = GUICtrlCreateDummy()
    $hEdit = GUICtrlCreateInput('', 5, 5, 190, 20, $SS_CENTER)
    HotKeySet('{ESC}', '_EscEdit')
    Global $AccelKeys[1][2]=[["{ENTER}", $dummy]]
    GUICtrlSetOnEvent($dummy, "_EditEnter")
    GUISetAccelerators($AccelKeys)

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

    GUISetState(@SW_SHOW, $GUI)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While True
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

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

    Func _LeftDblClick($Info)
    If $Info[3] = -1 Then Return
    If $currentOpt[0] = "none" Then
    $currentOpt[0] = Opt('GUICoordMode', 1)
    $currentOpt[1] = Opt("GUIOnEventMode", 1)
    EndIf
    GUICtrlSetOnEvent($hEdit, '_EditEnter')
    _GUICtrlListView_SetSelectedColumn($Info[1], $Info[4])
    $title = WinGetTitle($GUI)
    Local $mouse = MouseGetPos(), $posEdit = WinGetPos($EditBox)
    Local $posGUI = WinGetPos($GUI), $posLV = ControlGetPos($GUI, '', $hListView)
    Local $colInfo = _GUICtrlListView_GetColumn($Info[1], $Info[4]), $sumWidth = 0, $tmp
    WinSetTitle($GUI, '', 'Editiere: Zeile ' & $Info[3]+1 & ', ' & $colInfo[5])
    For $i = 0 To $Info[4]
    $tmp = _GUICtrlListView_GetColumn($Info[1], $i)
    $sumWidth += $tmp[4]
    Next
    $sumWidth -= $colInfo[4]
    Local $xPos = $posGUI[0]+$posLV[0]+$sumWidth
    If $xPos+$colInfo[4]+10 > @DesktopWidth Then $xPos = @DesktopWidth - ($colInfo[4] + 10)
    If $xPos < 0 Then $xPos = 0
    WinMove($EditBox, '', $xPos, $mouse[1]-$posEdit[3], $colInfo[4]+10)
    GUICtrlSetData($hEdit, _GUICtrlListView_GetItemText($Info[1], $Info[3], $Info[4]))
    $currentItem[0] = $Info[3]
    $currentItem[1] = $Info[4]
    GUISetState(@SW_SHOW, $EditBox)
    EndFunc

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

    Func _EscEdit()
    WinSetTitle($GUI, '', $title)
    Opt('GUICoordMode', $currentOpt[0])
    Opt("GUIOnEventMode", $currentOpt[1])
    $currentOpt[0] = "none"
    GUISetState(@SW_HIDE, $EditBox)
    EndFunc

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

    Func _EditEnter()
    WinSetTitle($GUI, '', $title)
    Opt('GUICoordMode', $currentOpt[0])
    Opt("GUIOnEventMode", $currentOpt[1])
    $currentOpt[0] = "none"
    _GUICtrlListView_SetItemText($hListView, $currentItem[0], GUICtrlRead($hEdit), $currentItem[1])
    GUISetState(@SW_HIDE, $EditBox)
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView ; ID des LV
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) ; ID des LV
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $aInfo[5] = [$hWndFrom, $iIDFrom, $iCode, DllStructGetData($tInfo, "Index"), _
    DllStructGetData($tInfo, "SubItem")]
    _LeftDblClick($aInfo)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • String in einzelne Zeichen zerlegen und verändert zusammen legen

    • BugFix
    • 13. Juni 2008 um 07:53

    Ein Einzeiler gefällig ? ;)

    [autoit]

    MsgBox(0, "Newstring", StringReplace(StringReplace(StringReplace(StringReplace("Hallo", "h", "1"), "a", "2"), "l", "3"), "o", "4"))

    [/autoit]

    Da du es aber sicher mit vorher nicht bekannten Wörtern unterschiedlicher Zeichenlänge zu tun hast, empfehle ich die Verwendung eines Array oder hier sogar besser eines Object.Dictionary um die Buchstaben-Ersatzzeichen Zuordnung zu speichern.

  • FileWrite macht Files als Mac vormat

    • BugFix
    • 13. Juni 2008 um 07:45
    Zitat von schmidt-ma


    macht er ein File im MAC Format


    ?? - Ich sehe hier nicht, dass er etwas macht, sondern dass du explizit eine Schreibanweisung für die Datei ausgibst. Und genau nach dieser Anweisung wird die Datei erstellt.
    Ein Bug wäre, wenn lt. Anweisung @CR geschrieben werden soll, im Text aber @CRLF erscheinen würde. Also nix da Bug. :P

    ( 90% der Fehler sitzen 80 cm vorm Monitor ) :whistling:

  • Pixel mit Abständen vergleichen, Wenn Wahr, dann einen weiteren Pixel überprüfen

    • BugFix
    • 13. Juni 2008 um 07:39

    Das ist nun mal die Funktionsweise von PixelSearch, dass nur der erste gefundene Pixel zurückgegeben wird.
    Du mußt also nicht einen Bereich mit einem mal scannen, sondern jeden Pixel des Bereiches einzeln scannen.

  • Kann nicht einer mal "schnell" ein AutoLogin entwickeln ?

    • BugFix
    • 13. Juni 2008 um 07:31

    FireFlyer: Hab dir einen Zugang eingerichtet, s. PN.

  • Kann nicht einer mal "schnell" ein AutoLogin entwickeln ?

    • BugFix
    • 12. Juni 2008 um 23:40

    - Seite aufrufen
    - ENTER drücken
    fertig! (Username und Paßwort im Browser speichern ;) )

  • FileWrite frage

    • BugFix
    • 12. Juni 2008 um 22:16

    Die zu bearbeitende Datei mit FileOpen öffnen und den gewünschten Mode angeben (append, overwrite) s. Hilfe.

  • neue autoit version, virus?

    • BugFix
    • 12. Juni 2008 um 17:57

    Liegt daran, dass einige Hersteller von AV-Proggis panische Angst vor Skriptprogrammen haben und alles, was dort neu ist, erst mal auf die schwarze Liste setzen, bis sich dann herausstellt, dass doch keine Gefahr besteht.

  • Digitaluhr

    • BugFix
    • 12. Juni 2008 um 17:50
    Zitat von Oscar

    Ja ok, soweit kann ich folgen, aber warum ist die Konstante anders deklariert?
    Sollte das nicht bei jeder AutoIt-Version gleich sein?


    Nein, war auch in den Changes zur AutoIt-Version ausdrücklich angesprochen, dass in Zukunft nur noch diese Datentypen in DLL-Aufrufen zu verwenden sind.

  • Eine Grafik angeben und deren Inhalt auf dem Bildschirm suchen

    • BugFix
    • 12. Juni 2008 um 17:30

    Du kannst keinen Datei-Desktop Vergleich durchführen.
    Dazu müßtest du die Datei anzeigen lassen, für jede Pixelposition die Farbwerte speichern und diese Werte mit einer späteren Bildschirmdarstellung vergleichen.
    Welchen Sinn soll das übrigens haben?

  • variable nach send +1 rechnen

    • BugFix
    • 12. Juni 2008 um 16:41

    Schau mal in der Hilfe unter For-Schleife.

  • Ordner suchen und löschen

    • BugFix
    • 12. Juni 2008 um 16:39

    Dein Label ($S3_Zeile01) hat nach der Erstellung folgenden Inhalt: "Die Software wurde" & $schonFertig & "installiert." - wobei $schon Fertig ein Leerstring ist.
    Wenn du der Variablen $schonFertig einen neuen Inhalt zuweist, weiß das aber dein Label nicht. Du mußt den Inhalt des Labels jetzt mit GUICtrlSetData neu festlegen. Bei den 3 Worten würde ich auf Variablen verzichten:
    - Label ohne Text erstellen
    - Fall1: GUICtrlSetData($Label, 'Text1')
    - Fall2: GUICtrlSetData($Label, 'Text2')

  • Inhalt eines ListViewItems editieren??

    • BugFix
    • 12. Juni 2008 um 16:15

    Hi,
    also SubItems lassen sich leider so nicht bearbeiten. Ich hab dir aber mal eine recht passable Lösung gebastelt.
    Beachte, dass der Style $LVS_EDITLABELS hierbei nicht aktiviert sein darf.
    Per Doppelklick auf einen Eintrag wird ein kleines Editfenster an dieser Position geöffnet. Das Ereignis zum Schließen des Fensters ist ENTER nach Ändern des Inhalts. Darum habe ich zusätzlich ESC als HotKey zum Schließen aktiviert, falls keine Änderung vorgenommen wird (sonst könnte das Fenster nicht geschlossen werden :) ).

    Spoiler anzeigen
    [autoit]

    #include<StaticConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #include<StructureConstants.au3>
    #include<WindowsConstants.au3>
    #include <GUIListView.au3>
    Opt("GUIOnEventMode", 1)
    Global $currentItem[2], $title

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

    $gui = GUICreate('test')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_ende')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2|Spalte3', 10, 10, 300, 200, $LVS_REPORT)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 70)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 60)
    _GUICtrlListView_SetColumnWidth($hListView, 2, $LVSCW_AUTOSIZE_USEHEADER )
    For $i = 1 To 9
    GUICtrlCreateListViewItem('Z. ' & $i & ' - Sp. 1|Z. ' & $i & ' - Sp. 2|Z. ' & $i & ' - Sp. 3', $hListView)
    Next

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

    $EditBox = GUICreate('', 200, 30, -1, -1, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
    $edit = GUICtrlCreateInput('', 5, 5, 190, 20, $SS_CENTER)
    GUICtrlSetOnEvent(-1, '_EditEnter')
    HotKeySet('{ESC}', '_escEdit')

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

    GUISetState(@SW_SHOW, $gui)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While True
    Sleep(100)
    WEnd

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

    Func _LeftDblClick($Info)
    If $Info[3] = -1 Then Return
    _GUICtrlListView_SetSelectedColumn($Info[1], $Info[4])
    $title = WinGetTitle($gui)
    Local $mouse = MouseGetPos(), $wndEdit = WinGetPos($EditBox)
    Local $wndGUI = WinGetPos($gui), $wndLV = ControlGetPos($gui, '', $hListView)
    Local $colInfo = _GUICtrlListView_GetColumn($Info[1], $Info[4]), $sumWidth = 0, $tmp
    WinSetTitle($gui, '', 'Editiere: Zeile ' & $Info[3]+1 & ', ' & $colInfo[5])
    For $i = 0 To $Info[4]
    $tmp = _GUICtrlListView_GetColumn($Info[1], $i)
    $sumWidth += $tmp[4]
    Next
    $sumWidth -= $colInfo[4]
    Local $xPos = $wndGUI[0]+$wndLV[0]+$sumWidth
    If $xPos+$colInfo[4]+10 > @DesktopWidth Then $xPos = @DesktopWidth - ($colInfo[4] + 10)
    WinMove($EditBox, '', $xPos, $mouse[1]-$wndEdit[3], $colInfo[4]+10)
    GUICtrlSetData($edit, _GUICtrlListView_GetItemText($Info[1], $Info[3], $Info[4]))
    $currentItem[0] = $Info[3]
    $currentItem[1] = $Info[4]
    GUISetState(@SW_SHOW, $EditBox)
    EndFunc

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

    Func _escEdit()
    WinSetTitle($gui, '', $title)
    GUISetState(@SW_HIDE, $EditBox)
    EndFunc

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

    Func _EditEnter()
    WinSetTitle($gui, '', $title)
    _GUICtrlListView_SetItemText($hListView, $currentItem[0], GUICtrlRead($edit), $currentItem[1])
    GUISetState(@SW_HIDE, $EditBox)
    EndFunc

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

    Func _ende()
    Exit
    EndFunc

    [/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 $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $aInfo[12] = [$hWndFrom, _
    $iIDFrom, _
    $iCode, _
    DllStructGetData($tInfo, "Index"), _
    DllStructGetData($tInfo, "SubItem"), _
    DllStructGetData($tInfo, "NewState"), _
    DllStructGetData($tInfo, "OldState"), _
    DllStructGetData($tInfo, "Changed"), _
    DllStructGetData($tInfo, "ActionX"), _
    DllStructGetData($tInfo, "ActionY"), _
    DllStructGetData($tInfo, "lParam"), _
    DllStructGetData($tInfo, "KeyFlags")]
    _LeftDblClick($aInfo)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]


    Edit: Hab nach eine Codezeile eingefügt, um zu verhindern, dass bei einem Klick am rechten Bildschirmrand, das Eingabefenster außerhalb des Desktopbereiches erscheint.
    Edit2: Noch eine Verbesserung, das Eingabefenster paßt sich automatisch an die Breite der angeklickten Spalte an.
    Und wegen der besseren Optik markieren wir auch gleich noch die Spalte ;)

    Und noch ein bischen geschraubt :D
    Das Eingabefenster liegt jetzt immer exakt über der angeklickten Spalte.

    Noch eine Erweiterung: während des Editierens werden im Fenstertitel Zeilennummer und Spaltenbezeichnung angezeigt.

  • Ordner suchen und löschen

    • BugFix
    • 12. Juni 2008 um 14:28

    Du prüfst doch, ob installiert werden muß. Falls ja, beginnt die Installation und an deren Ende gibst die Meldung aus: "Installation erfolgreich".
    Falls nein, gibst du nur die Meldung aus: "Installation nicht erforderlich".

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™