Deutsch
Forum

Erledigt: CBN_SelChange per SubClassProc abfangen

 

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 könnte man natürlich 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:  [...]  .
 
05.02.2010  
 




Georg
Hovenbitzer
Hallo iF,

vielen Dank für die schnelle Antwort.
Ich habe es mal versucht in reinem Profan nachzustellen, ohne Erfolg.

Wenn ich den 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 läuft, 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?
 
05.02.2010  
 




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 für die schnelle Antwort.
Ich habe es mal versucht in reinem Profan nachzustellen, ohne Erfolg.


Ich hab Dir schon das Profanste hingeschrieben und einen FastMode benötigt es (zum Glück) auch nicht.
 
05.02.2010  
 




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.
 
05.02.2010  
 




Detlef
Jagolski
So mache ich das!! Klappt immer.
ElseIf SubClassMessage(DesignForm&, ~WM_COMMAND)

Select &sLParam

    CaseOf DlgChoiceBox1&

    If HiWord(&sWParam) = ~CBN_SELCHANGE

        SetMenuItem 5003
        Set("WinProc",0)

    EndIf

    CaseOf Dlg2ChoiceBox1&

    If HiWord(&sWParam) = ~CBN_SELCHANGE

        SetMenuItem 9002
        Set("WinProc",0)

    EndIf

EndSelect

 
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  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

9.336 Betrachtungen

Unbenanntvor 0 min.
Rainer Hoefs10.06.2023
H.Brill05.10.2020
Jörg Sellmeyer16.06.2020
Andreas Koch03.01.2012

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie