ZitatAlles anzeigen
The following hotkeys cannot be set:Ctrl+Alt+Delete = It is reserved by Windows
F12 = It is also reserved by Windows, according to its API.
NumPad's Enter Key = Instead, use {Enter} which captures both Enter keys on the keyboard.
Win+B,D,E,F,L,M,R,U, and Win+Shift+M = These are built-in Windows shortcuts. Note: Win+B and Win+L might only be reserved on Windows XP and above.
Alt, Ctrl, Shift, Win = These are the modifier keys themselves!
Other = Any global hotkeys a user has defined using third-party software, any combos of two or more "base keys" such as '{F1}{F2}', and any keys of the form '{LALT}' or '{ALTDOWN}'.
Beiträge von Oscar
-
-
Benutze ControlClick.
MouseMove, MouseClick, etc. gehen nur sichtbar!
-
Was genau willst Du denn auslesen?
Eine XLS-Datei öffnen geht so:
[autoit]
[/autoit]
$oExcel = ObjCreate('Excel.Application')
If IsObj($oExcel) Then
With $oExcel
.Visible = 1
WinWait('Microsoft Excel')
.Workbooks.Open(@ScriptDir & '\test.xls')
For $cell in .ActiveSheet.Range('A1:M1')
MsgBox(0,0,$cell.Value)
Next
.Quit
EndWith
EndIf
$oExcel = 0 -
Bei "normalen" Checkboxen gibt es den "3STATE"-Modus. Dieser ist aber für ein Treeview von AutoIt nicht vorgesehen.
Vielleicht kennt einer der Anwesenden einen Trick diesen Modus auch für ein Treeview benutzen zu können?Edit: Man könnte den Bold-Style für einen 3State-Modus benutzen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>Global $hGui = GUICreate('TreeView-(Un)Checked-Example', 400, 600)
[/autoit] [autoit][/autoit] [autoit]
Global $hTreeView = GUICtrlCreateTreeView(5, 5, 390, 590, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
Global $hRoot = GUICtrlCreateTreeViewItem('Root', $hTreeView)
_GUICtrlTreeView_BeginUpdate($hTreeView)
For $x = 1 To 3
$hItem1 = _GUICtrlTreeView_AddChild($hTreeView, GUICtrlGetHandle($hRoot), StringFormat('[%02d] Child 1st Gen.', $x))
For $y = 1 To 3
$hItem2 = _GUICtrlTreeView_AddChild($hTreeView, $hItem1, StringFormat('[%02d] Child 2nd Gen.', $y))
For $z = 1 To 2
$hItem3 = _GUICtrlTreeView_AddChild($hTreeView, $hItem2, StringFormat('[%02d] Child 3rd Gen.', $z))
Next
Next
Next
_GUICtrlTreeView_EndUpdate($hTreeView)
_GUICtrlTreeView_Expand($hTreeView)GUISetState()
[/autoit] [autoit][/autoit] [autoit]
While True
Switch GUIGetMsg()
Case $GUI_EVENT_PRIMARYDOWN ; (*)
$aInfo = GUIGetCursorInfo($hGui) ; (*)
If $aInfo[4] = $hTreeView Then ; (*)
$aAdjust = ControlGetPos($hGui, '', $hTreeView) ; (*)
If BitAND(_GUICtrlTreeView_HitTest($hTreeView, $aInfo[0]-$aAdjust[0]-2, $aInfo[1]-$aAdjust[1]-2), 64) Then ; (*)
$hSelect = _GUICtrlTreeView_GetSelection($hTreeView)
$checked = _GUICtrlTreeView_GetChecked($hTreeView, $hSelect)
If $checked Then
_VerifySiblingItems($hTreeView, $hSelect)
Else
_SetParentItemsUnchecked($hTreeView, $hSelect)
EndIf
$hItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hSelect)
If $hItem Then
_SetChildItemsChecked($hTreeView, $hItem, $checked)
_GUICtrlTreeView_SetBold($hTreeView, $hSelect, False)
EndIf
EndIf
EndIf
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
; (*) = diese Konstruktion ist notwendig, weil man sonst nicht zwischen einem Mausklick
; auf den Item-Text und der Checkbox unterscheiden kann; Überprüft (rekursiv) ob alle Sibling-Items angehakt sind und setzt, wenn zutreffend, den Haken beim Parent-Item
[/autoit] [autoit][/autoit] [autoit]
Func _VerifySiblingItems($hTreeView, $hItem)
Local $hTmp, $hSave = $hItem, $iCount = _GUICtrlTreeView_GetSiblingCount($hTreeView, $hItem)
While True
$hTmp = _GUICtrlTreeView_GetNextSibling($hTreeView, $hItem)
If Not $hTmp Then ExitLoop
$hItem = $hTmp
WEnd
Do
If _GUICtrlTreeView_GetChecked($hTreeView, $hItem) Then $iCount -= 1
$hItem = _GUICtrlTreeView_GetPrevSibling($hTreeView, $hItem)
Until Not $hItem
If Not $iCount Then
Local $hParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hSave)
If $hParent Then
_GUICtrlTreeView_SetChecked($hTreeView, $hParent)
_GUICtrlTreeView_SetBold($hTreeView, $hParent, False)
_VerifySiblingItems($hTreeView, $hParent)
EndIf
Else
Local $hParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hSave)
If $hParent Then
_GUICtrlTreeView_SetBold($hTreeView, $hParent, True)
_VerifySiblingItems($hTreeView, $hParent)
EndIf
EndIf
EndFunc; Setzt (rekursiv) den Haken bei allen Child-Items, wenn der Haken bei einem Item gesetzt wurde
[/autoit] [autoit][/autoit] [autoit]
Func _SetChildItemsChecked($hTreeView, $hItem, $checked)
_GUICtrlTreeView_SetBold($hTreeView, $hItem, False)
Do
Local $hNewItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
If $hNewItem Then _SetChildItemsChecked($hTreeView, $hNewItem, $checked)
_GUICtrlTreeView_SetChecked($hTreeView, $hItem, $checked)
_GUICtrlTreeView_SetBold($hTreeView, $hItem, False)
$hItem = _GUICtrlTreeView_GetNextChild($hTreeView, $hItem)
Until Not $hItem
EndFunc; Entfernt (rekursiv) den Haken bei allen Parents, wenn der Haken von einem Item entfernt wurde
[/autoit]
Func _SetParentItemsUnchecked($hTreeView, $hItem)
Local $hTmp, $hSave = $hItem, $iCount = 0
While True
$hTmp = _GUICtrlTreeView_GetNextSibling($hTreeView, $hItem)
If Not $hTmp Then ExitLoop
$hItem = $hTmp
WEnd
Do
If _GUICtrlTreeView_GetChecked($hTreeView, $hItem) Or _GUICtrlTreeView_GetBold($hTreeView, $hItem) Then $iCount += 1
$hItem = _GUICtrlTreeView_GetPrevSibling($hTreeView, $hItem)
Until Not $hItem
$hItem = $hSave
Local $hParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hItem)
If $iCount Then
_GUICtrlTreeView_SetBold($hTreeView, $hParent, True)
Else
_GUICtrlTreeView_SetBold($hTreeView, $hParent, False)
EndIf
If $hParent Then _SetParentItemsUnchecked($hTreeView, $hParent)
_GUICtrlTreeView_SetChecked($hTreeView, $hItem, False)
EndFuncWenn nicht alle Siblings angehakt sind, dann wird der Parent in Fettschrift dargestellt. Falls Dir das ausreicht!?
-
Oscar : Der Button arbeitet auch nicht wenn disabled. Klicke ich den Button an, merkt sich dieser den Mausklick und sobald der Button wieder aktiv ist wird sofort die hinterlegte Aktion ausgeführt.
Genau das passiert eben nicht!

Beispielscript:
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <GUIConstantsEx.au3>
Opt('GUIOnEventMode', 1)GUICreate('My GUI edit', 400, 300)
[/autoit][autoit][/autoit][autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, 'end')$go = GUICtrlCreateButton('test', 160, 140, 80, 25)
[/autoit][autoit][/autoit][autoit]
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetOnEvent(-1, 'button')GUISetState()
[/autoit][autoit][/autoit][autoit]
$t = TimerInit()
While True
Sleep(20)
If TimerDiff($t) > 5000 And TimerDiff($t) < 5100 then GUICtrlSetState($go, $GUI_ENABLE)
WEndFunc end()
[/autoit][autoit][/autoit][autoit]
Exit
EndFuncFunc button()
[/autoit]
MsgBox(0,0,'button')
EndFunc
Wenn Du innerhalb von 5 Sekunden (in dieser Zeit ist der Button disabled) auf den Button klickst, wird die Funktion nicht ausgeführt. Der Button "merkt" sich den Mausklick auch nicht. -
leertaste: Ein Button der disabled ist, nimmt keine Mausklicks an. Zumindest bei mir nicht.
Poste mal Dein Script... -
Geht auch anders:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>GUICreate("My GUI edit", 400, 300)
[/autoit] [autoit][/autoit] [autoit]
$myedit = GUICtrlCreateEdit("", 5, 5, 390, 200, BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $WS_VSCROLL))
$input = GUICtrlCreateInput("", 5, 270, 300, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$go = GUICtrlCreateButton("senden", 320, 270, 70, 20, $BS_DEFPUSHBUTTON)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
Do
$msg = GUIGetMsg()
If $msg = $go Then
GUICtrlSetData($myedit, GUICtrlRead($myedit) & GUICtrlRead($input) & @CRLF)
_GUICtrlEdit_LineScroll($myedit, 0, _GUICtrlEdit_GetLineCount($myedit))
GUICtrlSetData($input, "")
EndIf
Until $msg = $GUI_EVENT_CLOSEFunc MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
[/autoit]
Local $nID = BitAND($wParam, 0x0000FFFF)
If $nID = $myedit Then GUICtrlSetState($input, $GUI_FOCUS)
Return $GUI_RUNDEFMSG
EndFunc -
It's not a bug. It's a Feature!

Wenn das nicht erwünscht ist, dann halt mit zusätzlichem Button:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>GUICreate("My GUI edit", 400, 300)
[/autoit] [autoit][/autoit] [autoit]
$myedit = GUICtrlCreateEdit("", 5, 5, 390, 200, $ES_AUTOVSCROLL + $WS_VSCROLL)
$input = GUICtrlCreateInput("", 5, 270, 300, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$go = GUICtrlCreateButton("senden", 320, 270, 70, 20, $BS_DEFPUSHBUTTON)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
Do
$msg = GUIGetMsg()
If $msg = $go Then
GUICtrlSetData($myedit, GUICtrlRead($myedit) & GUICtrlRead($input) & @CRLF)
GUICtrlSetData($input, "")
EndIf
Until $msg = $GUI_EVENT_CLOSEFunc MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
[/autoit]
Local $nID = BitAND($wParam, 0x0000FFFF)
If $nID = $myedit Then GUICtrlSetState($input, $GUI_FOCUS)
Return $GUI_RUNDEFMSG
EndFunc -
Meinst Du vielleicht sowas:
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>GUICreate("My GUI edit", 400, 300)
[/autoit][autoit][/autoit][autoit]
$myedit = GUICtrlCreateEdit("", 5, 5, 390, 200, $ES_AUTOVSCROLL + $WS_VSCROLL)
$input = GUICtrlCreateInput("", 5, 270, 390, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND')
Do
$msg = GUIGetMsg()
If $msg = $input Then
GUICtrlSetData($myedit, GUICtrlRead($myedit) & GUICtrlRead($input) & @CRLF)
GUICtrlSetData($input, "")
EndIf
Until $msg = $GUI_EVENT_CLOSEFunc MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
[/autoit]
Local $nID = BitAND($wParam, 0x0000FFFF)
If $nID = $myedit Then GUICtrlSetState($input, $GUI_FOCUS)
Return $GUI_RUNDEFMSG
EndFunc -
Naja, spitze würde ich nicht sagen.
Wenn man nur eine Progressbar braucht, ok, aber bei mehreren Progressbars wird's ziemlich langsam.
Das war jetzt eher eine Bastellösung zu dem hier gewünschten "Hin und Zurück Laufbalken".
-
Ich habe mal mit Deinem Script etwas experimentiert:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]GUICreate('progress', 400, 200)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
GUISetBkColor(0xffffff)
Global $ahProgr = _CreateProgress(50, 25, 200)
Global $hRadio1 = GUICtrlCreateRadio('Füll-Balken', 270, 10, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $hRadio2 = GUICtrlCreateRadio('Lauf-Balken', 270, 40, 100, 20)GUISetState()
[/autoit] [autoit][/autoit] [autoit]
$p = 0
$step = 5
While True
$p += $step
If BitAND(GUICtrlRead($hRadio1), $GUI_CHECKED) Then
_SetPercent($ahProgr, $p)
Else
_SetMarquee($ahProgr, $p)
EndIf
If $p >= 100 Or $p <= 0 Then $step = -$step
Sleep(10)
WEndFunc _End()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _SetPercent($aID, $iPercent)
[/autoit] [autoit][/autoit] [autoit]
Local $val = Int((UBound($aID)-1)/100*$iPercent)
For $i = 0 To UBound($aID)-1
If $i <= $val Then
GUICtrlSetState($aID[$i], $GUI_SHOW)
Else
GUICtrlSetState($aID[$i], $GUI_HIDE)
EndIf
Next
EndFuncFunc _SetMarquee($aID, $iPercent)
[/autoit] [autoit][/autoit] [autoit]
Local $val = Int((UBound($aID)-1)/100*$iPercent)
For $i = 0 To UBound($aID)-1
Switch $i
Case $val-15 To $val+15
GUICtrlSetState($aID[$i], $GUI_SHOW)
Case Else
GUICtrlSetState($aID[$i], $GUI_HIDE)
EndSwitch
Next
EndFuncFunc _CreateProgress($iLeft, $iTop, $iWidth)
[/autoit]
Local $aID[$iWidth]
GUICtrlCreatePic(@ScriptDir & '\data\3.bmp', $iLeft, $iTop, 5, 20)
GUICtrlCreatePic(@ScriptDir & '\data\2.bmp', $iLeft+5, $iTop, $iWidth-10, 20)
GUICtrlCreatePic(@ScriptDir & '\data\4.bmp', $iLeft+$iWidth-5, $iTop, 5, 20)
For $i = 0 To $iWidth-3
Switch $i
Case 0
$aID[$i] = GUICtrlCreatePic(@ScriptDir & '\data\1.bmp', $iLeft+$i+1, $iTop+3, 1, 14)
Case 1
$aID[$i] = GUICtrlCreatePic(@ScriptDir & '\data\1.bmp', $iLeft+$i+1, $iTop+2, 1, 16)
Case $iWidth-4
$aID[$i] = GUICtrlCreatePic(@ScriptDir & '\data\1.bmp', $iLeft+$i+1, $iTop+2, 1, 16)
Case $iWidth-3
$aID[$i] = GUICtrlCreatePic(@ScriptDir & '\data\1.bmp', $iLeft+$i+1, $iTop+3, 1, 14)
Case Else
$aID[$i] = GUICtrlCreatePic(@ScriptDir & '\data\1.bmp', $iLeft+$i+1, $iTop+1, 1, 18)
EndSwitch
GUICtrlSetState($aID[$i], $GUI_HIDE)
Next
Return $aID
EndFunc -
Erstmal: Herzlich willkommen hier im Forum!

Es freut mich, dass Du mein Beispielscript gebrauchen kannst. Dafür habe ich es schließlich geschrieben.
Verändere es nach Deinen Wünschen, passe es an Deine Aufgabe an. Ganz wie Du willst und wenn Du mal nicht weiterkommst, dann frag einfach. -
Wenn ich schonmal schreibe, dass das und das nicht geht, dann präsentiert gleich einer ein Script, mit dem das dann doch funktioniert...


Wieder was für's Archiv. Danke BugFix!
Raupi : Unter WinXP funktioniert es ohne Änderungen.
-
Nur um das auszuschließen: Du weißt, dass man dafür Arrays benutzen kann?
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>GUICreate("listview items", 220, 250, 100, 200, -1)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0x00E0FFFF)$listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetColor(-1, 0x0000A0)
GUICtrlSetBkColor(-1, 0xBBCCEE)
$button = GUICtrlCreateButton("bCol Item2", 75, 170, 70, 20)
Global $aItem[9]
For $i = 0 To 8
$aItem[$i] = GUICtrlCreateListViewItem("item1|col12|col13", $listview)
NextGUISetState()
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()Select
[/autoit]
Case $msg = $button
GUICtrlSetBkColor($aItem[2], 0x00008B)
Case $msg = $listview
MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
EndSelect
Until $msg = $GUI_EVENT_CLOSE -
Das war jetzt nicht so oberlehrerhaft gemeint, wie es sich liest, also kein Grund für eine Entschuldigung.
Bei kurzen Texten oder beim chatten ist mir das eigentlich auch egal.
Bei längeren Texten bemerke ich dann aber schon, dass es doch anstrengender ist, so einen Text zu lesen. -
@Padmak: Zeichensetzung und Groß-/Kleinschreibung sind wesentliche Bestandteile der deutschen Sprache und tragen sehr viel zur Lesbarkeit eines Textes bei.
Soll jetzt keine Deutsch-Nachhilfe werden, ist mir nur gerade so aufgefallen.
-
So weit ich weiß, kann man den einzelnen Listview-Einträgen gar keine unterschiedlichen Farben zuordnen. Nur für alle zusammen oder mit:
Zitat
The special flag $GUI_BKCOLOR_LV_ALTERNATE can be used with Listview control to give alternate background of the ListviewItems lines.
The odd lines will get the color set by GUICtrlSetBkColor of the Listview control.
The even lines will get the color set by GUICtrlSetBkColor of the ListviewItem control.
abwechselnd mit der einen und der anderen Hintergrundfarbe. -
-
Hmm .. Allerdings meinte er wohl, das sähe "i-wie" doof aus, wenn überall Checkboxen seien und dann zwei Radio-Buttons dazwischen.
Also 'ne Optik-Geschichte.Könnte man in dem Fall u.U. auch gelten lassen.

Na, dann hätte er das aber auch schreiben können.

So kann man Checkboxen mit Radiobutton-Funktionalität verwenden:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
Opt('GUIOnEventMode', 1)
GUICreate('test', 320, 200)
GUISetOnEvent($GUI_EVENT_CLOSE, 'End')
Global $check[3]
$check[0] = GUICtrlCreateCheckbox("CHECKBOX 1", 10, 10, 120, 20)
GUICtrlSetOnEvent(-1, 'Button')
GUICtrlSetState(-1, $GUI_CHECKED)
$check[1] = GUICtrlCreateCheckbox("CHECKBOX 2", 10, 40, 120, 20)
GUICtrlSetOnEvent(-1, 'Button')
$check[2] = GUICtrlCreateCheckbox("CHECKBOX 3", 10, 70, 120, 20)
GUICtrlSetOnEvent(-1, 'Button')
GUISetState()While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(50)
WEndFunc End()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc Button()
[/autoit]
Local $hID = @GUI_CtrlId
For $i = 0 To 2
If $check[$i] <> $hID Then GUICtrlSetState($check[$i], $GUI_UNCHECKED)
Next
EndFunc -
Jam00: Wenn Du das eine Fenster verschiebst, muss eine Funktion dafür sorgen, dass das andere Fenster mit verschoben wird. Dafür registriert man die entsprechenden "Windows Message IDs" (siehe Beispiel oben).