|
You last visited: Today at 13:54
Advertisement
Doppelklick auf Liste?
Discussion on Doppelklick auf Liste? within the AutoIt forum part of the Coders Den category.
05/07/2010, 20:05
|
#1
|
elite*gold: 0
Join Date: Jul 2009
Posts: 2,241
Received Thanks: 848
|
Doppelklick auf Liste?
Ich habe eine Liste (GUICtrlCreateList)... wenn ich einen Doppelklick auf einen Eintrag mache, soll eine Funktion ausgeführt werden.
Mir gehts also um den Doppelklick, ne Idee?
EDIT: Vllt ist's wichtig - ich benutz OnEventMode
|
|
|
05/08/2010, 14:26
|
#2
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
PHP Code:
Func _DoubleClick ( ) Local $controlID, $read, $timestamp, $dll, $executed $controlID = 3 $read = GUICtrlRead ($controlID)
$dll = DllOpen ( "user32.dll" ) $timestamp = TimerInit() $executed = False
Do If _IsPressed ( "01", $dll ) And GUICtrlRead ( $controlID ) = $read And Then
$executed = True MsgBox ( 0, "", "Du hast " & $read & " zweimal angeklickt!")
EndIf Until TimerDiff ( $timestamp ) > 750 Or $executed DllClose ( $dll ) EndFunc
Das hab ich jetzt mal kurzfristig zusammengeschustert, solltest vllt. noch einbauen, dass er nicht reagiert, wenn man auch außerhalb der anzusteuernden Schaltfläche klickt 
Musst natürlich noch die Misc.au3 in dein Script einbinden.
|
|
|
05/08/2010, 15:54
|
#3
|
elite*gold: 0
Join Date: Jul 2009
Posts: 2,241
Received Thanks: 848
|
Erstmal danke, aber geht das nicht auch mit GUICtrlSetOnEvent?
|
|
|
05/08/2010, 16:06
|
#4
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
Das hier ist die Funktion die du in GUICtrlSetOnEvent einbauen musst, wenn man weiss wie geht das aber normalerweise auch mit GUIGetMsg
|
|
|
05/08/2010, 16:23
|
#5
|
elite*gold: 0
Join Date: Jul 2009
Posts: 2,241
Received Thanks: 848
|
Quote:
Originally Posted by .nAno
Das hier ist die Funktion die du in GUICtrlSetOnEvent einbauen musst, wenn man weiss wie geht das aber normalerweise auch mit GUIGetMsg 
|
Hrm...
PHP Code:
If GuiCtrlRead($liste) <> "" Then
Problem wäre hier nur, dass ich eine beliebige Anzahl an Einträgen habe. Und es soll ja für jeden Eintrag eine angepasste Funktion ausführen...
|
|
|
05/08/2010, 17:28
|
#6
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
Wo liegt das Problem?
Tausch die MsgBox doch einfach gegen eine Switch-Case Anweisung aus in der alle Alternativen aufgeführt sind.
Falls der Inhalt der List aus nem Array stammt kannst du aber besser ne Überprüfung mit einer For-Schleife machen
|
|
|
05/08/2010, 21:45
|
#7
|
elite*gold: 0
Join Date: Jul 2009
Posts: 2,241
Received Thanks: 848
|
Quote:
Originally Posted by .nAno
Wo liegt das Problem?
Tausch die MsgBox doch einfach gegen eine Switch-Case Anweisung aus in der alle Alternativen aufgeführt sind.
Falls der Inhalt der List aus nem Array stammt kannst du aber besser ne Überprüfung mit einer For-Schleife machen 
|
Ich blick nich durch dein Codeschnipsel durch ;D
|
|
|
05/09/2010, 13:34
|
#8
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
Hier mal der gesamte Code, die MsgBox, die anzeigt was man 2mal angeklickt hat, kann einfach gegen deine Funktion ausgetauscht werden, der Rest sollte sich von selbst erklären
Ich hab außerdem noch ne kleine Extra-Funktion erstellt, die das alles noch ein wenig fehlerfreier macht
PHP Code:
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
AutoItSetOption ( "GuiOnEventMode" , 1 )
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 447, 192, 124)
$List1 = GUICtrlCreateList("", 48, 16, 273, 305)
GUICtrlSetData ( $List1, "1|2|3|4|5|6" )
GUICtrlSetOnEvent ( $List1, "_DoubleClick" )
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1=1
WEnd
Func _Exit ()
Exit
EndFunc
Func _MouseOverControl ()
Local $WindowPos, $ControlPos, $MousePos
Dim $WindowPos, $ControlPos, $MousePos
$WindowPos = WinGetPos ( @GUI_WinHandle )
$ControlPos = ControlGetPos ( @GUI_WinHandle, "", @GUI_CtrlId )
$MousePos = MouseGetPos ()
If $MousePos[0] > $WindowPos[0] + $ControlPos[0] And $MousePos[1] > $WindowPos[1] + $ControlPos[1] And $MousePos[0] < $WindowPos[0] + $ControlPos[0] + $ControlPos[2] And $MousePos[1] < $WindowPos[1] + $ControlPos[1] + $ControlPos[3] Then
Return True
Else
Return False
EndIf
EndFunc
Func _DoubleClick ( )
Local $controlID, $read, $timestamp, $dll, $executed
$controlID = @GUI_CtrlId
$read = GUICtrlRead ($controlID)
$dll = DllOpen ( "user32.dll" )
$timestamp = TimerInit()
$executed = False
Do
If _IsPressed ( "01", $dll ) And GUICtrlRead ( $controlID ) = $read And _MouseOverControl () Then
$executed = True
MsgBox ( 0, "", "Du hast " & $read & " zweimal angeklickt!")
EndIf
Until TimerDiff ( $timestamp ) > 750 Or $executed
DllClose ( $dll )
EndFunc
|
|
|
05/09/2010, 13:42
|
#9
|
elite*gold: 1
Join Date: Feb 2009
Posts: 1,726
Received Thanks: 729
|
Ist so alles richtig, aber ein Tipp um dir Schreibarbeit zu ersparen.
Die Hilfe sagt, das bei _IsPressed der Parameter zur Dll Angabe Optional ist. Das bedeutet, du kannst den ganzen Code mit DllOpen und so weg lassen
|
|
|
05/09/2010, 13:44
|
#10
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
Ich weiss, nur ich habs mir so angewöhnt, um mögliche Fehler die dadurch entstehen könnten zu vermeiden^^
|
|
|
05/09/2010, 14:15
|
#11
|
elite*gold: 0
Join Date: Jul 2009
Posts: 2,241
Received Thanks: 848
|
Hm... dieses @GUI_CtrlId kapier ich iwie nich ganz... wärs nich sinnvoller die ID der Liste einzusetzen?
|
|
|
05/09/2010, 14:27
|
#12
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
@GUI_CtrlID ist nen Makro, der die ID der zuletzt angeklickte GUIControl zurückgibt
Das entspricht der ID der ListBox, wenn du sie zuletzt angeklickt hast (was bei OnEventMode der Fall sein muss um die Funktion mit dem Makro aufzurufen
|
|
|
05/09/2010, 14:29
|
#13
|
elite*gold: 0
Join Date: Jul 2009
Posts: 2,241
Received Thanks: 848
|
K, ich habs...
EDIT: Also kann ich das Makro für jedes beliebiges Control verwenden?
Ach ja...
PHP Code:
Func _play() $mis3 = _GUICtrlListBox_GetCount($playlist) For $i = 0 To $mis3 -1 $liste = _GUICtrlListBox_GetText($playlist,$i) If FileExists($liste) Then _SoundPlay($liste) Switch GUiGetMsg () Case $GUI_EVENT_CLOSE Exit Case $stop _SoundStop($liste) ExitLoop EndSwitch Else MsgBox(0,"Error","Couldn't find file on this path") ExitLoop EndIf Next EndFunc
Problem: $stop-Button funzt net :>
Hab aber schon zig mal die Hilfe durchgekramt...
|
|
|
05/09/2010, 14:35
|
#14
|
elite*gold: 1
Join Date: Oct 2008
Posts: 1,078
Received Thanks: 276
|
Du nutzt (immernoch) GUIOnEventMode, oder?
GUIGetMsg () funzt während diese Option aktiviert ist nicht, du müsstest die also deaktivieren
|
|
|
05/09/2010, 14:46
|
#15
|
elite*gold: 0
Join Date: Jul 2009
Posts: 2,241
Received Thanks: 848
|
Quote:
Originally Posted by .nAno
Du nutzt (immernoch) GUIOnEventMode, oder?
GUIGetMsg () funzt während diese Option aktiviert ist nicht, du müsstest die also deaktivieren
|
Ahem, $GUI_EVENT_CLOSE funktioniert xD
|
|
|
 |
|
Similar Threads
|
Doppelklick mit AutoIt in CheatEngine
07/30/2010 - AutoIt - 20 Replies
Hallo Leute
ich möchte einen mausklick simulieren,und damit in cheat engine eine value ändern.
wenn ich aber doppelklick auf die adresse mache,damit das fenster mit der aktuellen value auf geht passiert nichts.
ebenso kann ich das nicht machen indem ich rechtsklick mache dann chance record und dann value
bei dem letzten schritt wenn er auf value klicken soll passiert dies einfach nicht.
den doppelklickt woltle ich mit
MouseClick ("left" ,812,500,2)machen
und den normalen klick mit ...
|
[Liste]Die Große Hitfaker Proxy Liste [Selbstgemacht]
04/08/2010 - Metin2 PServer Guides & Strategies - 5 Replies
Nichts falsche section sry
Kan das jmd Löschen ?
Wäre net
|
Hilfe?:Doppelklick auf gefundenen Pixel (AutoIt)
04/02/2009 - Metin2 - 7 Replies
Hallo,
Ich hab jetzt einen Farmbot gescriptet der recht gut funktioniert.
er macht dies
Global $Paused
HotKeySet("{F5}", "TogglePause")
while 1
Send("{SPACE}")
|
DoppelKlick
08/21/2008 - General Coding - 2 Replies
Also ich benutze seit heute AutoITv3
und einen Mouseklick macht man ja so:
MouseClick("left", 50, 665)
Aber wie macht man einen doppelklick und wie hält man die Mouse gedrückt und läst sie wieder los ??
|
All times are GMT +1. The time now is 13:55.
|
|