Hi,
wie geht das?
Ich habe ein Bild mit GUICtrlCreatePic eingefügt.
Wenn man nun auf das Bild klickt soll irgendene Funktion aufgerufen werden. Es müsste also eine Art unsichtbarer Button drüber.
Wie mach ich sowas?
Hi,
wie geht das?
Ich habe ein Bild mit GUICtrlCreatePic eingefügt.
Wenn man nun auf das Bild klickt soll irgendene Funktion aufgerufen werden. Es müsste also eine Art unsichtbarer Button drüber.
Wie mach ich sowas?
Du kannst den Klick auf ein Bild mit dem Style SS_NOTIFY abfangen.
[autoit]$Pic1 = GUICtrlCreatePic("", 112, 72, 265, 169, $SS_NOTIFY)
[/autoit]Oder abfragen wie einen ganz normalen Button, also z.B. Case $Pic1 ...
Padmak
Oder abfragen wie einen ganz normalen Button, also z.B. Case $Pic1 ...
Padmak
Wie gehe ich dann weiter vor?
Du kannst den Klick auf ein Bild mit dem Style SS_NOTIFY abfangen.
[autoit]$Pic1 = GUICtrlCreatePic("", 112, 72, 265, 169, $SS_NOTIFY)
[/autoit]
Geht das auch irgendwie mit GUICtrlSetOnEvent?
Hab im Helpfile "GUICtrlCreateButton" mal den Befehl guictrlcreatebutton durch giuctrlcreatepic ersetzt.
#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Example()
[/autoit] [autoit][/autoit] [autoit]Func Example()
Local $Button_1, $Button_2, $msg
GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered
Opt("GUICoordMode", 2)
$Button_1 = GUICtrlCreateButton("Run Notepad", 10, 30, 100)
$Button_2 = GUICtrlCreatepic(@WindowsDir&"/feder.bmp", 0, -1)
GUISetState() ; will display an dialog box with 2 button
[/autoit] [autoit][/autoit] [autoit]; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
Run('Notepad.exe') ; Will Run/Open Notepad
Case $msg = $Button_2
MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
EndSelect
WEnd
EndFunc ;==>Example
Einfach wie Buttons behandeln.
GuiCtrlSetOnEvent($Pic1, "Funktion")
Padmak
Alles anzeigenHab im Helpfile "GUICtrlCreateButton" mal den Befehl guictrlcreatebutton durch giuctrlcreatepic ersetzt.
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Example()
[/autoit] [autoit][/autoit] [autoit]Func Example()
[/autoit] [autoit][/autoit] [autoit]
Local $Button_1, $Button_2, $msg
GUICreate("My GUI Button") ; will create a dialog box that when displayed is centeredOpt("GUICoordMode", 2)
[/autoit] [autoit][/autoit] [autoit]
$Button_1 = GUICtrlCreateButton("Run Notepad", 10, 30, 100)
$Button_2 = GUICtrlCreatepic(@WindowsDir&"/feder.bmp", 0, -1)GUISetState() ; will display an dialog box with 2 button
[/autoit] [autoit][/autoit] [autoit]; Run the GUI until the dialog is closed
[/autoit]
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
Run('Notepad.exe') ; Will Run/Open Notepad
Case $msg = $Button_2
MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
EndSelect
WEnd
EndFunc ;==>Example
Super, das funktioniert! Wie mach ich das selbe nun in der on event Art?
Einfach wie Buttons behandeln.
GuiCtrlSetOnEvent($Pic1, "Funktion")Padmak
Ich krieg das irgendwie nicht auf die Reihe, das Bild erscheint zwar aber es ist nicht anklickbar:
#include <Guiconstants.au3>
GUICreate("")
$pic = GUICtrlCreatepic("pic1.jpg", 0, 0)
GUICtrlSetOnEvent($pic, "msg")
Func msg()
MsgBox(1,"","")
EndFunc
Do
GUISetState(@SW_SHOW)
$msgbx = GUIGetMsg()
Until $msgbx = $GUI_EVENT_CLOSE
Wenn Du den OnEvent-Mode nutzen willst muss am Anfang Deines Scriptes folgendes stehen:
[autoit]Opt('GUIOnEventMode', 1)
[/autoit]
und Du darfst nicht gleichzeitig den MessageLoop-Mode benutzen. Das heißt, GUIGetMsg muss dann raus.
Super, jetzt funktioniert alles.
Danke allen. ;=)
Ach ja, hab dazu nochmal 2 Fragen:
1. Wie macht man es, dass die Funktion erst aufgerufen wird sobald man die Maus wieder los lässt?
2. Gibt es eine ähnliche Funktion die schon reagiert sobald ich denn Mauszeiger über das Bild halte?
zu2:
Du suchst eine Hover Funktion. Dazu gibt verschiedene Möglichkeiten, diese hier gefällt mir ganz gut
#include <GUIConstants.au3>
Opt("GUICoordMode",1)
$HauptGUI = GUICreate("Hover", 400, 560)
$Button1 = GUICtrlCreateButton("Test", 100, 100, 200, 60, 0)
$bild1 = GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 100, 250, 200, 50)
GuiSetState()
$Hover_Old = ""
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]If GUIGetMsg() = -3 Then Exit
[/autoit] [autoit][/autoit] [autoit]$Cursor = GUIGetCursorInfo($HauptGUI) ;Einfache Hover Funktion
If $Cursor[4] <> $Hover_Old Then
Hover($Cursor[4])
$Hover_Old = $Cursor[4]
EndIf
WEnd
[/autoit] [autoit][/autoit] [autoit]Func Hover($ID) ;wenn der Zeiger über dem Kontrol ist dann ...
Switch $ID
Case $Button1
msgbox(1, "", "Cursor über Button1") ;hier kommt die jeweilige Funktion hin
case $bild1
msgbox(1, "", "Cursor über Bild1")
EndSwitch
EndFunc
Zu 1.
Füg in die Funktion am Anfang
While _IsPressed("01")
Wend
Und natürlich die Misc.au3 includen
Padmak
wollte jetzt nicht ein neuen ähnlichen threat anfangen also schreib ich das hier rein:
Wie soll der code lauten wenn *es* auf eine bestimmte Stelle und in einem bestimmten Fenster etwas anklicken soll ?
was ist denn "ES" ? ![]()
vllt hilft dir ja Controlclick ?