Deutsch
Forum

In einem ExtMenu mittels Usermessage das Menuitem ermitteln

 

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

2 kB
Hochgeladen:02.01.2005
Ladeanzahl183
Herunterladen
 
XProfan 8/9.1, Win XP, AMD 64/3200
02.01.2005  
 




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
 
02.01.2005  
 




Frank
Abbing
Hi.

Meine Vorschläge. API:

GetWindowLong() mit GWL_ID Flag
oder
GetClassLong() mit GCL_MENUNAMEFlag

Nicht getestet...
 
02.01.2005  
 




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
 
XProfan 8/9.1, Win XP, AMD 64/3200
03.01.2005  
 




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




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
 
XProfan 8/9.1, Win XP, AMD 64/3200
05.01.2005  
 




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



Hallo Christian...

So?
KompilierenMarkierenSeparieren
WINDOWTITLE "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.
 
05.01.2005  
 



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




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

37 kB
Hochgeladen:06.01.2005
Ladeanzahl100
Herunterladen
 
XProfan 8/9.1, Win XP, AMD 64/3200
05.01.2005  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

7.972 Betrachtungen

Unbenanntvor 0 min.
Manfred Barei08.11.2021
Georg Teles07.05.2014
maroro20.04.2014

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