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

  • Anfängerfrage

    • BugFix
    • 18. Oktober 2010 um 10:45
    Zitat von Cyberdyne

    Zu Guter letzt würde ich auch ein Sleep von ca. 30 Sekunden vor dem nächsten "run" Befehle einbauen, damit die vorherige Installation noch Zeit hat sich zu beenden.


    Da ist es m.M. nach komfortabler, beim Starten der Installation die PID aufzufangen (oder wenn man den Prozeßnamen kennt reicht auch der) und eine Schleife anzuhängen:

    [autoit]

    $timeOut = 30000 ; zur Sicherheit ein TimeOut definieren um Endlosschleife bei Installproblem zu verhindern
    $t = TimerInit()
    Do
    Sleep(100)
    Until Not ProcessExists('PID oder Prozeßname') Or TimerDiff($t) >= $timeOut

    [/autoit]
  • Welche Schleife muss ich hier nehmen ?

    • BugFix
    • 18. Oktober 2010 um 10:35

    Beim Kopieren EINER Datei ist es nicht sehr sinnvoll eine Progressbaranzeige laufen zu lassen. Es ist ziemlich schwierig während des Kopiervorganges die bereits übertragene Datenmenge auszulesen und diesen Fortschritt in einem Progress anzuzeigen.
    Bei mehreren Dateien ist das kein Thema: entweder Fortschritt im Verhältnis zur Anzahl Dateien (10 Dateien, jede =10%) oder prozentualer Anteil des Datenvolumens einer Datei am Gesamtkopiervolumen.
    Bei einer Datei kannst du z.B. die von Windows verwendete Copy-Animation einblenden oder z.B. einfach eine Swipbar (hin- u. herlaufender Progress).

  • externe Variablen Übergabe

    • BugFix
    • 18. Oktober 2010 um 10:15
    Zitat von HassanMullah

    Bei AutoIT habe ich mit $Cmdline[0] die Anzahl der Variablen und ab $Cmdline[1] die Werte.

    Da ich mich mit Arrays noch nicht auskenne - und mir auch momentan die Zeit zum Einarbeiten fehlt - suche ich hier eine ähnliche Möglichkeit wie oben beschrieben.

    Gibt es sowas mit AutoIT ??


    Einfach in SciTE eintippen: cmdlineswitch und Leertaste, dann erhältst du folgenden, fertigen Skriptblock

    Spoiler anzeigen
    [autoit]

    #region - CmdlineSwitch
    If $CMDLINE[0] Then
    For $i = 1 To $CMDLINE[0]
    Switch $CMDLINE[$i]
    Case '/?'
    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 '/extract'
    FileInstall('?', @ScriptDir & '\')
    Exit
    Case '/x'
    Case '/x'
    Case '/x'
    Case '/x'
    Case Else
    MsgBox(0x40000, 'Incorrect switch used', _
    'Command used:' & @CRLF & $CMDLINERAW & @CRLF & _
    @CRLF & 'Use /? for the switches available.')
    Exit
    EndSwitch
    Next
    EndIf
    #endregion

    [/autoit]

    Kannst du dann nach deinen Parametern anpassen.

    Wegen der Übergabe zurück aus AutoIt: Ich finde INI sehr praktisch und verwende diese fast ausschließlich. Es scheint sich irgendwie der Gedanke breit zu machen, INIs wären uncool oder so. :wacko: Kann ich nicht nachvollziehen. Sofern die zu speichernde Datenmenge nicht das Limit einer INI sprengt, ist diese eine super Sache.

  • String to Comand

    • BugFix
    • 17. Oktober 2010 um 21:32

    Deine Frage ist sooo allgemein, da kann man alles und nichts zu sagen.
    Werd mal konkret:
    - Ausgangslage
    - was soll wie passieren
    - gewünschter Endzustand

  • nerviges UAC wegbekommen

    • BugFix
    • 17. Oktober 2010 um 20:46

    Als du editiert hattest, war gerade ein Lag im Forum - deshalb war dein Edit noch nicht zu sehen. ;)

  • nerviges UAC wegbekommen

    • BugFix
    • 17. Oktober 2010 um 18:00

    Hast du überhaupt Google befragt? Eher nicht. Denn der erste gezeigte Link liefert die Lösung,
    http://www.win-tipps-tweaks.de/cms/windows-7-…ng-steuern.html

  • Registry-Funktionen per Objekt

    • BugFix
    • 17. Oktober 2010 um 17:52
    Zitat von BuFF

    also ich wäre für ein beispiel, welches ich verstehe einfach ein praktischen beispiel,
    wie diese funktion die Namen in einem array speichert, dann sollte ich das auch verstehen :/


    Hast du überhaupt angeschaut, was ich gepostet habe? Ist doch folgendes Bsp. dabei:

    [autoit]

    $ar = _GetRegValues('HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\Autoit')
    If IsArray($ar) Then
    _ArrayDisplay($ar)
    Else
    MsgBox(0, '', 'Fehler')
    EndIf

    [/autoit]

    Was soll man da noch groß erklären? :wacko:
    Schlüssel übergeben, Array wird zurückgegeben, das wars.

  • Registry-Funktionen per Objekt

    • BugFix
    • 17. Oktober 2010 um 17:17

    Und wo bitte ist jetzt hier eine Frage? ?(

  • GUIDocking -UDF

    • BugFix
    • 15. Oktober 2010 um 18:07
    Zitat von Raupi

    Du solltest die WInProc bei Scriptende wieder in den Urzustand zurückversetzen.


    Danke für den Tipp - aber das passiert doch mit der Funktion _GUIDocking_ShutDown(). ;)
    Für Win7 / Vista habe ich keine Möglichkeiten zu testen.

  • GUIDocking -UDF

    • BugFix
    • 15. Oktober 2010 um 13:33

    In Erweiterung meiner Bsp. hier, habe ich nun eine Funktionssammlung erstellt um GUI beliebig aneinander zu docken.
    Die anzudockenden Fenster lassen sich rechts, unten, links oder oben platzieren und jeweils links-(bzw.oben)bündig, zentriert oder rechts-(bzw. unten)bündig ausrichten.
    Es können jederzeit Fenster wieder abgedockt oder deren Ausrichtung geändert werden.

    Funktionsübersicht
    Code
    ===== Funktionsübersicht =====
    _GUIDock_StartUp($hWnd)
    	Initialisiert notwendige Variablen
    	$hWnd bekommt Status MainWindow
    	registrieren der ShutDown-Funktion
    
    
    _GUIDock_DockWindow($vWnd [, $vAlign])
    	Einzelnes (oder Array mit mehreren) GUI-Hwnd andocken
    	Werden Anordnung und Ausrichtung NICHT in $vAlign übergeben, muß dieses anschließend mit _GUIDock_SetAlignment ausgeführt werden
    	Bei Übergabe eines einzelnen Hwnd ist $vAlign vorbelegt mit Rechts-Oben
    
    
    _GUIDock_UnDockWindow($vWnd)
    	Einzelnes (oder Array mit mehreren) GUI-Hwnd abdocken
    
    
    _GUIDock_SetDistance($iDistance=-1)
    	Abstand zwischen Main-GUI und gedockten Fenstern.
    	Standard ist die Borderbreite aus den Systemmetrics
    
    
    _GUIDock_SetAlignment($hWnd, $iAlign)
    	Fensteranordnung + Ausrichtung durch BitOr-Verknüpfung folgender Konstanten:
    
    
    	Andocken rechts	$_GUI_DOCK_RIGHT
    	Andocken unten	$_GUI_DOCK_BOTTOM
    	Andocken links	$_GUI_DOCK_LEFT
    	Andocken oben	$_GUI_DOCK_TOP
    
    
    	Ausrichten links oder oben		$_GUI_ALIGN_LEFTorTOP
    	Ausrichten zentriert			$_GUI_ALIGN_CENTER
    	Ausrichten rechts oder unten	$_GUI_ALIGN_RIGHTorBOTTOM
    Alles anzeigen
    GUIDocking.au3
    [autoit]

    #cs
    ===== Funktionsübersicht =====
    _GUIDock_StartUp($hWnd)
    Initialisiert notwendige Variablen
    $hWnd bekommt Status MainWindow
    registriert ShutDown-Funktion

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

    _GUIDock_DockWindow($vWnd [, $vAlign])
    Einzelnes (oder Array mit mehreren) GUI-Hwnd andocken
    Werden Anordnung und Ausrichtung NICHT in $vAlign übergeben, muß dieses anschließend mit _GUIDock_SetAlignment ausgeführt werden
    Bei Übergabe eines einzelnen Hwnd ist $vAlign vorbelegt mit Rechts-Oben

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

    _GUIDock_UnDockWindow($vWnd)
    Einzelnes (oder Array mit mehreren) GUI-Hwnd abdocken

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

    _GUIDock_SetDistance($iDistance=-1)
    Abstand zwischen Main-GUI und gedockten Fenstern.
    Standard ist die Borderbreite aus den Systemmetrics

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

    _GUIDock_SetAlignment($hWnd, $iAlign)
    Fensteranordnung + Ausrichtung durch BitOr-Verknüpfung folgender Konstanten:

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

    Andocken rechts $_GUI_DOCK_RIGHT
    Andocken unten $_GUI_DOCK_BOTTOM
    Andocken links $_GUI_DOCK_LEFT
    Andocken oben $_GUI_DOCK_TOP

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

    Ausrichten links oder oben $_GUI_ALIGN_LEFTorTOP
    Ausrichten zentriert $_GUI_ALIGN_CENTER
    Ausrichten rechts oder unten $_GUI_ALIGN_RIGHTorBOTTOM
    #ce
    ;===================================================================================================
    ; Version 1.1 - 15.10.2010 ;
    ;===================================================================================================

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

    #include-once
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <Constants.au3>
    #include <WinAPI.au3>

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

    #region - Deklarationen
    Global Const $_GUI_DOCK_RIGHT = 1
    Global Const $_GUI_DOCK_BOTTOM = 2
    Global Const $_GUI_DOCK_LEFT = 4
    Global Const $_GUI_DOCK_TOP = 8
    Global Const $_GUI_ALIGN_LEFTorTOP = 16
    Global Const $_GUI_ALIGN_CENTER = 32
    Global Const $_GUI_ALIGN_RIGHTorBOTTOM = 64

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

    Global $ahProcHook[1], $aGUIDocks[2][2] = [[0,0],[-1]], $iDockDistance
    Global $hProcDock = DllCallbackRegister('__WndProc', 'ptr', 'hwnd;uint;wparam;lparam')
    #endregion

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

    #region - UDF
    ;===============================================================================
    ; Function Name: _GUIDock_StartUp($hWnd)
    ; Description: Initialisiert notwendige Variablen, $hWnd bekommt Status MainWindow
    ; Parameter(s): $hWnd Fenster an dem die anderen angedockt werden
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUIDock_StartUp($hWnd)
    Local $ret = DllCall("user32.dll", "int", "GetSystemMetrics", "int", 32)
    If IsArray($ret) Then $iDockDistance = $ret[0]
    $aGUIDocks[0][0] = $hWnd
    OnAutoItExitRegister('__GUIDock_ShutDown')
    ; Array-Hook erstellen! => für jedes Fenster ein Hook
    $ahProcHook[0] = _WinAPI_SetWindowLong($hWnd, $GWL_WNDPROC, DllCallbackGetPtr($hProcDock))
    EndFunc ;==>_GUIDock_StartUp

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

    ;===============================================================================
    ; Function Name: _GUIDock_DockWindow($vWnd, $vAlign=Default)
    ; Description: Einzelnes oder mehrere GUI andocken (optional gleich ausrichten)
    ; Parameter(s): $vWnd Einzelnes (oder Array mit mehreren) GUI-Hwnd
    ; optional: $vAlign Einzelner (oder Array mit mehreren) BitOr -Wert für Anordnung+Ausrichtung
    ; Bei Einzelübergabe ist er standardmäßig auf Rechts-Oben gesetzt
    ; Wenn nicht übergeben, zwingend _GUIDock_SetAlignment ausführen
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUIDock_DockWindow($vWnd, $vAlign=Default)
    If IsKeyword($vAlign) Then $vAlign = BitOR($_GUI_DOCK_RIGHT,$_GUI_ALIGN_LEFTorTOP)
    If Not IsArray($vWnd) Then
    Local $tmpArray[1] = [$vWnd]
    $vWnd = $tmpArray
    EndIf
    If Not IsArray($vAlign) Then
    Local $tmpArray[1] = [$vAlign]
    $vAlign = $tmpArray
    EndIf
    If UBound($vAlign) < UBound($vWnd) Then ReDim $vAlign[UBound($vWnd)]
    Local $tmpDist = $aGUIDocks[UBound($aGUIDocks)-1][0]
    Local $iUb = UBound($aGUIDocks), $j = 0
    ReDim $aGUIDocks[$iUb+UBound($vWnd)][2]
    ReDim $ahProcHook[UBound($ahProcHook)+UBound($vWnd)]
    For $i = $iUb-1 To UBound($aGUIDocks) -2
    $aGUIDocks[$i][0] = $vWnd[$j]
    $aGUIDocks[$i][1] = $vAlign[$j]
    $ahProcHook[$i] = _WinAPI_SetWindowLong($vWnd[$j], $GWL_WNDPROC, DllCallbackGetPtr($hProcDock))
    $j += 1
    Next
    $aGUIDocks[UBound($aGUIDocks)-1][0] = $tmpDist
    __moved()
    EndFunc ;==>_GUIDock_DockWindow

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

    ;===============================================================================
    ; Function Name: _GUIDock_UnDockWindow($vWnd)
    ; Description: Einzelnes oder mehrere GUI abdocken
    ; Parameter(s): $vWnd Einzelnes (oder Array mit mehreren) GUI-Hwnd
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUIDock_UnDockWindow($vWnd)
    If Not IsArray($vWnd) Then
    Local $tmpArray[1] = [$vWnd]
    $vWnd = $tmpArray
    EndIf
    Local $index
    For $i = 0 To UBound($vWnd) -1
    $index = _ArraySearch($aGUIDocks, $vWnd[$i], 1, UBound($aGUIDocks)-2)
    If @error Then ContinueLoop
    _WinAPI_SetWindowLong($aGUIDocks[$index][0], $GWL_WNDPROC, $ahProcHook[$index]) ; UnHook GUI
    _ArrayDelete($ahProcHook, $index) ; Hook-hwnd löschen
    _ArrayDelete($aGUIDocks, $index) ; GUI-hwnd löschen
    Next
    EndFunc ;==>_GUIDock_UnDockWindow

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

    ;===============================================================================
    ; Function Name: _GUIDock_SetDistance($iDistance=-1)
    ; Description: Abstand zwischen Main-GUI und gedockten Fenstern setzen
    ; Parameter(s): $iDistance Abstand in Pixel, Standard ist die Borderbreite aus den Systemmetrics
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUIDock_SetDistance($iDistance=-1)
    $aGUIDocks[UBound($aGUIDocks)-1][0] = $iDistance
    EndFunc ;==>_GUIDock_SetDistance

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

    ;===============================================================================
    ; Function Name: _GUIDock_SetAlignment($hWnd, $iAlign=Default)
    ; Description: Anordnung + Ausrichtung des gedockten Fensters zur Main-GUI
    ; Parameter(s): $hWnd das gedockte Fenster
    ; $iAlign BitOr-Verknüpfung aus folgenden Konstanten:
    ; Andocken rechts $_GUI_DOCK_RIGHT
    ; Andocken unten $_GUI_DOCK_BOTTOM
    ; Andocken links $_GUI_DOCK_LEFT
    ; Andocken oben $_GUI_DOCK_TOP
    ;
    ; Ausrichten links oder oben $_GUI_ALIGN_LEFTorTOP
    ; Ausrichten zentriert $_GUI_ALIGN_CENTER
    ; Ausrichten rechts oder unten $_GUI_ALIGN_RIGHTorBOTTOM
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUIDock_SetAlignment($hWnd, $iAlign=Default)
    If IsKeyword($iAlign) Then $iAlign = BitOR($_GUI_DOCK_RIGHT,$_GUI_ALIGN_LEFTorTOP)
    For $i = 1 To UBound($aGUIDocks) -2
    If $hWnd = $aGUIDocks[$i][0] Then
    $aGUIDocks[$i][1] = $iAlign
    ExitLoop
    EndIf
    Next
    __moved()
    EndFunc
    #endregion

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

    #region - interne Funktionen
    Func __WndProc($hWnd, $iMsg, $iwParam, $ilParam)
    Local $indexWnd
    For $i = 0 To UBound($aGUIDocks) -2
    If $hWnd = $aGUIDocks[$i][0] Then
    $indexWnd = $i
    ExitLoop
    EndIf
    Next
    If $iMsg <> $WM_MOVE Then Return _WinAPI_CallWindowProc($ahProcHook[$indexWnd], $hWnd, $iMsg, $iwParam, $ilParam)
    __ArrangeGUI($indexWnd)
    Return _WinAPI_CallWindowProc($ahProcHook[$indexWnd], $hWnd, $iMsg, $iwParam, $ilParam)
    EndFunc ;==>__WndProc

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

    Func __GUIDock_ShutDown()
    For $i = 0 To UBound($aGUIDocks) -2
    For $j = 0 To UBound($ahProcHook) -1
    _WinAPI_SetWindowLong($aGUIDocks[$i][0], $GWL_WNDPROC, $ahProcHook[$j])
    Next
    Next
    EndFunc ;==>__GUIDock_ShutDown

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

    Func __ArrangeGUI($Index_Master=0)
    Local $iDiff, $aPos1, $aPos2
    If $aGUIDocks[UBound($aGUIDocks)-1][0] = -1 Then
    $iDiff = $iDockDistance
    Else
    $iDiff = $aGUIDocks[UBound($aGUIDocks)-1][0]
    EndIf
    If $Index_Master = 0 Then ; === Main-GUI bewegt
    ;~ $aPos1 = WinGetPos(WinGetHandle($aGUIDocks[0][0]))
    $aPos1 = WinGetPos($aGUIDocks[0][0])
    For $i = 1 To UBound($aGUIDocks) -2
    $aPos2 = WinGetPos(WinGetHandle($aGUIDocks[$i][0]))
    Select
    Case BitAND($aGUIDocks[$i][1], $_GUI_DOCK_RIGHT)
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_LEFTorTOP) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_CENTER) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1]+($aPos1[3]-$aPos2[3])/2)
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_RIGHTorBOTTOM) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1]+$aPos1[3]-$aPos2[3])
    Case BitAND($aGUIDocks[$i][1], $_GUI_DOCK_BOTTOM)
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_LEFTorTOP) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_CENTER) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]+($aPos1[2]-$aPos2[2])/2, $aPos1[1]+$aPos1[3]+$iDiff)
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_RIGHTorBOTTOM) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]+$aPos1[2]-$aPos2[2], $aPos1[1]+$aPos1[3]+$iDiff)
    Case BitAND($aGUIDocks[$i][1], $_GUI_DOCK_LEFT)
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_LEFTorTOP) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_CENTER) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1]+($aPos1[3]-$aPos2[3])/2)
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_RIGHTorBOTTOM) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1]+$aPos1[3]-$aPos2[3])
    Case BitAND($aGUIDocks[$i][1], $_GUI_DOCK_TOP)
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_LEFTorTOP) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_CENTER) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]+($aPos1[2]-$aPos2[2])/2, $aPos1[1]-$iDiff-$aPos2[3])
    If BitAND($aGUIDocks[$i][1], $_GUI_ALIGN_RIGHTorBOTTOM) Then WinMove($aGUIDocks[$i][0], '', $aPos1[0]+$aPos1[2]-$aPos2[2], $aPos1[1]-$iDiff-$aPos2[3])
    EndSelect
    Next
    Else ; === Child bewegt ==> zuerst Main-GUI nachrücken
    $aPos1 = WinGetPos(WinGetHandle($aGUIDocks[$Index_Master][0]))
    ;~ $aPos2 = WinGetPos(WinGetHandle($aGUIDocks[0][0]))
    $aPos2 = WinGetPos($aGUIDocks[0][0])
    Select
    Case BitAND($aGUIDocks[$Index_Master][1], $_GUI_DOCK_LEFT)
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_LEFTorTOP) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_CENTER) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1]+($aPos1[3]-$aPos2[3])/2)
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_RIGHTorBOTTOM) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1]+$aPos1[3]-$aPos2[3])
    Case BitAND($aGUIDocks[$Index_Master][1], $_GUI_DOCK_TOP)
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_LEFTorTOP) Then WinMove($aGUIDocks[0][0], '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_CENTER) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]+($aPos1[2]-$aPos2[2])/2, $aPos1[1]+$aPos1[3]+$iDiff)
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_RIGHTorBOTTOM) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]+$aPos1[2]-$aPos2[2], $aPos1[1]+$aPos1[3]+$iDiff)
    Case BitAND($aGUIDocks[$Index_Master][1], $_GUI_DOCK_RIGHT)
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_LEFTorTOP) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_CENTER) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1]+($aPos1[3]-$aPos2[3])/2)
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_RIGHTorBOTTOM) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1]+$aPos1[3]-$aPos2[3])
    Case BitAND($aGUIDocks[$Index_Master][1], $_GUI_DOCK_BOTTOM)
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_LEFTorTOP) Then WinMove($aGUIDocks[0][0], '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_CENTER) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]+($aPos1[2]-$aPos2[2])/2, $aPos1[1]-$iDiff-$aPos2[3])
    If BitAND($aGUIDocks[$Index_Master][1], $_GUI_ALIGN_RIGHTorBOTTOM) Then WinMove($aGUIDocks[0][0], '', $aPos1[0]+$aPos1[2]-$aPos2[2], $aPos1[1]-$iDiff-$aPos2[3])
    EndSelect
    __moved() ; === $WM_MOVE senden um andere Childs auszurichten
    EndIf
    EndFunc

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

    Func __moved()
    DllCall("User32.dll", "int", "PostMessageA", "hwnd", $aGUIDocks[0][0], "int", $WM_MOVE, "int", 0, "int", 0)
    EndFunc
    #endregion

    [/autoit]
    Beispiel
    [autoit]

    #cs
    ===== Funktionsübersicht =====
    _GUIDock_StartUp($hWnd)
    Initialisiert notwendige Variablen
    $hWnd bekommt Status MainWindow
    registriert ShutDown-Funktion

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

    _GUIDock_DockWindow($vWnd [, $vAlign])
    Einzelnes (oder Array mit mehreren) GUI-Hwnd andocken
    Werden Anordnung und Ausrichtung NICHT in $vAlign übergeben, muß dieses anschließend mit _GUIDock_SetAlignment ausgeführt werden
    Bei Übergabe eines einzelnen Hwnd ist $vAlign vorbelegt mit Rechts-Oben

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

    _GUIDock_UnDockWindow($vWnd)
    Einzelnes (oder Array mit mehreren) GUI-Hwnd abdocken

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

    _GUIDock_SetDistance($iDistance=-1)
    Abstand zwischen Main-GUI und gedockten Fenstern.
    Standard ist die Borderbreite aus den Systemmetrics

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

    _GUIDock_SetAlignment($hWnd, $iAlign)
    Fensteranordnung + Ausrichtung durch BitOr-Verknüpfung folgender Konstanten:

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

    Andocken rechts $_GUI_DOCK_RIGHT
    Andocken unten $_GUI_DOCK_BOTTOM
    Andocken links $_GUI_DOCK_LEFT
    Andocken oben $_GUI_DOCK_TOP

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

    Ausrichten links oder oben $_GUI_ALIGN_LEFTorTOP
    Ausrichten zentriert $_GUI_ALIGN_CENTER
    Ausrichten rechts oder unten $_GUI_ALIGN_RIGHTorBOTTOM
    #ce

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

    #include 'GUIDocking.au3'
    #include <GUIConstantsEx.au3>

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

    $gui1 = GUICreate("Nummer 1", 300, 300)
    $btUndock = GUICtrlCreateButton('UnDock GUI UNTEN', 50, 50, 200, 20)
    $btRedock = GUICtrlCreateButton('ReDock GUI UNTEN', 50, 90, 200, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $gui2 = GUICreate("Ich bin gedockt RECHTS-UNTEN", 200, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)
    $gui3 = GUICreate("Ich bin gedockt LINKS-OBEN", 200, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)
    $gui4 = GUICreate("Ich bin gedockt UNTEN-LINKS", 400, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)

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

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

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

    ; === Docking starten mit Übergabe der Main-GUI
    _GUIDock_StartUp($gui1)

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

    ; === Array mit zu dockenden GUI erstellen
    Local $aGUI[3] = [$gui2,$gui3,$gui4]

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

    ; === Array mit Kombination Dockposition/-ausrichtung je GUI
    Local $aAlign[3] = [BitOR($_GUI_DOCK_RIGHT,$_GUI_ALIGN_RIGHTorBOTTOM), _
    BitOR($_GUI_DOCK_LEFT,$_GUI_ALIGN_LEFTorTOP), _
    BitOR($_GUI_DOCK_BOTTOM,$_GUI_ALIGN_LEFTorTOP)]

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

    ; === Andocken der Fenster und gleichzeitiges Ausrichten
    _GUIDock_DockWindow($aGUI, $aAlign)

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

    ; === oder erst nur GUI's docken und dann einzeln ausrichten:
    ;~ _GUIDock_DockWindow($aGUI)
    ;~ _GUIDock_SetAlignment($gui2, BitOR($_GUI_DOCK_RIGHT,$_GUI_ALIGN_RIGHTorBOTTOM))
    ;~ _GUIDock_SetAlignment($gui3, BitOR($_GUI_DOCK_LEFT,$_GUI_ALIGN_LEFTorTOP))
    ;~ _GUIDock_SetAlignment($gui4, BitOR($_GUI_DOCK_BOTTOM,$_GUI_ALIGN_LEFTorTOP))

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

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btUndock
    ; === einzelnes Fenster UnDocken
    _GUIDock_UnDockWindow($gui4)
    WinSetTitle($gui4, '', "Ich bin UNgedockt.")
    GUICtrlSetState($btUndock, $GUI_DISABLE)
    GUICtrlSetState($btRedock, $GUI_ENABLE)
    Case $btRedock
    ; === einzelnes Fenster Docken
    _GUIDock_DockWindow($gui4, BitOR($_GUI_DOCK_BOTTOM,$_GUI_ALIGN_CENTER))
    WinSetTitle($gui4, '', "Ich bin gedockt UNTEN-MITTE")
    GUICtrlSetState($btUndock, $GUI_ENABLE)
    GUICtrlSetState($btRedock, $GUI_DISABLE)
    EndSwitch
    WEnd

    [/autoit]


    Falls die Frage kommt, warum solch großer Aufwand betrieben wird - das erreicht man doch auch mit Child-Windows?
    Genau deshalb habe ich es gemacht, damit man auch Nicht-Child-Windows aneinander docken kann. ;)
    Und außerdem finde ich die Abdockmöglichkeit als nicht unwesentlich - und das bietet ein Child nicht.

    Edit:
    Habe die ShutDown-Funktion jetzt automatisch eingebunden. Danke Raupi für den Tipp.

    Dateien

    GUIDocking.au3 12,94 kB – 467 Downloads GUIDocking_Bsp.au3 3,24 kB – 449 Downloads
  • DockIt

    • BugFix
    • 15. Oktober 2010 um 13:20
    Zitat von TheShadowAE

    Hätte man nicht auch einfach den Style $WS_EX_MDICHILD benutzen können statt WM_MOVE? :D


    Hätte man - aber dann wäre es nur möglich Childs zu docken. Ich habe es bewußt so gewählt, dass jedes Fenster dockbar ist. ;)

  • Formularfeld Fokus setzen

    • BugFix
    • 14. Oktober 2010 um 11:43

    Schau mal die Hilfe-Bsp. zu _IEFormSubmit() und _IEAction() an. ;)

  • Mehrere Childs andocken

    • BugFix
    • 14. Oktober 2010 um 11:29

    Ich hab mein DockBorder-Bsp. mal etwas umgebaut. Ich denke so stellst du dir das vor.
    Das @SW_SHOW und @SW_HIDE per Button wirdst du ja wohl selbst hinbekommen. ;)

    Edit:
    Man muß ja nicht alles doppelt posten ;) - hier der Link: DockIt

  • Brauche Hilfe Bei Arrays

    • BugFix
    • 13. Oktober 2010 um 10:49

    Sorry, aber so kann man dir nicht helfen. Du redest um den heißen Brei herum, als gehe es um Staatsgeheimnisse.
    Kannst du nicht in Worte fassen, welche Daten erhoben werden, wie oft, und in welcher Form sie gespeichert werden sollen? :wacko:

  • Brauche Hilfe Bei Arrays

    • BugFix
    • 13. Oktober 2010 um 10:29

    Ich hab keine Ahnung, was du willst. Sehr seltsame Konstruktion.
    Beschreib doch lieber, welche Daten eingetragen werden und wo sie dann im Array erscheinen sollen.

  • Bug bei CtrlsetBkcolor ???

    • BugFix
    • 12. Oktober 2010 um 23:33
    Zitat von stayawayknight

    Es geht darum Controls in einem Array Mit GuiCtrlBkColor einzufärben, vermutlich in einer Schleife.


    Es ist völlig Rille, ob die ComboBox-ID in einer "normalen" Variablen oder in einem Array abgelegt wird.
    Ich gehe mal stark von einem Indexfehler aus. GUICtrlSetBkColor können wir als Fehlerquelle ganz sicher ausschließen.
    Aber solange kein Code vorliegt können wir auch den Fehler nicht näher lokalisieren - das ist der Nachteil an "Geheimprojekten" :rofl:

  • Suche eine (schnelle) IsInRect Funktion...

    • BugFix
    • 12. Oktober 2010 um 23:14

    Ich verwende für solche Checks Rectangle-Strukturen ($tagRECT). Kannst ja mal testen, wie da die Performance ist. Nachfolgende Funktionen sind hilfreich:
    Die RECT-Struktur erstellt man mit

    [autoit]

    $tRECT = DllStructCreate("int Left;int Top;int Right;int Bottom")
    ; oder
    $tRECT = DllStructCreate($tagRECT) ; erfordert: #include <StructureConstants.au3>

    [/autoit]
    RECT-Struktur mit Daten füllen
    [autoit]

    ;===============================================================================
    ; Function Name: _WinAPI_SetRect(ByRef $tRECT, $X1, $Y1, $X2, $Y2)
    ; Description: Befüllt eine RECT-Struktur in einem Aufruf mit Werten
    ; Parameter(s): $tRECT RECT-Struktur
    ; $X1, $Y1, $X2, $Y2 Werte des Rectangle
    ; Return Value(s): Erfolg <> 0
    ; Fehler 0 set @error 1-keine Struktur übergeben
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _WinAPI_SetRect(ByRef $tRECT, $X1, $Y1, $X2, $Y2)
    If Not IsDllStruct($tRECT) Then Return SetError(1,0,0)
    Local $ret = DllCall("user32", 'long', 'SetRect', 'ptr', DllStructGetPtr($tRECT), 'long', $X1, 'long', $Y1, 'long', $X2, 'long', $Y2)
    If @error > 0 Then Return SetError(1,@error,0)
    Return $ret[0]
    EndFunc ;==>_WinAPI_SetRect

    [/autoit]
    Koordinaten im RECT ?
    [autoit]

    ;===============================================================================
    ; Function Name: _WinAPI_CoordInRect(ByRef $tRECT, $X, $Y)
    ; Description: Ermittelt ob eine übergebene Koordinate innerhalb einer RECT-Struktur ist
    ; Analog zu _WinAPI_PtInRect, aber statt $tagPOINT werden Einzelkoordinaten übergeben
    ; Parameter(s): $tRECT RECT-Struktur
    ; $X X-Koordinate
    ; $Y Y-Koordinate
    ; Return Value(s): Erfolg True/False Punkt in/nicht in RECT
    ; Fehler 0 set @error 1-keine Struktur übergeben
    ; 2-Dll-Fehler (s. @extended)
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _WinAPI_CoordInRect(ByRef $tRECT, $X, $Y)
    If Not IsDllStruct($tRECT) Then Return SetError(1,0,0)
    Local $ret = DllCall("user32", "long", "PtInRect", "ptr", DllStructGetPtr($tRECT), "long", $X, "long", $Y)
    If @error > 0 Then Return SetError(2,@error,0)
    If $ret[0] Then
    Return True
    Else
    Return False
    EndIf
    EndFunc ;==>_WinAPI_CoordInRect

    [/autoit]
  • TCPOptimizer - Empfehlenswert?

    • BugFix
    • 12. Oktober 2010 um 22:40

    Ich kann mich schwach an die Zeit erinnern, als man noch keinen Router hatte. Da waren solche Tools wohl durchaus sinnvoll. Aber was soll die ganze Konfiguration des PC, wenn der Router sich als Flaschenhals herausstellt... :whistling:

  • Frage zu ProgressBar

    • BugFix
    • 11. Oktober 2010 um 19:17

    Molaynox:
    Vielleicht möchtest du auch noch ein paar Mandeltörtchen gebacken bekommen... :whistling:
    Wie wäre es mit ein bischen Eigeninitiative. Was du tun sollst, hat Dietmar doch schon wortwörtlich beschrieben. Du brauchst seine Worte nur noch 1:1 in Code umzumünzen. :wacko:

  • .csv-Datei in Array

    • BugFix
    • 11. Oktober 2010 um 12:49
    Zitat von Scritch

    Fehler in der Funktion?


    Das können wir getrost ausschließen.
    Ich vermute eher, dass dein Aufruf nicht mit deinen Daten übereinstimmt. Kann ich aber nicht prüfen, da du keine Bsp.csv angehängt hast.

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™