Was genau meinst du mit RegExp ?
Beiträge von SEuBo
-
-
Warum nicht so :
[autoit]StringSplit(GUICtrlRead(GUICtrlRead($DeineListView),2),"|")
[/autoit]? So mach ich das
Weil es nicht klappt?
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>GUICreate("ListView Get Item Text Array", 400, 300)
[/autoit] [autoit][/autoit] [autoit]$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateListViewItem("line1|data1|more1", $hListView)
GUICtrlCreateListViewItem("line2|data2|more2", $hListView)
GUICtrlCreateListViewItem("line3|data3|more3", $hListView)
GUICtrlCreateListViewItem("line4|data4|more4", $hListView)
GUICtrlCreateListViewItem("line5|data5|more5", $hListView)GUISetState()
[/autoit]
$aTmp=StringSplit(GUICtrlRead(GUICtrlRead($hListView),2),"|")
_ArrayDisplay($aTmp) -
@PrideRange:
Wenn schon IniWrite, dann aber auch so, dass es dynamisch arbeitet.Spoiler anzeigen
[autoit]$sString = '[section]' & @CRLF
[/autoit] [autoit][/autoit] [autoit]
$sString &= 'http://banner.4players.de/teamspeak/195.4.16.21/banner.php?1254038714=C:\Dokumente und Einstellungen\PCV 2oo9\Anwendungsdaten\teamspeak2\8929-MYQW-NODW-9102.jpg' & @CRLF
$sString &= 'http://www.ts-onlyfree.org/39819hardy_1_ts-onlyfree_468.jpg=C:\Dokumente und Einstellungen\PCV 2oo9\Anwendungsdaten\teamspeak2\8289-FJ38-KEAM-9183.jpg' & @CRLF
$sString &= 'http://www.utn-hosting.info/banner/banner_ts_girl.jpg=C:\Dokumente und Einstellungen\PCV 2oo9\Anwendungsdaten\teamspeak2\FJJE-8283-DMEA-2830.jpg'
$hFile = FileOpen(@TempDir & "\Test.ini", 2)
FileWrite($hFile, $sString)
FileClose($hFile)$aSNames = IniReadSectionNames(@TempDir & "\Test.ini")
[/autoit]
If @error Then Exit
For $i = 1 To $aSNames[0]
$aSection = IniReadSection(@TempDir & "\Test.ini", $aSNames[$i])
If Not @error Then
For $j = 1 To $aSection[0][0]
IniWrite(@TempDir & "\Test.ini", $aSNames[$i], $aSection[$j][0], "Dein Text")
Next
EndIf
Next
ShellExecuteWait(@TempDir&"\Test.ini")
FileDelete(@TempDir&"\Test.ini")Allerdings finde ich RegExp wesentlich angenehmer
-
[autoit]
$sString = 'http://banner.4players.de/teamspeak/195.4.16.21/banner.php?1254038714=C:\Dokumente und Einstellungen\PCV 2oo9\Anwendungsdaten\teamspeak2\8929-MYQW-NODW-9102.jpg' & @CRLF
[/autoit][autoit][/autoit][autoit]
$sString &= 'http://www.ts-onlyfree.org/39819hardy_1_ts-onlyfree_468.jpg=C:\Dokumente und Einstellungen\PCV 2oo9\Anwendungsdaten\teamspeak2\8289-FJ38-KEAM-9183.jpg' & @CRLF
$sString &= 'http://www.utn-hosting.info/banner/banner_ts_girl.jpg=C:\Dokumente und Einstellungen\PCV 2oo9\Anwendungsdaten\teamspeak2\FJJE-8283-DMEA-2830.jpg'$sString = StringRegExpReplace($sString,"(?<==).+","Dein Text")
[/autoit]
MsgBox(0,"",$sString)Allerdings kann ich dir nicht sagen, ob das 100%ig klappt wenn mehrere = zeichen im String sind.
Das lässt sich aber auch beheben, wenn nötig. -
2 Rechtschreibfehler in einerm Satz
Hast du die Posts so sehr nötig? Musst du wirklich in jedem 2ten Thread einen Kommentar hinterlassen, nur um deinen Beitragszähler zu pushen?
Versuch doch lieber eine Lösung für das Problem zu erarbeiten, anstatt dich über Rechtschreibung oder Grammatik anderer lustig zu machen.
DankeJuraX:
Ich weiß nicht ob sowas schon irgendwo in der UDF rumschwirrt aber ich hab das hier gebastelt:Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>GUICreate("ListView Get Item Text Array", 400, 300)
[/autoit] [autoit][/autoit] [autoit]$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateListViewItem("line1|data1|more1", $hListView)
GUICtrlCreateListViewItem("line2|data2|more2", $hListView)
GUICtrlCreateListViewItem("line3|data3|more3", $hListView)
GUICtrlCreateListViewItem("line4|data4|more4", $hListView)
GUICtrlCreateListViewItem("line5|data5|more5", $hListView)GUISetState()
[/autoit] [autoit][/autoit] [autoit]$aTmp = _ListViewToArray($hListView)
[/autoit] [autoit][/autoit] [autoit]
_ArrayDisplay($aTmp)Func _ListViewToArray($hListView)
[/autoit]
If Not IsHWnd($hListView) Then $hListView = GUICtrlGetHandle($hListView)
Local $sString = ""
For $i = 0 To _GUICtrlListView_GetItemCount($hListView)-1
$sString &= _GUICtrlListView_GetItemTextString($hListView, $i)
$sString &= ";"
Next
$aSplit = StringSplit(StringTrimRight($sString,1), ";", 2)
$iUB1 = UBound($aSplit)
Dim $aRet[$iUB1][1]
For $i = 0 To $iUB1 - 1
$aSplit2 = StringSplit($aSplit[$i], "|", 2)
$iUB2 = UBound($aSplit2)
If $iUB2 > UBound($aRet,2) Then ReDim $aRet[$iUB1][$iUB2]
For $j = 0 To $iUB2 - 1
$aRet[$i][$j] = $aSplit2[$j]
Next
Next
Return $aRet
EndFunc ;==>_ListViewToArray -
Schonmal probier alles zu deinstallieren, und nochmal neu AutoIt und dann Scite zu installieren?
Die Abbrevs gibts nur in der "großen" AutoIt version, wie schon erwähnt wurde. -
Das geht mit sicherheit mit einem StringRegExpReplace. Um einen RegExp zu schreiben bräuchten wir dann aber eine Musterdatei.
-
WAS für eine Tabelle? Excel Tabelle? Tabelle in einem HTML Dokument, Tabelle in einem Textdokument?
Du musst schon genauer werden - wir sind keine Hellseher
-
Hallo,
Da der RegExbuddy leider eine zu mächtige Engine hat, habe ich mir überlegt eine sehr sehr abgespeckte Variante für AutoIt zu schreiben. Allerdings stoße ich auf ein Problem.Spoiler anzeigen
[autoit]#include <Constants.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GuiToolbar.au3>
#include <RichEditConstants.au3>
#include <SendMessage.au3>
#include <ToolbarConstants.au3>
#include <Array.au3>
#include <GuiRichEdit.au3>
#include <WindowsConstants.au3>
Global $bYellow ; If False, use Blue as next Color
Global $sIniPath = @AppDataDir & "\RegExpIt\Settings.ini"
Global $idNew, $idOpen, $idSave, $idHelp
Global $sTestString = _
"In diesem Text werden durch das \w+ alle" & @CRLF & _
"zusammenhängenden Alphanumerischen Zeichen gefunden." & @CRLF & _
"Dazu zählen A-Z, a-z, aber auch 0-9";~ If Not FileExists($sIniPath) Then ; Ini neu schreiben.
[/autoit] [autoit][/autoit] [autoit]
;~ IniWrite($sIniPath, "Genral Settings", "Resolution", "800x600")
;~ EndIf
$aGUIRes = StringSplit(IniRead($sIniPath, "General Settings", "Resolution", "800x600"), "x", 2)
$hGUI = GUICreate("RegExpIt", $aGUIRes[0], $aGUIRes[1], -1, -1)
GUISetFont(12)$hRE_RegExp = _GUICtrlRichEdit_Create($hGUI, "\w+", 10, 10, 445, 120, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlRichEdit_SetFont($hRE_RegExp, 12)$hRE_Repl = _GUICtrlRichEdit_Create($hGUI, "", 460, 10, 320, 115, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlRichEdit_SetFont($hRE_Repl, 12)$hRE_TestString = _GUICtrlRichEdit_Create($hGUI, $sTestString, 10, 170, 780, 200, BitOR($ES_MULTILINE, $WS_VSCROLL, $WS_HSCROLL))
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlRichEdit_SetFont($hRE_TestString, 12)$hRE_Matches = _GUICtrlRichEdit_Create($hGUI, "", 10, 400, 780, 200, BitOR($ES_MULTILINE, $WS_VSCROLL, $WS_HSCROLL))
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlRichEdit_SetFont($hRE_Matches, 15)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$hRepl = GUICtrlCreateCheckbox("Replace", 50, 370)
$hChildGUI = GUICreate("", $aGUIRes[0] * 0.95, 40, 10, 125, $WS_POPUP, $WS_EX_MDICHILD, $hGUI)
$hToolbar = _GUICtrlToolbar_Create($hChildGUI, $TBSTYLE_TRANSPARENT)
_GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_LARGE_COLOR)
_GUICtrlToolbar_AddButton($hToolbar, $idNew, $STD_FILENEW)
_GUICtrlToolbar_AddButton($hToolbar, $idOpen, $STD_FILEOPEN)
_GUICtrlToolbar_AddButton($hToolbar, $idSave, $STD_FILESAVE)
_GUICtrlToolbar_AddButtonSep($hToolbar)
_GUICtrlToolbar_AddButton($hToolbar, $idHelp, $STD_HELP)
GUISetState()
;~ GUISetBkColor(0xFF0000,$hChildGUI)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
GUIDelete($hGUI) ;GUI löschen, wegen RichEdit.
Exit
EndSwitch
If GUICtrlRead($hRepl) = 4 Then
_RichEdit_ApplyRegExp($hRE_RegExp)
_RichEdit_ApplyRegExp($hRE_TestString)
Else
_RichEdit_ApplyReplace($hRE_RegExp)
EndIf
WEndFunc _RichEdit_ApplyReplace(ByRef $hRichEdit)
[/autoit] [autoit][/autoit] [autoit]
If _GUICtrlRichEdit_IsModified($hRichEdit) Then
_GUICtrlRichEdit_SetModified($hRichEdit, False)
$sString = StringRegExpReplace(_RichEdit_GetText($hRE_TestString), _RichEdit_GetText($hRE_RegExp), _RichEdit_GetText($hRE_Repl))
If Not @error Then
__RichEdit_ColorViaRegExp($hRE_TestString)
_GUICtrlRichEdit_SetText($hRE_Matches, $sString)
Else
_GUICtrlRichEdit_SetText($hRE_Matches, "")
EndIf
_GUICtrlRichEdit_SetModified($hRE_Matches, False)
EndIf
EndFunc ;==>_RichEdit_ApplyReplaceFunc _RichEdit_ApplyRegExp(ByRef $hRichEdit)
[/autoit] [autoit][/autoit] [autoit]
If _GUICtrlRichEdit_IsModified($hRichEdit) Then
_GUICtrlRichEdit_SetModified($hRichEdit, False)
$sRegExp = _RichEdit_GetText($hRE_RegExp)
Switch $sRegExp
Case "","\b"
Return
EndSwitch
$aTmp = StringRegExp(_RichEdit_GetText($hRE_TestString),$sRegExp, 3)
If Not @error Then
_GUICtrlRichEdit_SetText($hRE_Matches, _ArrayToString($aTmp, @CRLF))
Global $bYellow = True
$aSel = _GUICtrlRichEdit_GetSel($hRichEdit) ; Get curren Cursor Pos.__RichEdit_ColorViaRegExp($hRE_Matches)
[/autoit] [autoit][/autoit] [autoit]
__RichEdit_ColorViaRegExp($hRE_TestString)_GUICtrlRichEdit_SetSel($hRichEdit, $aSel[0], $aSel[1]) ;restore Cursor Pos
[/autoit] [autoit][/autoit] [autoit]
Else
_GUICtrlRichEdit_SetText($hRE_Matches, "")
EndIf
EndIf
EndFunc ;==>_RichEdit_ApplyRegExpFunc _RichEdit_GetText($hWnd, $fCrToCrLf = False, $iCodePage = 0, $sReplChar = "")
[/autoit] [autoit][/autoit] [autoit]
If Not IsHWnd($hWnd) Then Return SetError(101, 0, "")
If Not IsBool($fCrToCrLf) Then Return SetError(102, 0, "")
If Not __GCR_IsNumeric($iCodePage) Then Return SetError(103, 0, "")Local $iLen = _GUICtrlRichEdit_GetTextLength($hWnd, False, True) + 1
[/autoit] [autoit][/autoit] [autoit]
Local $sUni = ''
If $iCodePage = $CP_UNICODE Or Not $iCodePage Then $sUni = "w"
Local $tText = DllStructCreate($sUni & "char[" & $iLen & "]")Local $tGetTextEx = DllStructCreate($tagGETTEXTEX)
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tGetTextEx, "cb", DllStructGetSize($tText))Local $iFlags = 0
[/autoit] [autoit][/autoit] [autoit]
If $fCrToCrLf Then $iFlags = $GT_USECRLF
DllStructSetData($tGetTextEx, "flags", $iFlags)If $iCodePage = 0 Then $iCodePage = $CP_UNICODE
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tGetTextEx, "codepage", $iCodePage)Local $pUsedDefChar = 0, $pDefaultChar = 0
[/autoit] [autoit][/autoit] [autoit]
If $sReplChar <> "" Then
Local $tDefaultChar = DllStructCreate("char")
$pDefaultChar = DllStructGetPtr($tDefaultChar, 1)
DllStructSetData($tDefaultChar, 1, $sReplChar)
Local $tUsedDefChar = DllStructCreate("bool")
$pUsedDefChar = DllStructGetPtr($tUsedDefChar, 1)
EndIf
DllStructSetData($tGetTextEx, "lpDefaultChar", $pDefaultChar)
DllStructSetData($tGetTextEx, "lpbUsedDefChar", $pUsedDefChar)Local $iRet = _SendMessage($hWnd, $EM_GETTEXTEX, DllStructGetPtr($tGetTextEx), DllStructGetPtr($tText))
[/autoit] [autoit][/autoit] [autoit]
If $iRet = 0 Then Return SetError(700, 0, "")
If $sReplChar <> "" Then SetExtended(DllStructGetData($tUsedDefChar, 1) <> 0)
Return DllStructGetData($tText, 1)EndFunc ;==>_RichEdit_GetText
[/autoit] [autoit][/autoit] [autoit]Func __RichEdit_ColorViaRegExp($hRichEdit)
[/autoit]
$aTmp = StringRegExp(_RichEdit_GetText($hRE_TestString), _RichEdit_GetText($hRE_RegExp), 3)
_GUICtrlRichEdit_SetSel($hRichEdit, 0, -1, True)
_GUICtrlRichEdit_SetCharBkColor($hRichEdit, 0xFFFFFF)
If _RichEdit_GetText($hRE_RegExp) <> "" Then
Local $sText = _RichEdit_GetText($hRichEdit), $iCounter = 0
Global $bYellow = True
If $aTmp[0] = "" Then Return SetError(@error, @extended, "")
For $i = 0 To UBound($aTmp) - 1
$bYellow = Not $bYellow
Local $iPos = StringInStr($sText, $aTmp[$i], 1) - 1
_GUICtrlRichEdit_SetSel($hRichEdit, $iPos + $iCounter, $iPos + $iCounter + StringLen($aTmp[$i]), True)
If $bYellow Then _GUICtrlRichEdit_SetCharBkColor($hRichEdit, 0xFFF000)
If Not $bYellow Then _GUICtrlRichEdit_SetCharBkColor($hRichEdit, 0x80C0FF)
$sText = StringTrimLeft($sText, $iPos + 1)
$iCounter += $iPos + 1
Next
EndIf
_GUICtrlRichEdit_SetModified($hRichEdit, False)
EndFunc ;==>__RichEdit_ColorViaRegExpÄndert einmal bitte das \w+ in ein \ba
Es sollen nun alle a's gefunden werden, die auf eine Wortgrenze folgen (leerzeichen, Interpunktionszeichen usw).
Gefunden werden sie ja auch, aber leider falsch "bemalt".Die Funktion __RichEdit_ColorViaRegExp() ist der übeltäter.
Momentan arbeite ich mit StringInStr, was aber (wie ihr seht) nicht sehr effektiv und fehlerfrei ist.
Gibt es da eine bessere Möglichkeit? -
Man kann es auch mit GUICtrlRead() machen.
1 = Checked
4 = Unchecked. -
Wenn Schnitzel nicht online ist
-
Geht auch kürzer
[autoit]MsgBox(0,"",_StringgetStr("1,2,3,4,5",",",1,1))
[/autoit][autoit][/autoit][autoit]
MsgBox(0,"",_StringgetStr("1,2,3,4,5",",",1,2))
MsgBox(0,"",_StringgetStr("1,2,3,4,5",",",1,3))Func _StringgetStr($sString,$sSearch,$iLength=1,$iOccurence=1)
[/autoit]
$aRet = StringRegExp($sString,$sSearch&"(.{"&$iLength&"})",3)
If Not @error AND UBound($aRet) >= $iOccurence Then Return $aRet[$iOccurence-1]
EndFunc -
ie komm ich daran google findet auch nichts.
C:\Program Files\AutoIt3\Include\
Die sind vorinstalliert.
-
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include "_InputBox.au3"
;string rückgabe
$sInput = _InputBox(4, "InputBox Beispiel", "text 1|nummer 2|und die 3|sogar 4", _
"ABCDEFG|nur klein|9876KLMNRS|Hohoho", 2, "", 1)
If Not @error Then
MsgBox(0, "", $sInput)
EndIf;Array Rückgabe
[/autoit]
$aInput = _InputBox(4, "InputBox Beispiel", "text 1|nummer 2|und die 3|sogar 4", _
"ABCDEFG|nur klein|9876KLMNRS|Hohoho", 2)
If Not @error Then
_ArrayDisplay($aInput)
MsgBox(0, "", $aInput[Random(0, UBound($aInput) - 1, 1)])
EndIf_InputBox.au3
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>Global $sInputs_Array[1][2]
[/autoit] [autoit][/autoit] [autoit]If Not IsDeclared("WM_COMMAND") Then Global Const $WM_COMMAND = 0x0111
[/autoit] [autoit][/autoit] [autoit]
If Not IsDeclared("WM_MOVE") Then Global Const $WM_MOVE = 0x0003
If Not IsDeclared("WM_LBUTTONDOWN") Then Global Const $WM_LBUTTONDOWN = 0x0201
If Not IsDeclared("WM_RBUTTONDOWN") Then Global Const $WM_RBUTTONDOWN = 0x0204Global $sToolTip_Text[2] = ["You can only type certain characters.", "Unacceptable Character:"]
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_MOVE, "WM_CLEAR_TOOLTIP")
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_CLEAR_TOOLTIP")
GUIRegisterMsg($WM_RBUTTONDOWN, "WM_CLEAR_TOOLTIP")Func _InputBox($iCount, $sTitle, $sText, $sDefault, $iRows = 1, $sRegExp = "", $iMode = 0, $sDelim = "|")
[/autoit] [autoit][/autoit] [autoit]
;Author: SEuBo
;$iCount: Anzahl der "Inputgruppen"
;$sTitle: Titel der _InputBox
;$sText: Text für die einzelnen Gruppen. Hier wird ein Trennzeichenseperierter String benötigt
;BSP: "1|2|3". Das Trennzeichen kann in $sDelim selbst bestimmt werden, falls das erwünscht ist
;$sDefault: Default-Text für die Input felder. Hier wird wieder ein seperierter String benötigt.
;$iMode: Der Rückgabemodus. 0 (Standard) = Array. 1 = mit $sDelim seperierter String.
Dim $sInputs_Array[1][2]
$OnEvent = Opt("GUIOnEventMode", 0)
Local $aData[$iCount + 1][2], $ifCount = 0, $aText = StringSplit($sText, $sDelim, 2), $aDefault = StringSplit($sDefault, $sDelim, 2), $aRegExp = StringSplit($sRegExp, $sDelim, 2)
If $iCount = "" Or $iCount < 1 Or $iMode < 0 Or $iMode > 1 Or $sDelim = "" Then
Return SetError(2, 0, "")
EndIf
If $aDefault[0] < $iCount + 1 Or $aDefault[0] > $iCount + 1 Then
ReDim $aDefault[$iCount + 1]
EndIf
If $aText[0] < $iCount + 1 Or $aText[0] > $iCount + 1 Then
ReDim $aText[$iCount + 1]
EndIf
If $aRegExp[0] < $iCount + 1 Or $aRegExp[0] > $iCount + 1 Then
ReDim $aRegExp[$iCount + 1]
EndIf
$_InputBox = GUICreate($sTitle, 220 * $iRows, 65 + $iCount / $iRows * 95, -1, -1, -1, 0x00000008)
For $r = 1 To $iRows
For $i = 1 To $iCount / $iRows
$aData[$ifCount][0] = GUICtrlCreateLabel($aText[$ifCount], 20 + (($r - 1) * 190), (($i - 1) * 95) + 25, 180, 55)
$aData[$ifCount][1] = GUICtrlCreateInput($aDefault[$ifCount], 20 + (($r - 1) * 190), (($i - 1) * 95) + 75, 180, 25)
_GUIInputSetRegExp($aData[$ifCount][1], $aRegExp[$ifCount])
$ifCount += 1
Next
Next
$hButton = GUICtrlCreateButton("Ok", 20, ((($ifCount/$iRows) - 1) * 95) + 110, 80, 25)
$hCancel = GUICtrlCreateButton("Cancel", 120, ((($ifCount/$iRows) - 1) * 95) + 110, 80, 25)
GUISetState()
While 1 * Sleep(50)
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3, $hCancel
GUIDelete($_InputBox)
Return SetError(1, 0, "")
Case $hButton
Switch $iMode
Case 0
Local $aRet[$iCount]
For $i = 0 To $iCount-1
$aRet[$i] = GUICtrlRead($aData[$i][1])
Next
GUIDelete($_InputBox)
Return $aRet
Case 1
Local $aRet
For $i = 0 To $iCount-1
$aRet &= GUICtrlRead($aData[$i][1]) & $sDelim
Next
GUIDelete($_InputBox)Return StringTrimRight($aRet, 1)
[/autoit] [autoit][/autoit] [autoit]
EndSwitch
EndSwitch
WEnd
Opt("GUIOnEventMode", $OnEvent)
EndFunc ;==>_InputBox
;MrCreator========>
;Edited by SEuBo
Func _GUIInputSetRegExp($CtrlId, $sRegExp)
Local $iUbound = UBound($sInputs_Array)
ReDim $sInputs_Array[$iUbound + 1][2]
$sInputs_Array[$iUbound][0] = $CtrlId
$sInputs_Array[$iUbound][1] = $sRegExp
EndFunc ;==>_GUIInputSetRegExpFunc _Input_Changed($hWnd, $CtrlId, $iIndex)
[/autoit] [autoit][/autoit] [autoit]
ToolTip("")
If $sInputs_Array[$iIndex][1] = "" Then Return
Local $Read_Input = GUICtrlRead($CtrlId)
If StringRegExp($Read_Input, $sInputs_Array[$iIndex][1]) Then
GUICtrlSetData($CtrlId, StringRegExpReplace($Read_Input, $sInputs_Array[$iIndex][1], ''))Local $Gui_Get_Pos = WinGetPos($hWnd)
[/autoit] [autoit][/autoit] [autoit]
Local $Ctrl_Get_Pos = ControlGetPos($hWnd, "", $CtrlId)Local Const $SM_CYCAPTION = 4 ;Titelbar heigth
[/autoit] [autoit][/autoit] [autoit]
Local Const $SM_CXFIXEDFRAME = 7 ;Window border sizeLocal $X_Pos = $Gui_Get_Pos[0] + $Ctrl_Get_Pos[0] + $Ctrl_Get_Pos[2] + GetSystemMetrics($SM_CXFIXEDFRAME)
[/autoit] [autoit][/autoit] [autoit]
Local $Y_Pos = $Gui_Get_Pos[1] + $Ctrl_Get_Pos[1] + $Ctrl_Get_Pos[3] + GetSystemMetrics($SM_CYCAPTION)ToolTip($sToolTip_Text[0], $X_Pos, $Y_Pos, $sToolTip_Text[1], 3, 1 + 4)
[/autoit] [autoit][/autoit] [autoit]
DllCall("user32.dll", "int", "MessageBeep", "int", 0x0)
EndIf
EndFunc ;==>_Input_ChangedFunc WM_CLEAR_TOOLTIP($hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
ToolTip("")
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_CLEAR_TOOLTIPFunc MY_WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
If $hWnd = 0 Or Not WinExists($hWnd) Then Return $GUI_RUNDEFMSGLocal $nNotifyCode = BitShift($wParam, 16)
[/autoit] [autoit][/autoit] [autoit]
Local $nID = BitAND($wParam, 0xFFFF)
Local Const $EN_CHANGE = 0x300
Local Const $EN_UPDATE = 0x400
Local Const $EN_SETFOCUS = 0x100
Local Const $EN_KILLFOCUS = 0x200For $i = 1 To UBound($sInputs_Array) - 1
[/autoit] [autoit][/autoit] [autoit]
If $nID = $sInputs_Array[$i][0] Then
Switch $nNotifyCode
Case $EN_UPDATE ;$EN_CHANGE
_Input_Changed($hWnd, $sInputs_Array[$i][0], $i)
Case $EN_SETFOCUS, $EN_KILLFOCUS
ToolTip("")
EndSwitch
ExitLoop
EndIf
NextReturn $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>MY_WM_COMMANDFunc GetSystemMetrics($Flag)
[/autoit]
Local $iRet = DllCall('user32.dll', 'int', 'GetSystemMetrics', 'int', $Flag)
Return $iRet[0]
EndFunc ;==>GetSystemMetrics
;<========== -
einfachste Möglichkeit:
erstelle ein Child GUI mit dem Style $WS_POPUP und ExStyle $WS_EX_MDICHILD und wähle dein Haupt GUI als Parent.
Das Child wird nun in den Bereich gesetzt in dem gescrollt werden soll, und die Controls erstellst du dann auf dem Child GUI.//EDIT:
So mein ich das:Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ScrollBarConstants.au3>
#include <GuiScrollBars.au3>
#include <WindowsConstants.au3>
$gui = GUICreate("Forum ", 633, 447, 190, 220)
$acalabeltop = GUICtrlCreateLabel("Forum", 240, 8, 200)
GUICtrlSetFont($acalabeltop, 18, "", "", "Copperplate Gothic Bold")
GUISetBkColor(0xFFFFFF)
$weiter = GUICtrlCreateButton("Weiter", 448, 410, 100, 25)
$abbrechen = GUICtrlCreateButton("Beenden", 264, 410, 100, 25)
$zurueck = GUICtrlCreateButton("Zurück", 72, 410, 100, 25)
GUICtrlCreateGroup("Bereich zum scrollen", 16, 73, 601, 286)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlSetFont(-1, 10, 400, 4, "MS Sans Serif")
GUICtrlCreateLabel("Telefonnummer:", 200, 376, 80, 17)
$telefon = GUICtrlCreateInput("", 304, 374, 121, 21)
;~ $Pic1 = GUICtrlCreatePic($inifilepath & "logo.jpg", 485, 0,"","", "")
GUISetState(@SW_SHOW,$gui)$hChild = GUICreate("Scrollbereich",581,263,26,88,$WS_POPUP,$WS_EX_MDICHILD,$gui)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_GUIScrollBars_Init($hChild)
_GUIScrollBars_ShowScrollBar($hChild, $SB_HORZ,False) ; horizontale Scrollbar verstecken
GUICtrlCreateButton("test",100,100,100,20)
GUISetState(@SW_SHOW,$hChild)
GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")While 1
[/autoit] [autoit][/autoit] [autoit]
;~ danke
WEndFunc WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
#forceref $Msg, $wParam, $lParam
Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
Local $index = -1, $yChar, $yPos
Local $Min, $Max, $Page, $Pos, $TrackPosFor $x = 0 To UBound($aSB_WindowInfo) - 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$yChar = $aSB_WindowInfo[$index][3]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0; Get all the vertial scroll bar information
[/autoit] [autoit][/autoit] [autoit]
Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
$Min = DllStructGetData($tSCROLLINFO, "nMin")
$Max = DllStructGetData($tSCROLLINFO, "nMax")
$Page = DllStructGetData($tSCROLLINFO, "nPage")
; Save the position for comparison later on
$yPos = DllStructGetData($tSCROLLINFO, "nPos")
$Pos = $yPos
$TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")Switch $nScrollCode
[/autoit] [autoit][/autoit] [autoit]
Case $SB_TOP ; user clicked the HOME keyboard key
DllStructSetData($tSCROLLINFO, "nPos", $Min)Case $SB_BOTTOM ; user clicked the END keyboard key
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Max)Case $SB_LINEUP ; user clicked the top arrow
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)Case $SB_LINEDOWN ; user clicked the bottom arrow
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)Case $SB_THUMBTRACK ; user dragged the scroll box
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
EndSwitch;~ // Set the position and then retrieve it. Due to adjustments
[/autoit] [autoit][/autoit] [autoit]
;~ // by Windows it may not be the same as the value set.DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
[/autoit] [autoit][/autoit] [autoit]
_GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
_GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
;// If the position has changed, scroll the window and update it
$Pos = DllStructGetData($tSCROLLINFO, "nPos")If ($Pos <> $yPos) Then
[/autoit] [autoit][/autoit] [autoit]
_GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
$yPos = $Pos
EndIfReturn $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>WM_VSCROLL
[/autoit] -
Mal ganz dreist am Rande erwähnt:
Wenn es um 2D Arrays geht, ist diese UDF hier immer sehr hilfreich:
ArrayMore.au3 -
[autoit]
If _IEPropertyGet($oIE,"locationurl") = "www.seite.de" Then
[/autoit]
;entweder
_IENavigate($oIE,"javascript: letunload=true; document.location='/accounts/reset/submitErrorMessage.action';")
;oder
$oButton = _IEFormElementGetObjByName($oIE,"BUTTONBack")
_IEAction($oButton,"click")
EndIf -
ich glaube, das UR-PROBLEM ist, dass du in der MSGBox ein " " nicht ausgefüllt hast, dadurch wird die Box nicht erzeugt. Und du hast nen dauerläufer... Overflow...
Es tut ja schon fast weh nochmal hier zu posten, aber man kommt ja nicht drumrum.
Chrischn: Nein. Du kannst auch
[autoit]MsgBox("","","","","")
[/autoit]schreiben. Die MsgBox wird trotzdem erzeugt. Das Urproblem war, dass $a nicht deklariert war.
@Rest: Es ist vollkommen wurst ob man jetzt $a = 0 oder Global $a = 0 oder Global $a schreibt.
Entscheidet man sich für die erste oder zweite Variante, ist $a eine Globale Variable mit dem Wert 0. Wählt man allerdings die letzte Variante ( in der $a keinen Wert enthält ), ist $a leer.Diese Variable ist jetzt automatisch ein String (korrigiert mich wenn ich falsch liege), da ihr Wert "LEER" und nicht "0" ist. Wird nun mit der leeren Variable gerechnet, wandelt AutoIt den String in eine Zahl um. Da Strings immer 0 sind ergibt sich auch bei
[autoit]Global $a
[/autoit]
$a += 1
MsgBox(0,"",$a)
[autoit]
das richtige Ergebnis.$a += 1 ; ist eine kurzvorm für
[/autoit][autoit]
$a = $a + 1$a = $a + 1 ; Ist in wirklichkeit:
[/autoit]
$a = "" + 1 ; und das ist in wirklichkeit:
$a = 0 + 1 -
Fehler kann ich keine sehen. Du solltest eventuell
- MozRepl aktualisieren
- FF.au3 aktualisieren
- FF aktualisieren.Außerdem solltest du bei Fileread(...) statt "mylinks.txt" besser @ScriptDir & "\mylinks.txt" benutzen - es kann nämlich sonst zu fehlern bzgl. des Arbeitsverzeichnisses kommen.
Desweiteren empfehle ich, den Array mal mit _ArrayDisplay zu übrprüfen.
LG
SEuBo -
Erstell doch ein Dummy Lable, und arbeite ganz normal mit
[autoit]Switch GUIGetMsg()
[/autoit]
Case $DummyLable
;Fokus entfernen
Endswitchoder halt GUICtrlSetOnEvent - je nachdem...
Edit: Schnitzel - 2 dumme, ein Gedanke.