| |
|
|
- Seite 1 - |
|
Stephan Sonneborn | Hallo,
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 für "; 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 X4Schö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:
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:
Es sei denn, Du brauchst das SubClassing noch für 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.
Gruß 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...
Gruß 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. |
|
|
| |
|
|
|
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 X4Schö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 für "; 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 X4Schö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ß natürlich 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'...)
Gruß Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 06.10.2020 ▲ |
|
|
|
|
Stephan Sonneborn | Matthias Arlt (06.10.2020)
Der einzufügende String muß natürlich 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'...)
Gruß Matthias
Vielen Dank für Deine Hilfe, 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 für "; 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 X4Schö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:
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:
Es sei denn, Du brauchst das SubClassing noch für 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.
Gruß Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 07.10.2020 ▲ |
|
|
|
|
Stephan Sonneborn | Hallo Matthias,
vielen Dank für 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 für richtig oder falsch eine Rückmeldung geben.
Das Beispiel oben sollte das Problem nur vereinfacht darstellen. Ich denke, jetzt bekomme ich es hin! |
|
|
| XProfan X4Schö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... Gruß Matthias |
|
|
| |
|
|