Vielleicht auch von Interesse dafür: IntelliSenseBox
Beiträge von BugFix
-
-
Kann man mit For-In in AutoIt eine Endlosschleife basteln?
Verrückter Gedanke
- ich habe noch keinen sinnvollen Ansatz gefunden. Aber ich grübel auch mal ein bischen. -
Endlosschleife beginnt nicht
Du hast in deinem Code ja auch keine Schleife drin.
Mögliche Schleifen sind:
Do-Until
While-WEnd
For-In
For-NextSchau mal in die Hilfe dazu.
-
Konzepte sind natürlich stark vom eigenen Geschmack abhängig.
Mir persönlich gefällt nicht, wenn soviele Slider vorhanden sind. Ich bevorzuge Lösungen dieser Art:
- jeder Parameter erhält einen Button mit Style zum Einrasten
- auf dem Button ist der aktuelle Wert sichtbar
- wird der Button betätigt (könnte man optisch noch aufpeppen, indem man dann einen z.B. roten Rahmen drumlegt), läßt sich der Wert ändern über:
- ein Paar Plus-/Minus- Schaltflächen unterhalb der Parameterbutton
Dann hast du schon gewaltig an Platz eingespart und siehst trotzdem alles auf einen Blick.
Alternativ zu den Button kannst du auch Label verwenden oder jedes andere Control, das einen Klick verwertet.
-
Brauchst du bei der einfachen Struktur nicht erst in ein Array lesen und dann splitten. Kannst du mit RegExp in ein 1D-Array schreiben:
[autoit];~ $sText = FileRead('Deine.Datei')
[/autoit][autoit][/autoit][autoit]$sText = _
[/autoit][autoit][/autoit][autoit]
"vorname1|nachname1" & @CRLF & _
"vorname2|nachname2" & @CRLF & _
"vorname3|nachname3" & @CRLF$aText = StringRegExp($sText, '(.+)\|(.+)', 3)
[/autoit]
_ArrayDisplay($aText) ; == Index gerade + FolgeIndex bilden immer ein Paar (0 & 1, 2 & 3 ...) -
dirkrid: Also so wird das nichts. Bröckchen für Bröckchen kommst du rüber mir dem, was du machst. Wir können dir nicht helfen, wenn du immer nur einen Teil deines Problems schilderst. Selbstverständlich gehört das Beschaffen der Daten auch zum Problem. Also nu mal Butter bei die Fische..
-
und der FF.au3 UDF
Jetzt wird es ganz verzwickt. Wozu brauchst du denn hierbei eine Browser-UDF? Oder ist da noch ein Teil, den du bisher nicht beschrieben hast? -
die Daten werden mit iMacros von rohdaten.csv abgelesen und in ergebnis.csv eingetragen.
Und warum nimmst du dafür iMacros? Verwende doch gleich AutoIt und übertrage die Daten genau so, wie du sie brauchst.
Und um dir dabei zu helfen, solltest du anhand der Rohdaten mal kurz aber präzise erläutern, wo sich diese Daten in der Ergebnis-Datei wiederfinden sollen und anhand welcher Kriterien eine Auswahl zu treffen ist. -
Bsp.:
Spoiler anzeigen
[autoit]#include <WinApi.au3>
[/autoit] [autoit][/autoit] [autoit]Global $tRect1 = DllStructCreate("int Left;int Top;int Right;int Bottom")
[/autoit] [autoit][/autoit] [autoit]
Global $tRect2 = DllStructCreate("int Left;int Top;int Right;int Bottom"); Grafik 1
[/autoit] [autoit][/autoit] [autoit]
$left1 = 10
$top1 = 10
$right1 = 90 ; left + width
$bottom1 = 60 ; top + heighth; Grafik 2
[/autoit] [autoit][/autoit] [autoit]
$left2 = 85
$top2 = 55
$right2 = 135 ; left + width
$bottom2 = 105 ; top + heighth_WinAPI_SetRect($tRect1, $left1, $top1, $right1, $bottom1)
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_SetRect($tRect2, $left2, $top2, $right2, $bottom2)$ret = _WinAPI_IntersectRect($tRect1, $tRect2)
[/autoit] [autoit][/autoit] [autoit]
If Not @error Then
ConsoleWrite('Schnittmenge:' & @LF & _WinAPI_GetRectValue($ret) & @LF)
Else
ConsoleWrite('Keine Schnittmenge' & @LF)
EndIf;===============================================================================
[/autoit] [autoit][/autoit] [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]
; Function Name: _WinAPI_GetRectValue(ByRef $tRECT, $bArray=False)
; Description: Gibt die Werte einer RECT-Struktur als String(Standard) od. Array zurück
; Parameter(s): $tRECT RECT-Struktur, die gelesen werden soll
; $fArray Rückgabetyp: False(Standard)=String, True=Array
; Return Value(s): Erfolg Werte der RECT-Struktur
; Fehler 0 set @error 1-keine Struktur übergeben
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _WinAPI_GetRectValue(ByRef $tRECT, $fArray=False)
If Not IsDllStruct($tRECT) Then Return SetError(1,0,0)
Local $sOut = _
DllStructGetData($tRECT, 1) & ',' & _
DllStructGetData($tRECT, 2) & ',' & _
DllStructGetData($tRECT, 3) & ',' & _
DllStructGetData($tRECT, 4)
If $fArray Then Return StringSplit($sOut, ',', 2)
Return $sOut
EndFunc ;==>_WinAPI_GetRectValue
_WinAPI_IntersectRect() ist inzwischen Bestandteil der WinAPI, brauchst du also nicht extra die Funktion. -
Wenn es zwei rechteckige Grafiken sind, kannst du die Koordinaten in Rectangle packen und vergleichen.
Spoiler anzeigen
[autoit];===============================================================================
[/autoit]
; Function Name: _WinAPI_IntersectRect(ByRef $Src1Rect, ByRef $Src2Rect)
; Description: Ermittelt Schnittmengen zweier RECT-Strukturen
; Parameter(s): $Src1Rect, $Src2Rect RECT-Strukturen aus denen Schnittmengen festgestellt werden sollen
; Return Value(s): Erfolg RECT-Struktur der Schnittmenge
; Fehler 0 set @error 1-keine Struktur(en) übergeben
; 2-Dll-Fehler (s. @extended)
; 3-keine Schnittmenge
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _WinAPI_IntersectRect(ByRef $Src1Rect, ByRef $Src2Rect)
If (Not IsDllStruct($Src1Rect)) Or (Not IsDllStruct($Src2Rect)) Then Return SetError(1,0,0)
Local $DestRect = DllStructCreate("int Left;int Top;int Right;int Bottom")
Local $ret = DllCall("user32", "int", "IntersectRect", "ptr", DllStructGetPtr($DestRect), "ptr", DllStructGetPtr($Src1Rect), "ptr", DllStructGetPtr($Src2Rect))
If @error > 0 Then Return SetError(2,@error,0)
If $ret[0] > 0 Then
Return $DestRect
Else
Return SetError(3,0,0)
EndIf
EndFunc ;==>_WinAPI_IntersectRect -
Klick mal drauf:
[autoit]OnAutoItExitRegister
[/autoit] -
Bei mir funktioniert _Array2DSortFree() leider auch nicht, bekomme aber auch keine Fehlermeldung (@error = 0).
OK, schaue es mir die Tage mal an.
Was die anderen angesprochenen Punkte angeht: Ich hatte damals viele Versionen getestet, kann also sein, dass einige Variablen dabei "auf der Strecke blieben" und ich einfach vergaß sie zu löschen. Die anderen Sachen waren Änderungen in der Namensgebung, die ich zwar in den Funktionen ausgeführt - in der Beschreibung aber vergessen hatte.
-
-
-
Das Array wird erstellt beim generieren der Progressbar, dieser Arrayname existiert nur als Parametername innerhalb der Funktionen - übergeben wird ByRef das Array aus der Rückgabe der Funktion
_GuiCtrlCreateOCXProgress
[autoit]Func _GuiCtrlCreateOCXProgress($x, $y, $width, $height, $Scrolling = 0, $Orientation = 0)
[/autoit]
Dim $ar[2]
$ar[0] = ObjCreate("Proyecto2.XP_ProgressBar")
If @error Then Return SetError(1,0,0)
$ar[0].Scrolling = $scrolling
$ar[0].Orientation = $Orientation
$ar[1] = GUICtrlCreateObj($ar[0],$x,$y,$width,$height)
Return $ar
EndFuncSetze in dieser Funktion mit dem Debuggen an - prüfe jeden Befehl auf Erfolg.
-
Ohne mir das im Detail anzusehen: Die Fehlermeldung sagt dir, dass $ProgressArray kein Array ist (oder gar nicht existiert). Denn der Fehler tritt auf beim Versuch auf ein Index-Element dieser Variablen zuzugreifen. Also setze an dieser Stelle mit der Fehlersuche an. Gehe Schritt für Schritt rückwärts zu der Stelle an der dieses Array erstellt werden soll/muß. Dort geht was daneben.
-
Wenn ich mich recht erinnere, gab es damals eine Beta, die eine derartige Syntax erlaubte. Imho ist das aber keine derzeit gültige Syntax.
-
Verbinde eine Funktion mit $GUI_EVENT_PRIMARYUP. Darin fragst du das geklickte (selektierte) Item ab - mit _GUICtrlTreeView_GetSelection(). Mit _GUICtrlTreeView_GetText() kannst du dir den Text des Item ausgeben lassen.
-
Ob man sowas tatsächlich braucht - darüber läßt sich sicher streiten

Im Forum gab es diese Fragestellung und ich habe das nun in eine UDF gepackt: ToolTip per Maus verschieben.Edit 16.05.2014: Bsp. erweitert
ToolTipMove.au3 (v.01)
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2014-05-15 13:55:54 v 0.1
#EndRegion - TimeStamp#cs =========================================================== Funktionen =====
[/autoit] [autoit][/autoit] [autoit]_TTMove_StartUp()
[/autoit] [autoit][/autoit] [autoit]
Initialisiert die UDF_TTMove_ShutDown() ( optional )
[/autoit] [autoit][/autoit] [autoit]
Freigeben der Ressourcen - automatisch bei Programmende_TTMove_RegisterTip()
[/autoit] [autoit][/autoit] [autoit]
Registrieren eines ToolTips für die UDF_TTMove_UnRegisterTip()
[/autoit] [autoit][/autoit] [autoit]
ToolTip aus der Registrierung entfernen==================================================================================
[/autoit] [autoit][/autoit] [autoit]#ce
[/autoit] [autoit][/autoit] [autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>
#include <WindowsConstants.au3>OnAutoItExitRegister('__TTMove_Exit')
[/autoit] [autoit][/autoit] [autoit]
Global Const $__HC_ACTION = 0Global $__oTTTitle
[/autoit] [autoit][/autoit] [autoit]
Global $__hStub_MouseProc
Global $__hmod
Global $__hHook
Global $fLeftPressDown, $fMoveFunc _TTMove_StartUp()
[/autoit] [autoit][/autoit] [autoit]
$__oTTTitle = ObjCreate('Scripting.Dictionary')
$__hStub_MouseProc = DllCallbackRegister("__TTMove_MouseProc", "long", "int;wparam;lparam")
$__hmod = _WinAPI_GetModuleHandle(0)
$__hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($__hStub_MouseProc), $__hmod)
$fLeftPressDown = False
$fMove = False
EndFuncFunc _TTMove_ShutDown()
[/autoit] [autoit][/autoit] [autoit]
$__oTTTitle = 0
$__hmod = 0
__TTMove_Exit()
EndFuncFunc _TTMove_RegisterTip($_sTitle)
[/autoit] [autoit][/autoit] [autoit]
If Not $__oTTTitle.Exists($_sTitle) Then
$__oTTTitle.Add($_sTitle, 1)
Return 1
Else
Return 0
EndIf
EndFuncFunc _TTMove_UnRegisterTip($_sTitle)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If $__oTTTitle.Exists($_sTitle) Then
$__oTTTitle.Remove($_sTitle)
Return 1
Else
Return 0
EndIf
EndFunc; == internal Functions
[/autoit] [autoit][/autoit] [autoit]Func __TTMove_GetHwnd()
[/autoit] [autoit][/autoit] [autoit]
For $tip In $__oTTTitle.Keys
If WinExists($tip) Then
Return WinGetHandle($tip)
EndIf
Next
Return 0
EndFuncFunc __TTMove_MouseProc($nCode, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $event, $info, $iX, $iY
$info = DllStructCreate("int X;int Y;dword mouseData;dword flags;dword time;ulong_ptr dwExtraInfo", $lParam)
$iX = DllStructGetData($info, 1)
$iY = DllStructGetData($info, 2)
$mouseData = DllStructGetData($info, 3)
If $nCode < 0 Then Return _WinAPI_CallNextHookEx($__hHook, $nCode, $wParam, $lParam)
If $nCode = $__HC_ACTION Then
Switch $wParam
Case $WM_MOUSEMOVE
__TTMove_MoveWnd(__TTMove_GetHwnd(), $iX, $iY)
Case $WM_LBUTTONDOWN
If __TTMove_MoveWnd(__TTMove_GetHwnd(), $iX, $iY, True) = 1 Then $fLeftPressDown = True
Case $WM_LBUTTONUP
If __TTMove_MoveWnd(__TTMove_GetHwnd(), $iX, $iY) = 1 Then
$fLeftPressDown = False
$fMove = False
EndIf
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($__hHook, $nCode, $wParam, $lParam)
EndFuncFunc __TTMove_MoveWnd($_hToolTip, $_x, $_y, $_fSet=False)
[/autoit] [autoit][/autoit] [autoit]
If $_hToolTip = 0 Then Return 0
Local $aPos = WinGetPos($_hToolTip)
Local Static $xLast, $yLast
If $_fSet Then
If $_x < $aPos[0] Or $aPos[0]+$aPos[2] < $_x Or $_y < $aPos[1] Or $aPos[1]+$aPos[3] < $_y Then Return 0
$xLast = $_x
$yLast = $_y
$fMove = True
Return 1
EndIf
If Not $fMove Then Return 0
Local $xDiff = ($_x) - ($xLast)
Local $yDiff = ($_y) - ($yLast)
$xLast = $_x
$yLast = $_y
WinMove($_hToolTip, '', $aPos[0]+($xDiff), $aPos[1]+($yDiff))
Return 1
EndFuncFunc __TTMove_Exit()
[/autoit]
_WinAPI_UnhookWindowsHookEx($__hHook)
DllCallbackFree($__hStub_MouseProc)
EndFunc ;==>OnAutoItExitBeispiel
[autoit]#include 'ToolTipMove.au3'
[/autoit] [autoit][/autoit] [autoit]HotKeySet('^!{F9}', '_exit') ; Ctrl+Alt+F9 zum Beenden
[/autoit] [autoit][/autoit] [autoit]
HotKeySet('^!{F10}', '_switchTip') ; Ctrl+Alt+F10 -- wechselt zwischen Tip#1 und Tip#2
HotKeySet('^!{F11}', '_unregister') ; Ctrl+Alt+F11 -- UnRegister Tip#1 - nur noch Tip#2 verschiebbarGlobal $sToolTip1 = "Das ist ein Test-Tool-Tipp [1]"
[/autoit] [autoit][/autoit] [autoit]
Global $sToolTip2 = "Das ist ein Test-Tool-Tipp [2]"_TTMove_StartUp()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_TTMove_RegisterTip($sToolTip1)
_TTMove_RegisterTip($sToolTip2)ToolTip($sToolTip1)
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(50)
WEndFunc _switchTip()
[/autoit] [autoit][/autoit] [autoit]
Local Static $aTip[2] = [$sToolTip1,$sToolTip2]
Local Static $iCurr = 0
ToolTip('')
$iCurr = BitXOR($iCurr,1)
ToolTip($aTip[$iCurr])
EndFuncFunc _unregister()
[/autoit] [autoit][/autoit] [autoit]
_TTMove_UnRegisterTip($sToolTip1)
EndFuncFunc _exit()
[/autoit]
Exit
EndFunc -
Du kannst den Tooltip durch Klicken & Ziehen bewegen, indem du MouseDown / MouseMove / MouseUp verwendest um bei diesen Aktionen den ToolTip zu bewegen, wenn diese Mausaktionen auf der Tooltipfläche stattfinden:
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
OnAutoItExitRegister('OnAutoItExit')Global Const $HC_ACTION = 0
[/autoit] [autoit][/autoit] [autoit]
Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
Global $hmod = _WinAPI_GetModuleHandle(0)
Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)
Global $fLeftPressDown = False, $fMove = FalseHotKeySet('^!{F9}', '_exit') ; Ctrl+Alt+F9 zum Beenden
[/autoit] [autoit][/autoit] [autoit]Global $fActive = False
[/autoit] [autoit][/autoit] [autoit]
Global $hToolTipGlobal $sTitleToolTip = "Das ist ein Test" ; zwingend als Variable anlegen, um den richtigen Tooltip zu treffen
[/autoit] [autoit][/autoit] [autoit]ToolTip($sTitleToolTip)
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
$hToolTip = _GetToolTipHwnd()
If Not $fActive Then
If $hToolTip <> 0 Then $fActive = True
Else
If Not $hToolTip Then $fActive = False
EndIf
Sleep(50)
WEndFunc _GetToolTipHwnd()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If WinExists($sTitleToolTip) Then
Return WinGetHandle($sTitleToolTip)
Else
Return 0
EndIf
EndFuncFunc _exit()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _MouseProc($nCode, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $event, $info, $iX, $iY
$info = DllStructCreate("int X;int Y;dword mouseData;dword flags;dword time;ulong_ptr dwExtraInfo", $lParam)
$iX = DllStructGetData($info, 1)
$iY = DllStructGetData($info, 2)
$mouseData = DllStructGetData($info, 3)
If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
If $nCode = $HC_ACTION Then
Switch $wParam
Case $WM_MOUSEMOVE
_ToolTipMove($iX, $iY)
Case $WM_LBUTTONDOWN
If _ToolTipMove($iX, $iY, True) = 1 Then $fLeftPressDown = True
Case $WM_LBUTTONUP
If _ToolTipMove($iX, $iY) = 1 Then
$fLeftPressDown = False
$fMove = False
EndIf
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFuncFunc _ToolTipMove($_x, $_y, $_fSet=False)
[/autoit] [autoit][/autoit] [autoit]
If $hToolTip = 0 Then Return 0
Local $aPos = WinGetPos($hToolTip)
Local Static $xLast, $yLast
If $_fSet Then
If $_x < $aPos[0] Or $aPos[0]+$aPos[2] < $_x Or $_y < $aPos[1] Or $aPos[1]+$aPos[3] < $_y Then Return 0
$xLast = $_x
$yLast = $_y
$fMove = True
Return 1
EndIf
If Not $fMove Then Return 0
Local $xDiff = ($_x) - ($xLast)
Local $yDiff = ($_y) - ($yLast)
$xLast = $_x
$yLast = $_y
WinMove($hToolTip, '', $aPos[0]+($xDiff), $aPos[1]+($yDiff))
Return 1
EndFuncFunc OnAutoItExit()
[/autoit]
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_MouseProc)
EndFunc ;==>OnAutoItExit