| |
|
|
Georg Hovenbitzer | Hallo zusammen,
ich wollte mal diese On Unit testen, bekomme beim Aufruf immer den Fehler:
Zeile 1 in On.pcu: $DEFINE XPSE
XPSE habe ich nicht installiert, sollte aber doch auch ohne gehen - oder ? KompilierenMarkierenSeparieren $U usermessages.pcu = user.
$U lists.pcu = list.
$U On.pcu = On.
Declare myEvent&
WindowStyle (2 | 8 | 16 | 32 | 128 | 512)
Window ((%MaxX - 800) / 2),((%MaxY - 600) / 2)-800,600
Edit& = @Control(Edit,,$54001001,20,470,754,20,%hWnd,301,%hInstance,$20000)
myEvent& = on.event(28,Edit&) OnChange
WhileNot %Key = 2
WaitInput
If %UMessage = myEvent&
Print Treffer :-)
EndIf
EndWhile
on.delevents
on.Close
End
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 01.12.2006 ▲ |
|
|
|
|
RGH | $DEFINE gibt es erst ab XProfan 10. Die PCU setzt also XProfan 10 vorraus.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 01.12.2006 ▲ |
|
|
|
|
| |
|
| |
|
|
|
Georg Hovenbitzer | Verdammt Bitte mit der Pressung der CDs beeilen
Ich habe es aber auch mal anders versucht: KompilierenMarkierenSeparierenDef on(4) !on.dll,on
Declare OnDll&
Declare Edit&
OnDll& = @Usedll(on.dll)
Cls
Edit& = @Control(Edit,,$54001001,50,10,100,20,%hWnd,301,%hInstance,$20000)
On(28,Edit&,102426,%Hwnd)
UserMessages 102426
WhileNot %Key = 2
WaitInput
If %UMessage = 102426
Print Treffer
EndIf
EndWhile
On(28,Edit&,102426,0)
FreeDLL OnDll&
End
Hat aber auch keinen Erfolg gebracht, eine Änderung im Edit wird nicht erkannt. Wenn ich die On2.dll von hier versuche, bekomme ich immer eine Schutzverletzung. |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 01.12.2006 ▲ |
|
|
|
|
| Hm schau mal in den Unitsource wie die DLL tatsächlich verwendet wird. Hier nochmal die neuste DLLVersion. |
|
|
| |
|
|
|
Georg Hovenbitzer | Hallo iF,
kannst du mir vielleicht etwas helfen, ich komme mit dem Source der PCU nicht klar. Mir fällt es doch recht schwer XPSE Code zu lesen.
Ich habe nun folgendes ohne Erfolg versucht: KompilierenMarkierenSeparierenDeclare OnDll&
Declare Edit&
Declare ProcAddr&
Declare UMsg&
Cls
OnDll& = @Usedll(on.dll)
ProcAddr& = @External(kernel32,GetProcAddress,OnDll&,on)
Edit& = @Control(Edit,,$54001001,50,10,100,20,%hWnd,301,%hInstance,$20000)
UMsg& = @Call(ProcAddr&,28,Edit&,102426,%hWnd)
UserMessages UMsg&,102426
WhileNot %Key = 2
WaitInput
If %UMessage = UMsg&
Print Treffer1
ElseIf %UMessage = 102426
Print Treffer2
EndIf
EndWhile
@Call(ProcAddr&,28,Edit&,102426,0)
FreeDLL OnDll&
End
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 01.12.2006 ▲ |
|
|
|
|
| |
|
| |
|
|
|
| Geht ganz prima: KompilierenMarkierenSeparieren {$cleq}
Declare OnDll&
Declare Edit&
Declare ProcAddr&
Declare eventID&
Cls
OnDll& = @Usedll(on.dll)
ProcAddr& = @External(kernel32,GetProcAddress,OnDll&,on)
Edit& = @Control(Edit,,$54001001,50,10,100,20,%hWnd,301,%hInstance,$20000)
eventID& = @Call(ProcAddr&,515,Edit&,102426,%hwnd)
print eventID&
UserMessages 102426
WhileNot %Key = 2
WaitInput
If %UMessage = 102426
Print Treffer1
EndIf
EndWhile
@Call(ProcAddr&,515,Edit&,102426,0)
FreeDLL OnDll&
End
|
|
|
| |
|
|
|
Georg Hovenbitzer | Stimmt, auch in meinem Code klappt es mit 515 LinksDoppelKlick. Jetzt habe ich erst kappiert, es klappen nur die Messages die in der Unit angegeben sind Da ich bis dato es mit der EasyEvent gemacht habe, bin ich nicht auf die Idee gekommen das OnChange nicht unterstützt wird.
Was ich aber immer noch nicht geschaft habe, ist eine Proc aufzurufen: KompilierenMarkierenSeparierenDeclare OnDll&
Declare Edit&
Declare ProcAddr&
Declare eventID&
Cls
Proc Test
Print per Proc
Return 0
EndProc
OnDll& = @Usedll(on.dll)
ProcAddr& = @External(kernel32,GetProcAddress,OnDll&,on)
Edit& = @Control(Edit,,$54001001,150,100,100,20,%hWnd,301,%hInstance,$20000)
@Call(ProcAddr&,0,0,0,1)
eventID& = @Call(ProcAddr&,521,Edit&,@ProcAddr(Test,0),%hWnd)
Print eventID& = + @Str$(eventID&)
WhileNot %Key = 2
WaitInput
EndWhile
@Call(ProcAddr&,515,Edit&,@ProcAddr(Test,0),0)
FreeDLL OnDll&
End
Wo liegt denn hier der Fehler schon wieder |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 01.12.2006 ▲ |
|
|
|
|
| Stop! Das ist unrichtig das nur die Messages funktionieren die in der Unit deklariert sind. Die DLL macht keinen Unterschied.
Die Sache ist eine andere! WaitInput lässt sich manchmal nicht durchbrechen - bei bestimmten Messages. Bei Scrollbars hab ich es auch schon festgestellt das beim Scrollen waitinput trotz gesetzter Message nicht durchbrochen wird.
Das mit der Proc geht etwas anders - wart ich schau mal: |
|
|
| |
|
|
|
| Schau mal so gehts: KompilierenMarkierenSeparierenDeclare OnDll&
Declare Edit&
Declare ProcAddr&
Declare eventID&
Cls
OnDll& = @Usedll(on.dll)
ProcAddr& = @External(kernel32,GetProcAddress,OnDll&,on)
Edit& = @Control(Edit,,$54001001,50,10,100,20,%hWnd,301,%hInstance,$20000)
Call(ProcAddr&,0,0,0,1)
eventID& = @Call(ProcAddr&,515,Edit&,procaddr(doit,3),%hwnd)
... KompilierenMarkierenSeparieren |
|
|
| |
|
|
|
| Dein OnChange wird vlt. garnicht ausgelöst..., probier mal
WM_KEYDOWN = { $100 | 256 } WM_KEYFIRST = { $100 | 256 } WM_KEYLAST = { $108 | 264 } WM_KEYUP = { $101 | 257 } |
|
|
| |
|
|