Forum | | | | | on(Event) (Download)
Die Unit (Sourcecode ist beiliegend!), ermöglicht (ohne Fastmode und Prozeduradressen!) das Abprüfen von Doppelklicks oder Rechte-Maustaste-Aktionen auf Dialogelementen und Controls wie Listboxen, Buttons... Auch das Neuzeichnen von Dialogen ist nun ein Kinderspiel.
Schade das Thomas seine easyVent nicht umbauen kann - also habe ich mal versucht seine dll auf minimaler Basis nachzustellen mit dem entscheidenen Punkt das es ohne Procaddr funktioniert! Und es funktioniert wunderbar!
Beispiel: KompilierenMarkierenSeparieren {$cleq}
$U on.pcu = on.
Def GetSysColor(1) !"User32","GetSysColor"
declare lb&,dlg&
//unsichtbares Hauptfenster damit lecker messages angekommen
windowstyle 80 | 1024
window 0,0 - 0,0
showwindow(%hwnd,0)
//
windowstyle 512+8
dlg&:=createdialog(0,"MyDlg",100,100,640,480)
lb&:=createbutton(dlg&,"",10,30,100,100)
on.event "paint" ,dlg& ,12343
on.event "close" ,dlg& ,12344
on.event "ldklick" ,lb& ,12345
on.event "rklick" ,lb& ,12346
on.event "mouseover" ,lb& ,12347
on.event "mouseleave" ,lb& ,12348
PaintDlg 0
while 1
waitinput
case %umessage==12343 : paintDlg 0
case %umessage==12344 : break
case %umessage==12345 : settext dlg&,"dblklick "+str$(&gettickcount)
case %umessage==12346 : settext dlg&,"rklick "+str$(&gettickcount)
case %umessage==12347 : settext lb&,"Hau ab!"
case %umessage==12348 : settext lb&,""
wend
on.delevent "paint" ,dlg& ,12343
on.delevent "close" ,dlg& ,12344
on.delevent "ldklick" ,lb& ,12345
on.delevent "rklick" ,lb& ,12346
on.delevent "mouseover" ,lb& ,12347
on.delevent "mouseleave",lb& ,12348
on.close
end
Proc PaintDlg
parameters u&
startpaint dlg&
usefont "MS Sans Serif",10,0,0,0,u&
textcolor $00FF0000,-1
drawtext 10,300,"https://ich.hab-doch-garkeine-homepage.de"
endpaint
endproc
|
| | | | |
| | | So - neue Version hochgeladen - das Entfernen von Events geht jetzt auch indem der letzte Parameter einer Eventangabe 0 (null) ist.
Event setzen:
On(MessageNummer ,ControlHandle,UserMessage,HauptfensterHWND)
Event löschen:
On(MessageNummer ,ControlHandle,UserMessage,0)
Es können mehrere Events pro Control gesetzt werden!
Die wichtigsten Konstanten hierfür sollten sein: KompilierenMarkierenSeparieren |
| | | | |
| | | So in all meinen Tests - keine Fehler.
Ich glaub die DLL kann jetzt von Euch getestet werden.
Es ist somit nun denkbar einfach Doppelklicks oder Rechtemaustasten auf Controls wie Buttons oder Listboxen fehlerfrei abzufangen. Es ist kein Fastmode, und keine WProc nötig! Die DLL wandelt entsprechende Messages in Usermessages um. |
| | | | |
| | | Mal schauen vielleicht kann ich das ganze noch mehr vereinfachen... |
| | | | |
| | | Wow wm_close um zu prüfen auf welchen Dialog das [X] gedrückt wurde-Test: KompilierenMarkierenSeparierenDeclare Lb&,Dll&,Lb2&,Lb3&
Def On(4) !"on.dll","on"
Dll&:=Usedll("on.dll")
Cls
Lb&:=Create("Button",%Hwnd,"",10,50,100,100)
Lb2&:=Createdialog(%hwnd,"",10,10,200,200)("Button",%Hwnd,"",210,50,100,100)
Lb&:=Createdialog(%hwnd,"",310,310,200,200)("Button",%Hwnd,"",210,50,100,100)
Lb3&:=Create("ListBox",%Hwnd,"",110,50,100,100)
// on EVENT auf HANDLE putmessage MESSAGE an FENSTER
On(515 , Lb&,102425,%Hwnd)/*~WM_LBUTTONDBLCLK*/
On(16 , lb2&,102426,%Hwnd)/*~WM_LBUTTONDBLCLK*/
On(515 , Lb3&,102427,%Hwnd)/*~WM_LBUTTONDBLCLK*/
whileloop 10:addstring(lb&,str$(&loop)):wend
Usermessages 102425,102426,102427
While 1
Waitinput
Settext %Hwnd,Str$(&Gettickcount)
If %Umessage==102425
Print "jaul!"
Elseif %Umessage==102426
Print "ooar!"
Elseif %Umessage==102427
Print "ach"
Endif
Wend
End
|
| | | | |
| | | Neuzeichnen auf Dialogen? Juhu kein Problem! Und alles ohne WProc und fastmode KompilierenMarkierenSeparierenXPSE-Quelltext erkannt. Precompiler XPSE für Ausführung benötigt.
Declare Lb&,Dll&
Def On(4) !"on.dll","on"
Dll&:=Usedll("on.dll")
Cls
Lb&:=Createdialog(%hwnd,"",310,310,200,200)("Button",%Hwnd,"",210,50,100,100)
On(15,lb&,102425,%Hwnd)
On(16,lb&,102426,%Hwnd)
Usermessages 102425,102426
drw
While 1
Waitinput
Settext %Hwnd,Str$(&Gettickcount)
If %Umessage==102425
drw
elseif %umessage=102426
on(15,lb&,102425,0)
on(16,lb&,102426,0)
destroywindow(lb&)
Endif
Wend
End
proc drw
startpaint lb&
drawtext 10,10,"lalala"
endpaint
endproc
|
| | | | |
| | Jac de Lad | Ich habs noch nicht testen können, aber wenns funktioniert ist das das i-Tüpfelchen für XProfan!
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 14.09.2006 ▲ |
| |
| | Jac de Lad | Welche Version ist nun die richtigeß Wenn ich auf den Link ganz oben klicke kommt eine fast 600kB-Datei, unten im Beitrag (wo x mal gedownloaded steht) kommt nur eine 9kB-Datei...leicht verwirrend. |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 14.09.2006 ▲ |
| |
| | | Beides ist das selbe! Die eine ist nicht 600kb groß! Ich glaub Dein Browser spinnt, aber wart ich hab hier gleich noch was besseres! |
| | | | |
| | | So! Schau Dir mal den obigen Download an - und das Beispiel! Nun ists wirklich kinderleicht und man müsste sich mit der Unit (source liegt dabei) nichtmal mehr um die DLL kümmern! KompilierenMarkierenSeparieren {$cleq}
$U on.pcu = on.
Def GetSysColor(1) !"User32","GetSysColor"
declare lb&,dlg&
//unsichtbares Hauptfenster damit lecker messages angekommen
windowstyle 80 | 1024
window 0,0 - 0,0
showwindow(%hwnd,0)
//
windowstyle 512+8
dlg&:=createdialog(0,"MyDlg",100,100,640,480)
lb&:=createbutton(dlg&,"",10,30,100,100)
on.event "paint" ,dlg& ,12343
on.event "close" ,dlg& ,12344
on.event "ldklick" ,lb& ,12345
on.event "rklick" ,lb& ,12346
on.event "mouseover" ,lb& ,12347
on.event "mouseleave" ,lb& ,12348
PaintDlg 0
while 1
waitinput
case %umessage==12343 : paintDlg 0
case %umessage==12344 : break
case %umessage==12345 : settext dlg&,"dblklick "+str$(&gettickcount)
case %umessage==12346 : settext dlg&,"rklick "+str$(&gettickcount)
case %umessage==12347 : settext lb&,"Hau ab!"
case %umessage==12348 : settext lb&,""
wend
on.delevent "paint" ,dlg& ,12343
on.delevent "close" ,dlg& ,12344
on.delevent "ldklick" ,lb& ,12345
on.delevent "rklick" ,lb& ,12346
on.delevent "mouseover" ,lb& ,12347
on.delevent "mouseleave",lb& ,12348
on.close
end
Proc PaintDlg
parameters u&
startpaint dlg&
usefont "MS Sans Serif",10,0,0,0,u&
textcolor $00FF0000,-1
drawtext 10,300,"https://ich.hab-doch-garkeine-homepage.de"
endpaint
endproc
|
| | | | |
| | Jac de Lad | Danke, ich probiers heute gleich aus!
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 14.09.2006 ▲ |
| |
| | Jac de Lad | Gleich die erste Frage: Gibt es einen oder mehrere Bereiche von Usermessages, die man nicht definieren sollte (soll ich beispielsweise als message nicht 1 nehmen, warum auch immer)?
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 14.09.2006 ▲ |
| |
|
AntwortenThemenoptionen | 4.382 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |