Source/ Codesnippets | | | | | KompilierenMarqueSéparationSource wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Message-Kontrolle per GetMessage
Totale Kontrolle über das Fenster per Getmessage, mit dieser Routine in es auch möglich
die Position von Buttons usw. zur Laufzeit zu ändern, da die Mousposition auch über den
Controls zu verwenden ist und der Button dadurch mitgezogen werden kann.
Der Code ist frei zur Verwendung und Weiterentwicklung.
Diese Form der Abfrage beendet alle Problem mit unerwünschten Maus oder Tasteneingaben.
Die Message Doubleclick können nur Controls an das Parent window senden, die diesen Stil auch
besitzen, wichtig ist auch der Stil Notify an das Parent window.
Wichtig ist, dass das Hauptfenster auch wieder den Focus bekommt, zum Empfang der Message
Durch ausprobieren findet man sicher mehr möglichkeiten
Autor: Dieter Zornow
SetErrorLevel 0
Def GetCursorPos(1) ! USER32,GetCursorPos
Def ScreenToClient(2) ! USER32,ScreenToClient
Def @Csleep(1) !kernel32,Sleep
Def GetSysColor(1) !USER32,GetSysColor
Def eqoG(2) @equ(@&(1),@&(2)) or @Gt(@&(1),@&(2)) Größer oder gleich
Def eqoL(2) @equ(@&(1),@&(2)) or @Lt(@&(1),@&(2)) Kleiner oder gleich
SETTRUECOLOR 1
DECLARE ENDE%,statbar&,point#,x&,y&
DECLARE LISTBOX&
DECLARE BUTTON1&
DECLARE BUTTON2&
DECLARE BUTTON3&
DECLARE BUTTON4&
Dim point#,8
WINDOWSTYLE 63
WINDOWTITLE Messagecontrolle
WINDOW SUB(DIV(%MAXX,2),DIV(800,2)),SUB(DIV(%MAXY,2),DIV(600,2))-800,600
CLS GETSYSCOLOR(15)
USEFONT MS Sans Serif,13,0,0,0,0
SETDIALOGFONT 1
LISTBOX& = CREATE(LISTBOX,%HWND,,0012,0020,0228,0362)
BUTTON1& = CREATE(BUTTON,%HWND,Komm her,0012,0415,0070,0030)
BUTTON2& = CREATE(BUTTON,%HWND,Doubleclick,0140,0415,0070,0030)
BUTTON3& = CREATE(BUTTON,%HWND,Move to,0270,0415,0070,0030)
BUTTON4& = CREATE(BUTTON,%HWND,Ende,0537,0415,0070,0030)
statbar&=Control(msctls_statusbar32,,$54000900,0,0,0,0,%hwnd,2,%hinstance,$0)
SETTEXT STATBAR&,Test
setfocus(%Hwnd)
WHILENOT ENDE%
Getmessage
If @EQU(%KEY,2)
LET ENDE%= 1
elseif equ(%lastmessage,161) vergrößern
SETWINDOWPOS statbar& = 0,0 - 0,0;0
setfocus(%Hwnd)
elseif equ(%lastmessage,163)
SETWINDOWPOS statbar& = 0,0 - 0,0;0
setfocus(%Hwnd)
elseif equ(%lastmessage,280)
SETWINDOWPOS statbar& = 0,0 - 0,0;0
setfocus(%Hwnd)
ELSEIF GETFOCUS(LISTBOX&) LISTBOX
if equ(%lastmessage,515)
locate 2,40
Print Doppelklick in Listbox
endif
setfocus(%Hwnd)
if equ(%lastmessage,513)
locate 2,40
Print Einzelklick in Listbox
endif
setfocus(%Hwnd)
ELSEIF GETFOCUS(BUTTON1&) BUTT
if equ(%lastmessage,514)
settext Button1&,ok
else
settext Button1&,Komm her
endif
ELSEIF GETFOCUS(BUTTON2&) BUTTON
Ereignis nur bei Doppelklick
if equ(%lastmessage,515)
@Csleep(150) Damit man bei diesem Beispiel den Tastendruck sieht
locate 2,40
Print Doppelklick auf Button
endif
setfocus(%Hwnd)
ELSEIF GETFOCUS(BUTTON3&) BUTTON
Hier kann man wählen Ereignis beim drücken = 513 oder beim loslassen = 514
if equ(%lastmessage,513)
@Csleep(150) Damit man bei diesem Beispiel den Tastendruck sieht
locate 2,40
Print Einzelklick auf Button
endif
setfocus(%Hwnd)
ELSEIF GETFOCUS(BUTTON4&) BUTTON
@Csleep(150)
LET ENDE%= 1
elseif equ(%lastmessage,256)
locate 2,40
Print Du hast eine Taste gedrückt
setfocus(%Hwnd)
elseif equ(%lastmessage,257)
locate 2,40
Print Du hast die Taste losgelassen
setfocus(%Hwnd)
elseif equ(%lastmessage,260)
locate 2,40
Print Du hast die Alt-Taste gedrückt
setfocus(%Hwnd)
elseif equ(%lastmessage,261)
locate 2,40
Print Alt-Taste gedrückt + Taste
setfocus(%Hwnd)
elseif equ(%lastmessage,513)
locate 2,40
Print Du hast die linke Mousetaste gedrückt
setfocus(%Hwnd)
elseif equ(%lastmessage,514)
locate 2,40
Print Du hast die linke Mousetaste losgelassen
setfocus(%Hwnd)
elseif equ(%lastmessage,519)
locate 2,40
Print Du hast die mittlere Mousetaste gedrückt
setfocus(%Hwnd)
elseif equ(%lastmessage,520)
locate 2,40
Print Du hast die mittlere Mousetaste losgelassen
setfocus(%Hwnd)
elseif equ(%lastmessage,516)
locate 2,40
Print Du hast die rechte Mousetaste gedrückt
setfocus(%Hwnd)
elseif equ(%lastmessage,517)
locate 2,40
Print Du hast die rechte Mousetaste losgelassen
setfocus(%Hwnd)
elseif equ(%lastmessage,522)
locate 2,40
Print Du hast das Mausrad bewegt
setfocus(%Hwnd)
elseif equ(%lastmessage,160)
locate 2,40
Print Der Cursor ist außerhalb des Arbeitsbereiches
setfocus(%Hwnd)
elseif equ(%lastmessage,512)
locate 2,40
Print Du bewegst die Mouse
locate 2,40
setfocus(%Hwnd)
Print
If eqoG(x&,15) and eqoL(X&,80) and eqoG(Y&,417) and eqoL(Y&,444)
settext Button1&,Danke
Else
settext Button1&,Komm her
endif
ENDIF
GetCursorPos(point#)
ScreenToClient(%hwnd,point#)
x&=@long(point#,0)
y&=@long(point#,4)
settext statbar&,MouseX= +str$(X&)+ +MouseY= =s2>+str$(Y&)+
WEND
|
| | | | |
|
Zum QuelltextOptions du sujet | 1.827 Views |
Themeninformationencet Thema hat 1 participant: |
|