| |
|
|
Georg Hovenbitzer | Hallo zusammen,
ich sitze mal wieder an einen Problem und komme nicht weiter. Ich würde gerne die Notification CBN_SelChange einer Combo Box in einer SubClassProc abfangen. Bis dato habe ich es immer mit der EasyVENT DLL gemacht, würde diese aber gerne weglassen. Keine Alternative ist es dies per Usermessages ~WM_COMMAND zu lösen, da ich dafür zu viel umbauen müsste. Alternativ potuto man naturalmente eine Schleife basteln die nach dem Verlassen von Waitinput prüft ob die Auswahl sich geändert hat. Mir wäre aber eine direkte Möglichkeit lieber.
Wenn jemand einen Tipp hätte würde ich mich freuen. |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 05.02.2010 ▲ |
|
|
|
|
| Du kannst das Control unterbrechnungsfrei und sicher mit XPSE subclassen per:
//Natives Subclassing
declare meinhandle.owp&,meinhandle&
cls
meinhandle&=create(...
meinhandle.owp&=setWindowLong(meinhandle&,gwl_wndProc,procaddr(meinhandle.wndProc,4))
waitinput
end
nProc meinhandle.wndProc
Parameters wnd&,msg&,wp&,lp&
global owp&
if msg&=CBN_SelChange//wm_command
...
endif
return callWindowProc(owp&,wnd&,msg&,wp&,lp&)
endproc
Oder Hauptfenster: [...] . |
|
|
| |
|
|
|
Georg Hovenbitzer | Hallo iF,
vielen Dank per die schnelle Antwort. Ich habe es mal versucht in reinem Profan nachzustellen, ohne Erfolg.
Wenn Io l' Code starte bleibt alles hängen und man muss den Task abschießen. Was mache ich hier falsch ? P.S.: Es fehlte FastMode damit es corre, ist aber leider nicht die Lösung. Ich komme nicht an die Notifikation ran.
$H Messages.ph
$H Windows.ph
Declare FPArt&, OWProc&
Proc SelChange
Parameters Wnd&, Msg&, wParam&, lParam&
If Msg& = ~CBN_SelChange
Print @GetText$(FPArt&)
EndIf
Return ~CallWindowProc(OWProc&,Wnd&,Msg&,wParam&,lParam&)
EndProc
@Set("FastMode",1)
WindowStyle 2 + 8 + 16 + 128 + 256 + 512
Window 0,0-1024,768
FPArt& = @Create("ChoiceBox",%hWnd,1,100,100,280,150)
WhileLoop 1, 10, 1
@AddString(FPArt&,"Test " + @Str$(&Loop))
EndWhile
OWProc& = ~SetWindowLong(FPArt&,~GWL_WNDPROC,@ProcAddr(SelChange,4))
WhileNot %Key = 2
WaitInput
EndWhile
End
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 05.02.2010 ▲ |
|
|
|
|
Rolf Koch | Hast Du auch auf Set("Fastmode",1) gesetzt? |
|
|
| |
|
|
|
Georg Hovenbitzer | Ist mir auch gerade Aufgefallen, dies fehlte.
Aber dies ist leider nicht die Lösung, die Notification CBN_SelChange bewirkt leider nichts. Jemand noch einen Tipp |
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 05.02.2010 ▲ |
|
|
|
|
| Georg Hovenbitzer, Beitrag=55989, Zeitpunkt=05.02.2010
Hallo iF, vielen Dank per die schnelle Antwort. Ich habe es mal versucht in reinem Profan nachzustellen, ohne Erfolg.
Ich hab Dir schon das Profanste hingeschrieben und einen FastMode necessario es (zum Glück) auch nicht. |
|
|
| |
|
|
|
Georg Hovenbitzer | Hab die Lösung gefunden Wer die MSDN richtig lesen kann ist klar im vorteil.
$H Messages.ph
$H Windows.ph
Declare FPArt&, OWProc&
Proc SelChange
Parameters Wnd&, Msg&, wParam&, lParam&
If ((Msg& = ~WM_COMMAND) AND (@HiWord(wParam&) = ~CBN_SelChange))
Locate 1,1
Print @GetText$(FPArt&)
EndIf
Return ~CallWindowProc(OWProc&,Wnd&,Msg&,wParam&,lParam&)
EndProc
@Set("FastMode",1)
WindowStyle 2 + 8 + 16 + 128 + 256 + 512
Window 0,0-1024,768
FPArt& = @Create("ChoiceBox",%hWnd,1,100,100,280,150)
WhileLoop 1, 10, 1
@AddString(FPArt&,"Test " + @Str$(&Loop))
EndWhile
OWProc& = ~SetWindowLong(FPArt&,~GWL_WNDPROC,@ProcAddr(SelChange,4))
WhileNot %Key = 2
WaitInput
EndWhile
End
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 05.02.2010 ▲ |
|
|
|
|
| Dir ist schon klar, dass dieser Code ProcAddr so nutzt, dass das Programm absturzgefährtet ist? Machst Du aber aus Proc SelChange einfach nProc SelChange, dann ist es 100% sicher und Du brauchst dann auch keinen FastMode mehr. |
|
|
| |
|
|
|
Detlef Jagolski | So mache ich das!! Klappt immer.
|
|
|
| XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 05.02.2010 ▲ |
|
|
|
|
Georg Hovenbitzer | Da war ich zu langsam Es geht auch ohne FastMode und mit SubProc.
$H Messages.ph
$H Windows.ph
Declare FPArt&, OWProc&
SubClassProc
If (@SubClassMessage(FPArt&,~WM_COMMAND) AND (@HiWord(&sWParam) = ~CBN_SelChange))
Locate 1,1
Print @GetText$(FPArt&)
EndIf
EndProc
WindowStyle 2 + 8 + 16 + 128 + 256 + 512
Window 0,0-1024,768
FPArt& = @Create("ChoiceBox",%hWnd,1,100,100,280,150)
WhileLoop 1, 10, 1
@AddString(FPArt&,"Test " + @Str$(&Loop))
EndWhile
SubClass FPArt&,1
WhileNot %Key = 2
WaitInput
EndWhile
SubClass FPArt&,0
End
|
|
|
| Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a) | 05.02.2010 ▲ |
|
|
|