| |
|
|
CB | Hallo, liebe Profaner! Ich steh mal wieder an. Ich brauche in meinem Programm zwecks Automatisierung verschiedener Edit-Controls die Abfrage derselben über Usermessages. Das funkioniert auch perfekt. Bloß kann ich, seit ich die Usermessages in meine Hauptschleife eingebaut habe, mein ExtMenu nicht mehr über MenuItem(N) abfragen. Deshalb meine Frage: (Wie) kann ich das gewählte Menuitem über Usermessages ermitteln? Hat einer von Euch eine Lösung parat? Den relevanten Teil meiner DLL findet Ihr in der Menudll.dll. Gruß, Christian |
|
|
| |
|
|
|
Rolf Koch | Hi, nur ein Vorschlag: Was hälst Du davon einfach mal per Print %message oder %lastmessage das Result anzuzeigen, wenn Du auf ein Menuitem klickst?
Rolf |
|
|
| |
|
|
|
Frank Abbing | Hi.
Meine Vorschläge. API:
GetWindowLong() mit GWL_ID Flag oder GetClassLong() mit GCL_MENUNAMEFlag
Nicht getestet... |
|
|
| |
|
|
|
CB | @ Rolf: Hab ich in der Zwischenzeit probiert. Mit %(Last)Message komme ich leider nicht weiter. Das Resultat ist immer (abwechselnd) 32, 312 oder 512, aber ohne Connex zum jeweils gewählten Menupunkt.
@Frank: Ich denke, mit GetClassLong() könnte es klappen, bloß waren meine Experimente diesbezüglich nicht erfolgreich, dazu würde ich ein bißchen Nachhilfeunterricht brauchen... :?:
Gruß, Christian |
|
|
| |
|
|
|
Frank Abbing | Hi,
nur mit deiner Dll kann ich nicht testen. Am besten postet du auch den dazugehörige Code (ruhig einen Testcode), wie du die Sache bisher versuchst. Dann kann man dir besser helfen. |
|
|
| |
|
|
|
Jörg Sellmeyer | Hallo Christian, Hast Du vielleicht $0111 als usermessage deklariert? Dann hilft Dir das evtl. weiter:
Declare menuitem% Cls UserMessages $0111wm_command Declare ende% WhileNot ende% WaitInput If %mousepressed=2 TrackMenu %mousex,%mousey CreateMenu AppendMenu 100,test 1 AppendMenu 101,test 2 menuitem%=&uwparam print menuitem%,%menuitem EndIf IF Equ(%key,2) Let ende%=1 EndIf Wend
Gruß Jörg |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 03.01.2005 ▲ |
|
|
|
|
CB | Anm.: Sollte diese Nachricht schon mal vorhanden sein - ich bin gerade nach einem Backspace rausgeflogen...
Hi, nach 2 Tagen heftiger Fehlersuche melde ich mich wieder zurück. Da waren noch ein paar andere grobe Hunde im Ablauf. Das Extmenu geht leider noch immer nicht.
@Jörg: UserMessages $0111 war schon deklariert. Nur binde ich ein aus meiner DLL geladenes ExtMenu zum Zeitpunkt der Window-Erstellung ein. Habe dann mit TrackMenu %mousex,%mousey experimentiert, auch dabei kommen immer dieselben Werte von 32, 312 oder 512 heraus.
@Frank: Ich weiß nicht recht, ob ich das irgendjemand zumuten kann! Derzeit stehe ich bei rund 9000 Zeilen Code, ca 1000 Variablen, einigen 1000 Registry-Einträgen, 2 (bis auf die Sprache identischen) DLLs, die auch das Programm-Setup enthalten, mehreren Unterverzeichnissen incl. Test-Ini-Dateien usw. Den Code habe ich zwar im eigenen Interesse relativ gut dokumentiert, aber halt für meine eigenen Bedürfnisse.
Derzeit passiert beim Klick auf einen Menueintrag entweder gar nichts oder ich lande irgendwo in der Hauptschleife, wo ich gar nicht hinmöchte. Ich denke, ich werde erst mal den Code fehlerbereinigen, bevor ich jemanden bitte, sich diesen Aufwand anzutun! Ich habe auch noch eine ältere Version, die nur die Fenster und das Menu enthält - das hat damals noch gut funktioniert. Vielleicht finde ich auch im Vergleich der Dateien den Fehler. Ich hatte halt gehofft, daß einer aus der Community schon mal mit Usermessages in einem ExtMenu experimentiert hat.
Gruß, Christian |
|
|
| |
|
|
|
Frank Abbing | Hi,
[quote:2799a393bf]@Frank: Ich weiß nicht recht, ob ich das irgendjemand zumuten kann! Derzeit stehe ich bei rund 9000 Zeilen Code, ca 1000 Variablen, einigen 1000 Registry-Einträgen, 2 (bis auf die Sprache identischen) DLLs, die auch das Programm-Setup enthalten, mehreren Unterverzeichnissen incl. Test-Ini-Dateien usw. Den Code habe ich zwar im eigenen Interesse relativ gut dokumentiert, aber halt für meine eigenen Bedürfnisse.
Derzeit passiert beim Klick auf einen Menueintrag entweder gar nichts oder ich lande irgendwo in der Hauptschleife, wo ich gar nicht hinmöchte. Ich denke, ich werde erst mal den Code fehlerbereinigen, bevor ich jemanden bitte, sich diesen Aufwand anzutun! Ich habe auch noch eine ältere Version, die nur die Fenster und das Menu enthält - das hat damals noch gut funktioniert. Vielleicht finde ich auch im Vergleich der Dateien den Fehler. Ich hatte halt gehofft, daß einer aus der Community schon mal mit Usermessages in einem ExtMenu experimentiert hat. [/quote:2799a393bf] In dem Fall erstellt du am besten einen kurzen Testcode, der dein Problem darstellt. Je kürzer, desto besser kann man dir helfen. |
|
|
| |
|
|
|
| Hallo Christian...
So? KompilierenMarkierenSeparierenWINDOWTITLE "Usermessage und Menü"
WINDOWSTYLE 31
WINDOW 0,0-640,440
POPUP "&Menü"
Appendmenu 101,"&Test"
Appendmenu 102,"&Test 2"
Appendmenu 111,"&beenden"
USERMESSAGES $0111
While 0=0
Getmessage
IF @AND(%UMESSAGE=$0111,&UWPARAM=101)
@SENDMESSAGE(%HWND,$0111,0,0) Menuitem löschen
@Messagebox("Test wurde gedrückt!","Menü wurde gewählt",64)
ElseIF @AND(%UMESSAGE=$0111,&UWPARAM=102)
@SENDMESSAGE(%HWND,$0111,0,0) Menuitem löschen
@Messagebox("Test 2 wurde gedrückt!","Menü wurde gewählt",64)
ElseIF @AND(%UMESSAGE=$0111,&UWPARAM=111)
@SENDMESSAGE(%HWND,$0111,0,0) Menuitem löschen
END
ENDIF
wend
Ohne Gewähr!
Mit %MENUITEM, %LASTMESSAGE oder %MESSAGE kannst du hier nicht weiterkommen - warum steht eigentlich schon in der Profanhilfe. |
|
|
| |
|
|
|
| Hallo Christian...
Bei der Verwendung von Usermessages wäre ich an deiner Stelle bei einem so umfangreichen Code sehr vorsichtig - besonders wenn du nicht genauestens weißt, was du da tust. Die Usermessage WM_COMMAND=$0111 wirkt sich nicht nur auf Menüs, sondern auch eventuell auch auf daß Schließen von Dialogen und das Schließen des Hauptfensters aus, da %MENUITEM hier nicht auf -2 gesetzt wird. Ich persönlich kann z.B. nicht genauestens sagen, für was die Message WM_COMMAND alles verantwortlich ist - und scheinbar kann das jeder, der dir hier nicht weiterhelfen konnte, auch nicht.
Also: Schau genau nach, ob wirklich alles in deinem Programm so läuft, wie du dir das vorgestellt hast, sonst gibts eventuell sehr böse Überraschungen.
|
|
|
| |
|
|
|
Jörg Sellmeyer | Hallo, -dabei kommen immer dieselben Werte von 32, 312 oder 512 heraus. Womit erhälst Du die Werte? Mit %message, %key oder &umessage? Das mit dem Trackmenu ist nicht entscheidend, sondern die Deklaration von menuitem% (Variable! keine Systemvariable) und die Auswertung von &umessage. Ich benutze Prfellow und dort ist $0111 als Usermessage deklariert, um Controls abzufragen - z. B. Buttons sollen erst beim Loslassen reagieren. Bei mir funktioniert es mit &umessage zumindest mit generierten Menüs. Ob es mit Extmenu funktioniert, weiß ich nicht. Gruß Jörg |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.01.2005 ▲ |
|
|
|
|
CB | So, liebe Leute! Ich war in der Zwischenzeit auch nicht untätig und habe mir mal das zur Brust genommen, was Andreas mir da so aus dem Ärmel geschüttelt hat - GENIAL - das geht wirklich mit meinem ExtMenu!
Als Dankeschön für alle Beteiligten habe ich das Konstrukt mal ein bißchen aufgepeppt und auf die Schnelle noch ein paar kleine Überraschungen eingebaut. Schauts Euch einfach mal an. Und schaut auch mal im Menu unter Über... nach!
@Andreas: Dafür gibts vorläufig eine goldene Laterne, weil Du mir den Weg so schön beleuchtet hast, und wenn ich mal dazukomme, natürlich einen Eintrag ebendort. (Wirst schon sehen ,was ich damit meine)
@Jörg: Ich habs immer nur mit meinem Extmenu probiert und da ists in der Form leider nicht gegangen. Macht nix - trotzdem danke!
Noch eine Anmerkung: im Zuge meiner Basteleien für Euch habe ich meine Original-DLL etwas verkleinert (Setup-Programm rausgenommen etc.), das ging noch, als ich dieselbe DLL auf Menu_DE.dll umbenannt habe, war das Extmenu nicht mehr ladbar. Ich verstehe nicht so ganz, wieso. Deshalb habe ich die abgespeckte Original-DLL genommen.
Nochmals herzlichen Dank an alle Christian |
|
|
| |
|
|