Italia
Foro

Subclassing eines Edit-Feldes

 
- Page 1 -



Stephan
Sonneborn
Ciao,

wieso wird die Message EM_GETMODIFY nicht ausgewertet, die Message WM_KEYUP aber schon?
'************************************************************************************************
'* SubClassing                                                                                  *
'************************************************************************************************
 $H MESSAGES.PH
DECLARE Edit&
DECLARE Ende%
'+----------------------------------------------------------------------------------------------+

SUBCLASSPROC

    IF SUBCLASSMESSAGE(Edit&, ~EM_GETMODIFY)

        'IF SUBCLASSMESSAGE(Edit&, ~WM_KEYUP)

        IF GETTEXT$(Edit&) = "Ende"

            LOCATE 10,1
            PRINT "Einfach klicken per "; GETTEXT$(Edit&)
            Ende% = 1

        ENDIF

        SET("WinProc", 0)

    ENDIF

ENDPROC

'+----------------------------------------------------------------------------------------------+
CLS
Edit& = CREATE("Edit",%HWND, "", 10,10,100,20)
SUBCLASS Edit&,1

WHILENOT Ende%

    WAITINPUT

WEND

SUBCLASS Edit&,0
END
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
04.10.2020  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


Matthias
Arlt
Wenn schon SubClassing, dann etwa so:
SUBCLASSPROC

    IF SUBCLASSMESSAGE(Edit&, ~WM_KEYUP) OR SUBCLASSMESSAGE(Edit&, ~WM_PASTE)

        SET("WinProc", 1)
        LOCATE 10,1
        PRINT "Subclassing erfolgreich"

    ENDIF

    IF SendMessage(Edit&,~EM_GETMODIFY,0,0)

        IF GETTEXT$(Edit&) = "Ende"

            PRINT "Einfach klicken per "; GETTEXT$(Edit&)
            waitinput
            Ende% = 1

        ENDIF

    ENDIF

ENDPROC


Mit solcher "Eingabeaufforderung" in der SubClassproc ist das aber keine sehr elegante Lösung... Und eigentlich braucht es dafür kein SubClassing, denn so geht es auch:
CLS
Edit& = CREATE("Edit",%HWND, "", 10,10,100,20)

WHILENOT Ende%

    WAITINPUT

    IF SendMessage(Edit&,~EM_GETMODIFY,0,0)

        IF GETTEXT$(Edit&) = "Ende"

            PRINT "Einfach klicken per "; GETTEXT$(Edit&)
            waitinput
            Ende% = 1

        ENDIF

    ENDIF

WEND

END

Es sei denn, Du brauchst das SubClassing noch per weitere, hier noch nicht enthaltene Funktionen...

Das EM_GETMODIFY ist in beiden Fällen entbehrlich und dient nur zur Demo, wo und wie man es anwendet.

Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
07.10.2020  
 




Matthias
Arlt

lt. Win32hlp: An application sends an EM_GETMODIFY message to determine whether the content of an edit control has been modified.


EM_GETMODIFY müßte also zunächst an das Edit gesendet werden. Wie WM_KEYUP ja auch...durch Loslassen einer Taste...

Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
05.10.2020  
 



EM_GETMODIFY  [...]  soll man (per SendMessage) an das Edit senden und am Rückgabewert erkennen, ob das Edit "modifiziert" wurde.

Subclassmessage wäre hierbei hilfreich wenn Windows die Nachricht ans Edit sendet, was aber nicht der Fall ist.

Es gibt aber auch EN_CHANGE (  [...]  ) - vlt. eher was Du suchst.
 
05.10.2020  
 




Stephan
Sonneborn
iF (05.10.2020)
Es gibt aber auch EN_CHANGE (  [...]  ) - vlt. eher was Du suchst.


Hm. Nein. Geht auch nicht...
WM_KEYUP wäre ja OK, aber wenn man etwas per Zwischenablage und Kontextmenü einfügt, bekomme ich das nicht mit...
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
05.10.2020  
 




Matthias
Arlt

...wenn man etwas per Zwischenablage und Kontextmenü einfügt, bekomme ich das nicht mit...


Doch, einfach auf WM_PASTE reagieren...genau wie WM_KEYUP.
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
05.10.2020  
 




Stephan
Sonneborn
Hm... Irgendwie kann ich dann gar nichts mehr einfügen per CTRL+V oder RMT+Einfügen...
'************************************************************************************************
'* SubClassing                                                                                  *
'************************************************************************************************
 $H MESSAGES.PH
DECLARE Edit&
DECLARE Ende%
'+----------------------------------------------------------------------------------------------+

SUBCLASSPROC

    'IF SUBCLASSMESSAGE(Edit&, ~EM_GETMODIFY)

    IF SUBCLASSMESSAGE(Edit&, ~WM_KEYUP) OR SUBCLASSMESSAGE(Edit&, ~WM_PASTE)

        IF GETTEXT$(Edit&) = "Ende"

            LOCATE 10,1
            PRINT "Einfach klicken per "; GETTEXT$(Edit&)
            Ende% = 1

        ENDIF

        SET("WinProc", 0)

    ENDIF

ENDPROC

'+----------------------------------------------------------------------------------------------+
CLS
Edit& = CREATE("Edit",%HWND, "", 10,10,100,20)
SUBCLASS Edit&,1

WHILENOT Ende%

    WAITINPUT

WEND

SUBCLASS Edit&,0
END
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
06.10.2020  
 




Matthias
Arlt
Der einzufügende String muß naturalmente auch beim Edit ankommen. Also die Message nicht nur abfangen, sondern nach Eingang auch an die originale WindowProc vom Edit weiterreichen per 'SET("WinProc", 1)'. Oder aber selbst behandeln (bspw. 'settext'...)

Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
06.10.2020  
 




Stephan
Sonneborn
Matthias Arlt (06.10.2020)
Der einzufügende String muß naturalmente auch beim Edit ankommen. Also die Message nicht nur abfangen, sondern nach Eingang auch an die originale WindowProc vom Edit weiterreichen per 'SET("WinProc", 1)'. Oder aber selbst behandeln (bspw. 'settext'...)

Saluto Matthias


Vielen Dank per Deine Aiuto, Matthias!
Hab jetzt WinProc wieder eingeschaltet. Danach wollte ich dann das Edit-Feld auswerten... ohne Erfolg.
'************************************************************************************************
'* SubClassing                                                                                  *
'************************************************************************************************
 $H MESSAGES.PH
DECLARE Edit&
DECLARE Ende%
'+----------------------------------------------------------------------------------------------+

SUBCLASSPROC

    'IF SUBCLASSMESSAGE(Edit&, ~EM_GETMODIFY)

    IF SUBCLASSMESSAGE(Edit&, ~WM_KEYUP) OR SUBCLASSMESSAGE(Edit&, ~WM_PASTE)

        SET("WinProc", 1)
        LOCATE 10,1
        PRINT "Subclassing erfolgreich"

        IF GETTEXT$(Edit&) = "Ende"

            PRINT "Einfach klicken per "; GETTEXT$(Edit&)
            Ende% = 1

        ENDIF

    ENDIF

ENDPROC

'+----------------------------------------------------------------------------------------------+
CLS
Edit& = CREATE("Edit",%HWND, "", 10,10,100,20)
SUBCLASS Edit&,1

WHILENOT Ende%

    WAITINPUT

WEND

SUBCLASS Edit&,0
END
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
07.10.2020  
 




Matthias
Arlt
Wenn schon SubClassing, dann etwa so:
SUBCLASSPROC

    IF SUBCLASSMESSAGE(Edit&, ~WM_KEYUP) OR SUBCLASSMESSAGE(Edit&, ~WM_PASTE)

        SET("WinProc", 1)
        LOCATE 10,1
        PRINT "Subclassing erfolgreich"

    ENDIF

    IF SendMessage(Edit&,~EM_GETMODIFY,0,0)

        IF GETTEXT$(Edit&) = "Ende"

            PRINT "Einfach klicken per "; GETTEXT$(Edit&)
            waitinput
            Ende% = 1

        ENDIF

    ENDIF

ENDPROC


Mit solcher "Eingabeaufforderung" in der SubClassproc ist das aber keine sehr elegante Lösung... Und eigentlich braucht es dafür kein SubClassing, denn so geht es auch:
CLS
Edit& = CREATE("Edit",%HWND, "", 10,10,100,20)

WHILENOT Ende%

    WAITINPUT

    IF SendMessage(Edit&,~EM_GETMODIFY,0,0)

        IF GETTEXT$(Edit&) = "Ende"

            PRINT "Einfach klicken per "; GETTEXT$(Edit&)
            waitinput
            Ende% = 1

        ENDIF

    ENDIF

WEND

END

Es sei denn, Du brauchst das SubClassing noch per weitere, hier noch nicht enthaltene Funktionen...

Das EM_GETMODIFY ist in beiden Fällen entbehrlich und dient nur zur Demo, wo und wie man es anwendet.

Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
07.10.2020  
 




Stephan
Sonneborn
Hallo Matthias,

vielen Dank per Dein Beispiel!

Das macht es klarer! Ich wollte mich einfach mal an die "neuen" Funktionen wagen. Als Ziel soll es ja ein Vokabeltrainer werden.

Und ich wollte übers Subclassing einen Zeitmesser laufen lassen. Klappt auch sehr gut!

Und dann wollte ich während der Eingabe einer Antwort mit einem Wechsel eines Icons per richtig oder falsch eine Rückmeldung geben.

Das Beispiel oben sollte das Problem nur vereinfacht darstellen. Ich denke, jetzt bekomme ich es hin!
 
XProfan X4
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
08.10.2020  
 




Matthias
Arlt
Hallo Stephan,
dann gutes Gelingen! Freut mich, wenn ich ein wenig dazu beitragen konnte...
Saluto Matthias
 
Alle Sprachen
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
08.10.2020  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

6.110 Views

Untitledvor 0 min.
Gast.0815 vor 13 Tagen
Member 862464120.05.2024
Normann Strübli03.02.2023
Walter30.12.2022
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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