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

  • Edit1 auslesen

    • BugFix
    • 2. März 2009 um 20:24
    [autoit]

    $read = ControlCommand("TeamViewer", '', '[CLASS:Edit; INSTANCE:1]', "GetLine", 1)
    ConsoleWrite('gelsesen: ' & $read & @crlf)
    ; oder MsgBox
    MsgBox(0, '', $read)

    [/autoit]
  • Rekursive Dateisuche per Objekt

    • BugFix
    • 2. März 2009 um 19:20
    Zitat von Schnuecks

    Die Datei xyz.exe existiert im Beispiel mehrmals auf Laufwerk C:


    Also mehrfaches Auftreten einer Datei in einem Pfad kann hiermit nicht gefunden werden. Diese Suchmethode gibt immer nur die erste gefundene Instanz zurück.
    Wenn du mehrfaches Auftreten finden willst, benötigst du eine Variante, die FileFindFirstFile ...NextFile verwendet.

  • Rekursive Dateisuche per Objekt

    • BugFix
    • 2. März 2009 um 17:39

    War ein Logikfehler drin.
    Ersetze mal diese Zeile

    [autoit]

    If $aFound[UBound($aFound)-1] <> 0 Then ReDim $aFound[UBound($aFound)+1]

    [/autoit]


    durch diese

    [autoit]

    If $aFound[UBound($aFound)-1] Then ReDim $aFound[UBound($aFound)+1]

    [/autoit]
  • Rekursive Dateisuche per Objekt

    • BugFix
    • 2. März 2009 um 13:48
    Zitat von Schnuecks

    Ich würde gerne mit der Funktion mehrere Dateien in mehreren Ordnern suchen.
    Mit einer ist es ja kein Problem.

    Mit mehreren auch nicht. ;)
    Abarbeiten in einer Schleife, könntest du so machen (Suchfunktion ist hier eine andere, kannst ja testen welche schneller ist.):

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $aToSearch[2][2] = [['abc.exe','C:|D:'],['xyz.exe','C:']] ; z.b. abc.exe in C: und D:, xyz.exe nur in C: suchen
    Global $aPath[2], $aFound[1] = [0]

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

    For $i = 0 To UBound($aToSearch) -1
    If StringInStr($aToSearch[$i][1], '|') Then
    $aPath = StringSplit($aToSearch[$i][1], '|')
    Else
    $aPath[1] = $aToSearch[$i][1]
    EndIf
    For $j = 1 To UBound($aPath) -1
    If $aFound[UBound($aFound)-1] <> 0 Then ReDim $aFound[UBound($aFound)+1]
    $aFound[UBound($aFound)-1] = _SearchTreeForFile($aPath[$j], $aToSearch[$i][0])
    Next
    Next
    If $aFound[0] Then
    _ArrayDisplay($aFound, 'Ergebnis Dateisuche')
    Else
    MsgBox(0, 'Dateisuche', 'Keine der Dateien wurde in den angegebenen Pfaden gefunden.')
    EndIf

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

    ;===============================================================================
    ; Function Name: _SearchTreeForFile($sRootPath, $sFileName)
    ; Description:: Dateisuche in einem Pfad und allen Unterpfaden
    ; Parameter(s): $sRootPath Startpfad der Suche
    ; $sFileName Name der gesuchten Datei
    ; Return Value(s): gefunden Pfad der gesuchten Datei
    ; n. gefunden 0
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _SearchTreeForFile($sRootPath, $sFileName)
    If StringRight($sRootPath, 1) <> '\' Then $sRootPath &= '\'
    Local $sOutputPathBuffer = ''
    Local $aRet = DllCall("imagehlp", 'long', 'SearchTreeForFile', 'str', _
    $sRootPath, 'str', $sFileName, 'str', $sOutputPathBuffer)
    If $aRet[0] = 1 Then
    Return $aRet[3]
    Else
    Return 0
    EndIf
    EndFunc ;==>_SearchTreeForFile

    [/autoit]
  • Geburtstag von eukalyptus

    • BugFix
    • 2. März 2009 um 08:31

    Auch von mir Alles Gute und ein Geschenk :D

    [Blockierte Grafik: http://www.pittivomdorf.de/media/DIR_15001/euka.jpg]

  • Mausklicke (easy für euch steh aufm schlauch^^)

    • BugFix
    • 1. März 2009 um 20:30
    [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit]

    GUICtrlSetOnEvent (1, "go") ???

  • Druckersteuerung

    • BugFix
    • 1. März 2009 um 19:35

    Schau mal hier: http://www.autoitscript.com/forum/index.php?showtopic=73993&hl=printer++remote - Vielleicht hilft das weiter.
    Noch was: http://www.autoitscript.com/forum/index.php?showtopic=37367&hl=printer++remote

  • PN's von Forum auf PC-Programm

    • BugFix
    • 1. März 2009 um 18:15
    Zitat von Knappe

    Belohnung sind Einhundertelftausendeinhundertelf Popups/Layer auf beliebiger Adresse. (Das sind über 100000 Besucher/Layereinblendungen)

    Was soll man denn damit anfangen? :rofl:
    Hätte nicht mal für eines Verwendung. :rolleyes:

  • Koda in AutoIt?

    • BugFix
    • 1. März 2009 um 16:55
    Zitat von MatthiasG.


    Wie ermittele ich denn die nächste? Und kann man die Maus dann überhaupt noch bewegen wenn das in einer endlos-Schleife ist?


    Sowas solltest du nicht in einer Schleife machen. Du mußt die entsprechenden MessageCodes verwenden (GUIRegisterMessage).

    Zitat

    Wie ermittele ich denn die nächste?

    Wie wärs mit Rechnen? Bsp.: Du bist über Pos. x=224, y=312. Dein Raster ist 5x5. Dann einfach die Werte auf den nächsten 5-er runden. Also x=225, y=310.

  • Koda in AutoIt?

    • BugFix
    • 1. März 2009 um 15:28
    Zitat von MatthiasG.


    Wie kann ich ein Hintergrundbild "wiederholen" lassen, so dass die ganze GUI bedeckt ist?

    Verstehe nicht, was du mit Wiederholen meinst. Erklär mal genauer, was wann und warum geschieht (od. auch nicht).

    Zitat von MatthiasG.

    Wie kann ich spezielle Punkte "magnetisch" machen, deren Koordinaten ich kenne?

    Stichwort: Grid - Du hinterlegst ein Raster (5x5 od. 10x10 ....Pixel). Wenn du mit der Maus über der GUI bist vergleichst du Positionen und beim MOUSE_UP Event dockst du an die nächstgelegene Rasterposition.

    Zitat von MatthiasG.

    Wie finde ich heraus, ob der Anwender in einem bestimmten Bereich herein geklickt hat?

    Vergleichen Mausposition bei MOUSE_DOWN mit GUI-Koordinaten. (Such mal bei Skripten nach "Doppelklick für (fast) jedes Control", darin hatte ich Ähnliches genutzt.

    Zitat von MatthiasG.

    Ist Drag&Drop möglich?

    Du kannst es ermöglichen. Prüfen ob die entsprechenden Bedingungen erfüllt sind (so etwa: MOUSE_DOWN, Koordinate=Ctrl, MOUSE_MOVE, MOUSE_UP über erlaubten Koordinaten)

  • "2D Barcode auslesen"

    • BugFix
    • 1. März 2009 um 13:50

    Schau dir mal das QR-Code Protokoll an, das könnte dir einen Weg zeigen.

  • Syntaxhervorhebung selbst gemacht

    • BugFix
    • 1. März 2009 um 13:22

    So ist es z.B. in Notepad++ gelöst, per xml-Datei:

    Spoiler anzeigen
    PHP
    <NotepadPlus>
        <UserLang name="AutoIt3" ext="au3 au2">
            <Settings>
                <Global caseIgnored="yes" />
                <TreatAsSymbol comment="no" commentLine="no" />
                <Prefix words1="no" words2="no" words3="no" words4="yes" />
            </Settings>
            <KeywordLists>
                <Keywords name="Delimiters">&quot;&apos;0&quot;&apos;0</Keywords>
                <Keywords name="Folder+"></Keywords>
                <Keywords name="Folder-"></Keywords>
                <Keywords name="Operators">- &amp; ( ) * . / [ ] ^ { } + &lt; = &gt;</Keywords>
                <Keywords name="Comment"> 1#cs 1#comments-start 2#ce 2#comments-end 0; 0;~ 0</Keywords>
                <Keywords name="Words1">Abs ACos AdlibDisable AdlibEnable Asc ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle BitAND BitNOT BitOR BitShift BitXOR BlockInput Break Call CDTray Chr ClipGet ClipPut ConsoleWrite ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllClose DllOpen DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Exp FileChangeDir FileClose FileCopy FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileGetAttrib FileGetLongName FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetTime FileWrite FileWriteLine FtpSetProxy GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuitem GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetFont GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy InetGet InetGetSize IniDelete IniRead IniReadSection IniReadSectionNames IniWrite InputBox Int IsAdmin IsArray IsDeclared IsFloat IsInt IsNumber IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number Opt Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAsSet RunWait Send SetError SetExtended Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt StatusbarGetText String StringAddCR StringFormat StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringReplace StringRight StringSplit StringStripCR StringStripWS StringTrimLeft StringTrimRight StringUpper Tan TimerDiff TimerInit ToolTip TrayTip UBound WinActivate WinActive WinClose WinExists WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive</Keywords>
                <Keywords name="Words2">@AppDataCommonDir @AppDataDir @AutoItExe @AutoItVersion @CommonFilesDir @Compiled @ComputerName @ComSpec @CR @CRLF @DesktopCommonDir @DesktopDir @DesktopHeight @DesktopWidth @DesktopDepth @DesktopRefresh @DocumentsCommonDir @error @extended @FavoritesCommonDir @FavoritesDir @GUI_CtrlId @GUI_CtrlHandle @GUI_WinHandle @HomeDrive @HomePath @HomeShare @HOUR @InetGetActive @InetGetBytesRead @IPAddress1 @IPAddress2 @IPAddress3 @IPAddress4 @LF @LogonDNSDomain @LogonDomain @LogonServer @MDAY @MIN @MON @MyDocumentsDir @NumParams @OSBuild @OSLang @OSServicePack @OSTYPE @OSVersion @ProgramFilesDir @ProgramsCommonDir @ProgramsDir @ScriptDir @ScriptFullPath @ScriptName @SEC @StartMenuCommonDir @StartMenuDir @StartupCommonDir @StartupDir @SW_DISABLE @SW_ENABLE @SW_HIDE @SW_MAXIMIZE @SW_MINIMIZE @SW_RESTORE @SW_SHOW @SW_SHOWDEFAULT @SW_SHOWMAXIMIZED @SW_SHOWMINIMIZED @SW_SHOWMINNOACTIVE @SW_SHOWNA @SW_SHOWNOACTIVATE @SW_SHOWNORMAL @SystemDir @TAB @TempDir @UserProfileDir @UserName @WDAY @WindowsDir @WorkingDir @YDAY @YEAR #include</Keywords>
                <Keywords name="Words3">else case to ExitLoop ContinueLoop ReDim exit then func endfunc while wend do until false true return if endif for next </Keywords>
                <Keywords name="Words4">$</Keywords>
            </KeywordLists>
            <Styles>
                <WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
                <WordsStyle name="FOLDEROPEN" styleID="12" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" />
                <WordsStyle name="FOLDERCLOSE" styleID="13" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" />
                <WordsStyle name="KEYWORD1" styleID="5" fgColor="000080" bgColor="FFFFFF" fontName="" fontStyle="3" />
                <WordsStyle name="KEYWORD2" styleID="6" fgColor="FF00FF" bgColor="FFFFFF" fontName="" fontStyle="1" />
                <WordsStyle name="KEYWORD3" styleID="7" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" />
                <WordsStyle name="KEYWORD4" styleID="8" fgColor="800000" bgColor="FFFFFF" fontName="" fontStyle="1" />
                <WordsStyle name="COMMENT" styleID="1" fgColor="008000" bgColor="FFFFFF" fontName="Courier New" fontStyle="0" fontSize="10" />
                <WordsStyle name="COMMENT LINE" styleID="2" fgColor="008000" bgColor="FFFFFF" fontName="Courier New" fontStyle="0" fontSize="10" />
                <WordsStyle name="NUMBER" styleID="4" fgColor="800080" bgColor="FFFFFF" fontName="Courier New" fontStyle="1" fontSize="10" />
                <WordsStyle name="OPERATOR" styleID="10" fgColor="FF0000" bgColor="FFFFFF" fontName="" fontStyle="1" />
                <WordsStyle name="DELIMINER1" styleID="14" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" />
                <WordsStyle name="DELIMINER2" styleID="15" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" />
                <WordsStyle name="DELIMINER3" styleID="16" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" />
            </Styles>
        </UserLang>
    </NotepadPlus>
    Alles anzeigen
  • Koda in AutoIt?

    • BugFix
    • 1. März 2009 um 13:15
    Zitat von MatthiasG.

    Ist es möglich diese Buttons oben rechts in der Ecke (Minimieren, Maximieren, Schließen) nur auf Schließen zu beschränken (s. Koda sObjektinspektor z.B.) ?(


    Verwende als EX-Style: $WS_EX_TOOLWINDOW

  • Auswertung Schützen

    • BugFix
    • 28. Februar 2009 um 23:45

    Die Auswertung geht am Schnellsten mit SQLite. Ich hab das mal umgesetzt und gebe die Werte in die Console aus.
    Du kannst auch statt _SQLite_Exec() mit _SQlite_Query() & _SQLite_FetchData() arbeiten. Dann erhältst du als Ergebnis ein Array von dem aus du die Werte in deine GUI eintragen kannst.

    Spoiler anzeigen
    [autoit]

    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Global $file = @ScriptDir & '\test.csv'
    Global $aRow, $aCSV, $aSplit, $strSQL = ''
    _SQLite_Startup()
    _SQLite_Open() ; Datenbank (im Arbeitsspeicher) erstellen

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

    ; Tabelle erstellen
    _SQLite_Exec(-1, "Create table tblTest (gruppe,m_name,schuetze,gender,result);")

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

    ; Werte eintragen
    _FileReadToArray($file, $aCSV)
    For $i = 1 To UBound($aCSV) -1
    $aSplit = StringSplit($aCSV[$i], ';')
    $strSQL &= "Insert into tblTest values ("
    For $j = 1 To UBound($aSplit) -1
    $strSQL &= "'" & $aSplit[$j] & "',"
    Next
    $strSQL = StringTrimRight($strSQL, 1)
    $strSQL &= ");" & @CRLF
    Next
    _SQLite_Exec(-1, $strSQL)

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

    ; Grupenergebnisse
    $strSQL = "SELECT gruppe,SUM(result) FROM tblTest WHERE gruppe != '' GROUP BY gruppe;"
    _SQLite_Exec(-1, $strSQL, "_cb")

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

    ; Ergebnisse Gruppe 'Verein'
    $strSQL = "SELECT * FROM tblTest WHERE gruppe = 'Verein' ORDER BY result DESC;"
    _SQLite_Exec(-1, $strSQL, "_cb")

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

    ; Ergebnisse Gruppe 'Betrieb'
    $strSQL = "SELECT * FROM tblTest WHERE gruppe = 'Betrieb' ORDER BY result DESC;"
    _SQLite_Exec(-1, $strSQL, "_cb")

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

    ; Ergebnisse nach Geschlecht
    ; männlich
    $strSQL = "SELECT schuetze,result FROM tblTest WHERE gender = 'm' ORDER BY result DESC;"
    _SQLite_Exec(-1, $strSQL, "_cb")
    ; weiblich
    $strSQL = "SELECT schuetze,result FROM tblTest WHERE gender = 'w' ORDER BY result DESC;"
    _SQLite_Exec(-1, $strSQL, "_cb")

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

    _SQLite_Close()
    _SQLite_Shutdown()

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

    Func _cb($aRow)
    For $s In $aRow
    ConsoleWrite($s & @TAB)
    Next
    ConsoleWrite(@LF)
    EndFunc

    [/autoit]

    Edit:
    Ich hab dir mal eine Komplettlösung erstellt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <GuiListView.au3>
    #include <File.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Global $file = @ScriptDir & '\test.csv'
    Global $aRow, $aCSV, $aSplit, $strSQL, $aResult, $iRows, $iColumns
    Global $hListView1, $hListView2, $hListView3

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

    _SQLite_Startup()
    _SQLite_Open() ; Datenbank (im Arbeitsspeicher) erstellen
    _createTable()

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

    Global $gui = GUICreate('Ergebnisse', 800, 400)
    $btLoad = GUICtrlCreateButton('Lade CSV', 190, 35, 70, 20)
    $ListView1 = GUICtrlCreateListView('Gruppe|Ergebnis', 520, 10, 270, 80)
    $hListView1 = GUICtrlGetHandle($ListView1)
    $ListView2 = GUICtrlCreateListView('Gruppe|Mannschaft|Schütze|Geschlecht|Ergebnis', 10, 100, 500, 290)
    $hListView2 = GUICtrlGetHandle($ListView2)
    $ListView3 = GUICtrlCreateListView('Schütze|Geschlecht|Ergebnis', 520, 100, 270, 290)
    $hListView3 = GUICtrlGetHandle($ListView3)
    _GUICtrlListView_SetColumnWidth($hListView1, 0, 210)
    _GUICtrlListView_SetColumnWidth($hListView1, 1, $LVSCW_AUTOSIZE_USEHEADER )
    _GUICtrlListView_SetColumnWidth($hListView2, 0, 120)
    _GUICtrlListView_SetColumnWidth($hListView2, 1, 140)
    _GUICtrlListView_SetColumnWidth($hListView2, 2, 115)
    _GUICtrlListView_SetColumnWidth($hListView2, 3, 65)
    _GUICtrlListView_SetColumnWidth($hListView2, 4, $LVSCW_AUTOSIZE_USEHEADER )
    _GUICtrlListView_SetColumnWidth($hListView3, 0, 145)
    _GUICtrlListView_SetColumnWidth($hListView3, 1, 65)
    _GUICtrlListView_SetColumnWidth($hListView3, 2, $LVSCW_AUTOSIZE_USEHEADER )
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    _SQLite_Close()
    _SQLite_Shutdown()
    Exit
    Case $btLoad
    _GUICtrlListView_DeleteAllItems($hListView1)
    _GUICtrlListView_DeleteAllItems($hListView2)
    _GUICtrlListView_DeleteAllItems($hListView3)
    If _SQLite_Exec(-1, "DELETE FROM tblTest;") = $SQLITE_OK Then
    _readFromFile()
    _getGroups()
    _getGroup()
    _getByGender()
    Else
    MsgBox(0, 'Fehler', 'Tabelle Löschen fehlgeschlagen.')
    EndIf
    EndSwitch
    WEnd

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

    Func _createTable() ; Tabelle erstellen
    If _SQLite_Exec(-1, "CREATE TABLE [tblTest] (" & _
    "gruppe VARCHAR[30] NULL," & _
    "m_name VARCHAR[30] NULL," & _
    "schuetze VARCHAR[30] NULL," & _
    "gender BYTE[1] NULL," & _
    "result INT NULL);") <> $SQLITE_OK Then MsgBox(0, 'Fehler', 'Tabelle erstellen fehlgeschlagen.')
    EndFunc

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

    Func _readFromFile() ; Werte eintragen
    _FileReadToArray($file, $aCSV)
    For $i = 1 To UBound($aCSV) -1
    $aSplit = StringSplit($aCSV[$i], ';')
    $strSQL &= "Insert into tblTest values ("
    For $j = 1 To UBound($aSplit) -1
    $strSQL &= "'" & $aSplit[$j] & "',"
    Next
    $strSQL = StringTrimRight($strSQL, 1)
    $strSQL &= ");" & @CRLF
    Next
    If _SQLite_Exec(-1, $strSQL) <> $SQLITE_OK Then MsgBox(0, 'Fehler', 'Einfügen Werte fehlgeschlagen.')
    EndFunc

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

    Func _getGroups() ; Grupenergebnisse
    $strSQL = "SELECT gruppe,SUM(result) FROM [tblTest] GROUP BY gruppe ORDER BY SUM(result) DESC;"
    If _SQLite_GetTable2d (-1, $strSQL, $aResult, $iRows, $iColumns) = $SQLITE_OK Then
    _GetData($ListView1)
    EndIf
    EndFunc

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

    Func _getGroup() ; Ergebnisse nach Gruppen
    $strSQL = "SELECT DISTINCT gruppe FROM [tblTest];"
    If _SQLite_GetTable(-1, $strSQL, $aResult, $iRows, $iColumns) <> $SQLITE_OK Then Return
    Local $array = $aResult
    For $i = 2 To $array[0]
    $strSQL = "SELECT * FROM [tblTest] WHERE gruppe = '" & $array[$i] & "' ORDER BY result DESC;"
    If _SQLite_GetTable2d (-1, $strSQL, $aResult, $iRows, $iColumns) = $SQLITE_OK Then _
    _GetData($ListView2)
    If $i < $array[0] Then GUICtrlCreateListViewItem('=============|=============|============|======|=====', $ListView2)
    Next
    EndFunc

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

    Func _getByGender() ; Ergebnisse nach Geschlecht
    $strSQL = "SELECT DISTINCT gender FROM [tblTest];"
    If _SQLite_GetTable(-1, $strSQL, $aResult, $iRows, $iColumns) <> $SQLITE_OK Then Return
    Local $array = $aResult, $iCount = $iRows
    For $i = 2 To 1 +$iCount
    $strSQL = "SELECT schuetze,gender,result FROM [tblTest] WHERE gender = '" & $array[$i] & "' ORDER BY result DESC;"
    If _SQLite_GetTable2d (-1, $strSQL, $aResult, $iRows, $iColumns) = $SQLITE_OK Then _
    _GetData($ListView3)
    If $i < $iCount+1 Then GUICtrlCreateListViewItem('============|======|=====', $ListView3)
    Next
    EndFunc

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

    Func _GetData(ByRef $ListView) ; schreibe in ListView
    If Not IsArray($aResult) Then Return
    Local $sMsg = ''
    For $i = 1 To UBound($aResult) -1
    For $j = 0 To UBound($aResult,2) -1
    $sMsg &= $aResult[$i][$j] & '|'
    Next
    GUICtrlCreateListViewItem(StringTrimRight($sMsg, 1), $ListView)
    $sMsg = ''
    Next
    $aResult = '' ; Ergebnisarray leeren
    EndFunc

    [/autoit]
  • DockIt

    • BugFix
    • 28. Februar 2009 um 21:02
    Zitat von Jam00

    Jo, ist gut, aber ich habe noch einen kleinen Bug gefunden
    Wenn ich ein Anderes Fenster activiere was über dem "Ich bin Gedockt" Fenster ist und ich dann wieder das Haubfenster activiere wird das "Ich bin Gedockt" nicht wieder in den vordergund geholt!

    It's not a bug - it's a feature. :D Nein, Scherz beiseite. Dieser Workaround bezieht sich rein auf das Docking. Die Fensterverwaltung kannst du natürlich nach eigenem Gusto einbringen.

    Ich hab hier mal ein Bsp., wie das gelöst werden kann:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <Winapi.au3>
    $gui1 = GUICreate("Nummer 1", 300, 300)
    GUICtrlCreateGroup('Dockposition', 40, 40, 220, 220)
    $r1 = GUICtrlCreateRadio('1', 240, 140, 15, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $r2 = GUICtrlCreateRadio('2', 140, 240, 15, 17)
    $r3 = GUICtrlCreateRadio('3', 45, 140, 15, 17)
    $r4 = GUICtrlCreateRadio('4', 140, 50, 15, 17)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    $gui2 = GUICreate("Ich bin gedockt", 200, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)

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

    Global $aDocks[2][4] = [[$gui1,$gui2,1,-1],[$gui2,$gui1,3,-1]]
    ; ['GUI-master','GUI-slave',dockPos,Abstand]
    ; dockPos: 1=rechts, 2=unten, 3=links, 4=oben
    ; Abstand: -1=SysMetrics Fensterrand, alle anderen Werte Pixelabstand zw. Fenstern
    ;=======================================================================================================
    ; Damit zwei Fenster wechselseitig reagieren, müssen beide im Array aufgeführt werden, einmal als Master
    ; und einmal als Slave.
    ; Dabei müssen die entgegengesetzten Flags für die Dockposition vergeben werden (1 u. 3 bzw. 2 u. 4)
    ;=======================================================================================================

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

    GUISetState(@SW_SHOW, $gui2)
    GUISetState(@SW_SHOW, $gui1)

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

    ; WM_MOVE registrieren:
    GUIRegisterMsg($WM_MOVE, "WM_MOVE")
    GUIRegisterMsg($WM_ACTIVATE, "WM_ACTIVATE")

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

    ; Ereignis WM_MOVE auslösen zum erstmaligen Positionieren der Fenster
    _moved()

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    Exit
    Case $r1
    $aDocks[0][2] = 1
    $aDocks[1][2] = 3
    _moved()
    Case $r2
    $aDocks[0][2] = 2
    $aDocks[1][2] = 4
    _moved()
    Case $r3
    $aDocks[0][2] = 3
    $aDocks[1][2] = 1
    _moved()
    Case $r4
    $aDocks[0][2] = 4
    $aDocks[1][2] = 2
    _moved()
    EndSwitch
    WEnd

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

    Func _moved()
    DllCall("User32.dll", "int", "PostMessageA", "hwnd", WinGetHandle($aDocks[0][0]), "int", $WM_MOVE, "int", 0, "int", 0)
    EndFunc

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

    Func WM_MOVE($hWndGUI)
    For $i = 0 To UBound($aDocks) -1
    If WinGetHandle($aDocks[$i][0]) = $hWndGUI Then
    Local $aPos1 = WinGetPos($aDocks[$i][0])
    Local $aPos2 = WinGetPos($aDocks[$i][1]), $iDiff = 0
    If $aDocks[$i][3] = -1 Then
    Local $ret = DllCall("user32.dll", "int", "GetSystemMetrics", "int", 32)
    If IsArray($ret) Then $iDiff = $ret[0]
    Else
    $iDiff = $aDocks[$i][3]
    EndIf
    Switch $aDocks[$i][2]
    Case 1
    WinMove($aDocks[$i][1], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
    Case 2
    WinMove($aDocks[$i][1], '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
    Case 3
    WinMove($aDocks[$i][1], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
    Case 4
    WinMove($aDocks[$i][1], '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
    EndSwitch
    EndIf
    Next
    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func WM_ACTIVATE($hWndGUI)
    If WinGetHandle($aDocks[0][0]) = $hWndGUI Then _
    DllCall("User32.dll", "hwnd", "SetFocus", "hwnd", WinGetHandle($aDocks[0][1]))
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • DockIt

    • BugFix
    • 28. Februar 2009 um 18:55

    Hi,
    hier mal eine Lösung um Fenster aneinander zu docken. Nähere Erläuterungen im Skript.

    Spoiler anzeigen
    [autoit]

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

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

    $gui1 = GUICreate("Nummer 1", 300, 300)
    GUICtrlCreateGroup('Dockposition', 40, 40, 220, 220)
    $r1 = GUICtrlCreateRadio('1', 240, 140, 15, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $r2 = GUICtrlCreateRadio('2', 140, 240, 15, 17)
    $r3 = GUICtrlCreateRadio('3', 45, 140, 15, 17)
    $r4 = GUICtrlCreateRadio('4', 140, 50, 15, 17)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    $gui2 = GUICreate("Ich bin gedockt", 200, 200)

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

    Global $aDocks[2][4] = [[$gui1,$gui2,1,-1],[$gui2,$gui1,3,-1]]
    ; ['GUI-master','GUI-slave',dockPos,Abstand]
    ; dockPos: 1=rechts, 2=unten, 3=links, 4=oben
    ; Abstand: -1=SysMetrics Fensterrand, alle anderen Werte Pixelabstand zw. Fenstern
    ;=======================================================================================================
    ; Damit zwei Fenster wechselseitig reagieren, müssen beide im Array aufgeführt werden, einmal als Master
    ; und einmal als Slave.
    ; Dabei müssen die entgegengesetzten Flags für die Dockposition vergeben werden (1 u. 3 bzw. 2 u. 4)
    ;=======================================================================================================

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

    GUISetState(@SW_SHOW, $gui2)
    GUISetState(@SW_SHOW, $gui1)

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

    ; WM_MOVE registrieren:
    GUIRegisterMsg($WM_MOVE, "WM_MOVE")

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

    ; Ereignis WM_MOVE auslösen zum erstmaligen Positionieren der Fenster
    _moved()

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    Exit
    Case $r1
    $aDocks[0][2] = 1
    $aDocks[1][2] = 3
    _moved()
    Case $r2
    $aDocks[0][2] = 2
    $aDocks[1][2] = 4
    _moved()
    Case $r3
    $aDocks[0][2] = 3
    $aDocks[1][2] = 1
    _moved()
    Case $r4
    $aDocks[0][2] = 4
    $aDocks[1][2] = 2
    _moved()
    EndSwitch
    WEnd

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

    Func _moved()
    DllCall("User32.dll", "int", "PostMessageA", "hwnd", WinGetHandle($aDocks[0][0]), "int", $WM_MOVE, "int", 0, "int", 0)
    EndFunc

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

    Func WM_MOVE($hWndGUI)
    For $i = 0 To UBound($aDocks) -1
    If WinGetHandle($aDocks[$i][0]) = $hWndGUI Then
    Local $aPos1 = WinGetPos($aDocks[$i][0])
    Local $aPos2 = WinGetPos($aDocks[$i][1]), $iDiff = 0
    If $aDocks[$i][3] = -1 Then
    Local $ret = DllCall("user32.dll", "int", "GetSystemMetrics", "int", 32)
    If IsArray($ret) Then $iDiff = $ret[0]
    Else
    $iDiff = $aDocks[$i][3]
    EndIf
    Switch $aDocks[$i][2]
    Case 1
    WinMove($aDocks[$i][1], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
    Case 2
    WinMove($aDocks[$i][1], '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
    Case 3
    WinMove($aDocks[$i][1], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
    Case 4
    WinMove($aDocks[$i][1], '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
    EndSwitch
    EndIf
    Next
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Edit 26.05.2009
    Hier mal noch ein Beispiel zum Andocken eines Fensters an den Bildschirmrand.
    Einstellbar ist der Fangbereich, indem das Fenster "gecatcht" wird und der Abstand der Fensterränder zum Desktoprand.

    Spoiler anzeigen
    [autoit]

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

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

    Global $CatchWidth = 70 ; Pixelbereich indem das Fenster gefangen wird
    Global $BorderDiff = 2 ; Pixelabstand zum Rand

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

    Global $gui = GUICreate("Dock on Border", 300, 300)
    GUISetState(@SW_SHOW, $gui)

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

    ; WM_MOVE registrieren:
    GUIRegisterMsg($WM_MOVE, "WM_MOVE")

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Func WM_MOVE($hWndGUI)
    If Not(WinGetHandle($gui) = $hWndGUI) Then Return $GUI_RUNDEFMSG
    Local $aPos = WinGetPos($gui)
    Local $Catch_Left = $CatchWidth, $Catch_Right = @DesktopWidth - $CatchWidth
    Local $Catch_Top = $CatchWidth, $Catch_Bottom = @DesktopHeight - $CatchWidth
    Select
    Case $aPos[0] <= $Catch_Left
    If $aPos[1] <= $Catch_Top Then
    WinMove($gui, '', $BorderDiff, $BorderDiff)
    ElseIf $aPos[1] + $aPos[3] >= $Catch_Bottom Then
    WinMove($gui, '', $BorderDiff, @DesktopHeight - $BorderDiff - $aPos[3])
    Else
    WinMove($gui, '', $BorderDiff, $aPos[1])
    EndIf
    Case $aPos[0] + $aPos[2] >= $Catch_Right
    If $aPos[1] <= $Catch_Top Then
    WinMove($gui, '', @DesktopWidth - $BorderDiff - $aPos[2], $BorderDiff)
    ElseIf $aPos[1] + $aPos[3] >= $Catch_Bottom Then
    WinMove($gui, '', @DesktopWidth - $BorderDiff - $aPos[2], @DesktopHeight - $BorderDiff - $aPos[3])
    Else
    WinMove($gui, '', @DesktopWidth - $BorderDiff - $aPos[2], $aPos[1])
    EndIf
    Case $aPos[1] <= $Catch_Top
    If $aPos[0] <= $Catch_Left Then
    WinMove($gui, '', $BorderDiff, $BorderDiff)
    ElseIf $aPos[0] + $aPos[2] >= $Catch_Right Then
    WinMove($gui, '', @DesktopWidth - $BorderDiff - $aPos[2], $BorderDiff)
    Else
    WinMove($gui, '', $aPos[0], $BorderDiff)
    EndIf
    Case $aPos[1] + $aPos[3] >= $Catch_Bottom
    If $aPos[0] <= $Catch_Left Then
    WinMove($gui, '', $BorderDiff, @DesktopHeight - $BorderDiff - $aPos[3])
    ElseIf $aPos[0] + $aPos[2] >= $Catch_Right Then
    WinMove($gui, '', @DesktopWidth - $BorderDiff - $aPos[2], @DesktopHeight - $BorderDiff - $aPos[3])
    Else
    WinMove($gui, '', $aPos[0], @DesktopHeight - $BorderDiff - $aPos[3])
    EndIf
    EndSelect
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_MOVE

    [/autoit]

    Edit 14.10.2010
    Und hier mal noch ein Bsp. um mehrere Childs an eine Main-GUI zu kletten.

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    $gui1 = GUICreate("Nummer 1", 300, 300)
    $gui2 = GUICreate("Ich bin gedockt RECHTS", 200, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)
    $gui3 = GUICreate("Ich bin gedockt LINKS", 200, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)
    $gui4 = GUICreate("Ich bin gedockt UNTEN", 200, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)

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

    Global $aDocks[5][2] = [[$gui1,0],[$gui2,1],[$gui3,3],[$gui4,2],[-1]]
    ; [n][GUI,DockPos] - letztes Arrayelement ([Ubound($aDocks)-1][0]) speichert den Abstand
    ; dockPos: 1=rechts, 2=unten, 3=links, 4=oben
    ; Abstand: -1=SysMetrics Fensterrand, alle anderen Werte Pixelabstand zw. Fenstern

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

    GUISetState(@SW_SHOW, $gui4)
    GUISetState(@SW_SHOW, $gui3)
    GUISetState(@SW_SHOW, $gui2)
    GUISetState(@SW_SHOW, $gui1)

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

    ;== WM_MOVE registrieren:
    GUIRegisterMsg($WM_MOVE, "WM_MOVE")

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

    ;== Fenster anordnen und Ereignis WM_MOVE auslösen zum erstmaligen Positionieren der Fenster
    _ArrangeGUI()
    _moved()

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Func _ArrangeGUI($Index_Master=0)
    Local $iDiff, $aPos1, $aPos2
    If $aDocks[UBound($aDocks)-1][0] = -1 Then
    Local $ret = DllCall("user32.dll", "int", "GetSystemMetrics", "int", 32)
    If IsArray($ret) Then $iDiff = $ret[0]
    Else
    $iDiff = $aDocks[UBound($aDocks)-1][0]
    EndIf
    If $Index_Master = 0 Then ; === Main-GUI bewegt
    $aPos1 = WinGetPos(WinGetHandle($aDocks[0][0]))
    For $i = 1 To UBound($aDocks) -2
    $aPos2 = WinGetPos(WinGetHandle($aDocks[$i][0]))
    Switch $aDocks[$i][1]
    Case 1
    WinMove($aDocks[$i][0], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
    Case 2
    WinMove($aDocks[$i][0], '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
    Case 3
    WinMove($aDocks[$i][0], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
    Case 4
    WinMove($aDocks[$i][0], '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
    EndSwitch
    Next
    Else ; === Child bewegt ==> zuerst Main-GUI nachrücken
    $aPos1 = WinGetPos(WinGetHandle($aDocks[$Index_Master][0]))
    $aPos2 = WinGetPos(WinGetHandle($aDocks[0][0]))
    Switch $aDocks[$Index_Master][1] ; Positionsflag entgegengesetzt behandeln
    Case 3
    WinMove($aDocks[0][0], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
    Case 4
    WinMove($aDocks[0][0], '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
    Case 1
    WinMove($aDocks[0][0], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
    Case 2
    WinMove($aDocks[0][0], '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
    EndSwitch
    _moved() ; === $WM_MOVE senden um andere Childs auszurichten
    EndIf
    EndFunc

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

    Func _moved()
    DllCall("User32.dll", "int", "PostMessageA", "hwnd", $aDocks[0][0], "int", $WM_MOVE, "int", 0, "int", 0)
    EndFunc

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

    Func WM_MOVE($hWndGUI)
    For $i = 0 To UBound($aDocks) -2
    If $hWndGUI = WinGetHandle($aDocks[$i][0]) Then Return _ArrangeGUI($i)
    Next
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Dateien

    GUI_Dock_mehrere.au3 2,93 kB – 715 Downloads
  • zu OPC Server verbinden

    • BugFix
    • 28. Februar 2009 um 18:05

    Probier mal so:

    [autoit]

    $oOpc = ObjCreate("Graybox.OPC.DAWrapper") ; Referenz auf das Objekt
    $connect = $oOpc.Connect("Matrikon.OPC.Simulation.1","localhost") ; Referenz auf Connect - mit dieser weiterarbeiten
    $colOPCGroups = $connect.OPCGroups ; Liefert die Collection OPCGroups
    For $group In $colOPCGroups
    ConsoleWrite($group.Name & @CRLF) ; probier mal, was hier ausgegeben werden kann: .Item oder nur $group
    Next

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

    $PublicGroupNames = $connect.PublicGroupNames ; <=== liefert ein Array!!
    ; so auslesen:
    For $group In $PublicGroupNames
    ConsoleWrite($group & @CRLF)
    Next

    [/autoit]
  • zu OPC Server verbinden

    • BugFix
    • 28. Februar 2009 um 15:34
    Zitat von Sayen

    PS: Wo finde ich die Datenbak Hilfe :?:


    Guckst du: http://www.autoit.de/index.php?page=Board&boardID=39

  • Koda in AutoIt?

    • BugFix
    • 28. Februar 2009 um 15:04
    Zitat von MatthiasG.

    Nur bei Vista ist es so, dass man für jeden Fensterrand 5px draufaddieren muss, damit die nicht überlagert sind.

    Das stellt doch kein Problem dar. Du kannst mit _WinAPI_GetSystemMetrics() die Stärke des Randes ermitteln und das generell als Variable mit einbringen.

    Deine andren Fragen... mal schauen ;)

  • Koda in AutoIt?

    • BugFix
    • 28. Februar 2009 um 14:51

    Ich hab dir mal ein Bsp. mit Andocken (rechts, links, unten oder oben) erstellt:

    [autoit]

    #include <WindowsConstants.au3>
    $gui1 = GUICreate("Nummer 1", 300, 300, 100, 100)
    $gui2 = GUICreate("Ich folge", 200, 200)

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

    _DockIt($gui1, $gui2)
    GUISetState(@SW_SHOW, $gui2)
    GUISetState(@SW_SHOW, $gui1)

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

    GUIRegisterMsg($WM_MOVE, "WM_MOVE")

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

    Do
    Until GUIGetMsg() = -3

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

    Func _DockIt($Master, $Slave, $iDock=1, $iDiff=2) ; $iDock: 1=rechts, 2=unten, 3=links, 4=oben; $iDiff=Fensterabstand
    Local $aPos1 = WinGetPos($Master)
    Local $aPos2 = WinGetPos($Slave)
    Switch $iDock
    Case 1
    WinMove($Slave, '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
    Case 2
    WinMove($Slave, '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
    Case 3
    WinMove($Slave, '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
    Case 4
    WinMove($Slave, '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
    EndSwitch
    EndFunc

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

    Func WM_MOVE($hWndGUI)
    If $hWndGUI = WinGetHandle($gui1) Then _DockIt($gui1, $gui2)
    EndFunc

    [/autoit]


    Edit:
    Oder so sind beide Fenster gekoppelt - egal welches du bewegst, mußt nur den entgegengesetzten Dockpunkt übergeben:

    [autoit]

    Func WM_MOVE($hWndGUI)
    Switch $hWndGUI
    Case WinGetHandle($gui1)
    _DockIt($gui1, $gui2)
    Case WinGetHandle($gui2)
    _DockIt($gui2, $gui1, 3)
    EndSwitch
    EndFunc

    [/autoit]

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™