AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) HMENU zur laufzeit die Beschriftung herausbekommen
Thema durchsuchen
Ansicht
Themen-Optionen

HMENU zur laufzeit die Beschriftung herausbekommen

Ein Thema von lbccaleb · begonnen am 25. Nov 2008 · letzter Beitrag vom 29. Nov 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 26. Nov 2008, 10:18
Welchen Fehler gibt GetLastError?
Was mich verwundert - Laut msdn hat die Funktion nur 3 Parameter
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 26. Nov 2008, 10:55
Mhh als Fehler kommt "Falscher Parameter"..


hab noch das hier gefunden:

Zitat von MSDN:
To retrieve a menu item of type MFT_STRING, first find the size of the string by setting the dwTypeData member of MENUITEMINFO to NULL and then calling GetMenuItemInfo. The value of cch+1 is the size needed. Then allocate a buffer of this size, place the pointer to the buffer in dwTypeData, increment cch by one, and then call GetMenuItemInfo once again to fill the buffer with the string.

If the retrieved menu item is of some other type, then GetMenuItemInfo sets the dwTypeData member to a value whose type is specified by the fTypefType member and sets cch to 0.

Windows 98/Me and Windows 2000/XP: dwTypeData and cch are used with MIIM_STRING.

Windows 95/98/Me: GetMenuItemInfoW is supported by the Microsoft Layer for Unicode. To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.
Aber das verstehe ich irgendwie nicht!
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 26. Nov 2008, 12:46
Habe jetzt ne Möglichkeit gefunden!

Mit folgender Funktion hab ichs gemacht:


Delphi-Quellcode:
function GetMenuString(hMenu: HMENU; uIDItem: UINT; lpString: PChar;
  nMaxCount: Integer; uFlag: UINT): Integer; stdcall;
MSDN-Library durchsuchenGetMenuString
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 28. Nov 2008, 19:59
Mhh, jetzt hab ich doch noch nen Problem!

Zuerst ging es, und nun auf einmal kommt ne Fehlermeldung wenn die Zeile mit "GetMenuString" ausgeführt wird!

Delphi-Quellcode:
var
  MenuTemp: PChar;

    WM_COMMAND:
...
       10001..11000:
         begin;
           MenueTemp := '';
{Fehler-->}GetMenuString(hFilterPopUpMenue, LoWord(lParam), MenueTemp, 255, MF_BYCOMMAND);
//Restlicher Abschnitt funktioniert, getestet..
           if Length(MenueTemp) > 0 then
             if Assigned(Graph) then
               if Succeeded(Graph.FindFilterByName(StringToOleStr(MenueTemp), Filter)) then
                 begin;
                   ShowFilterPropertyPage(hWnd, Filter);
                   Filter := nil;
                 end;
         end;
so lief es, bis heute Morgen, bis vorhinn!! Nun auf einmal kommt ne Fehlermeldung:

Zitat:
---------------------------
Application Error
---------------------------
Exception EAccessViolation in module user32.dll at 00062785.

Access violation at address 76FA2785 in module 'user32.dll'. Write of address 0041E290.


---------------------------
OK
---------------------------
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 28. Nov 2008, 20:12
Wo wird der Speicher für MenueTemp reserviert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 28. Nov 2008, 20:18
Auserhalb der Fenster Funktion, also gleich am Anfang der Unit.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 28. Nov 2008, 20:22
Hm, ich hätte ihn lokal angefordert. Aber forderst du auch genug an? Laut der Hilfe wird ja der erforderliche Speicher in einem Parameter der Funktion zurückgegeben. Die übliche Vorgehensweise ist, dass man die Funktion erstmal mit nil aufruft und dann ein zweites mal mit dem erfordrlichen Speicher.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 28. Nov 2008, 20:28
Aso, um den nötigen Speicher zu reservieren?? aber wie mach ich das genau?? hättest du nen bsp?? Und ist es gut so, wie ich "MenueTemp" deklariert hab??
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 29. Nov 2008, 13:13
Ich versteh es nicht *grummel*

ich hab es jetzt so nochmal versucht (das hab ich hier auch im Forum gefunden)


Delphi-Quellcode:
var
  len: integer;
  MenueString: String;

begin;
                    len := GetMenuString(hFilterPopUpMenue, LoWord(lParam), nil, 0, MF_BYCOMMAND);
                    SetLength(MenueTemp, len + 1);
                    GetMenuString(hFilterPopUpMenue, LoWord(lParam), PChar(MenueTemp), (len + 1), MF_BYCOMMAND);// <> 0 then

...
Ich bekomme einfach die Caption des Menüs nicht mehr ausgelesen, woran kann das noch liegen??
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

Re: HMENU zur laufzeit die Beschriftung herausbekommen

  Alt 29. Nov 2008, 13:37
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  MenuString: PChar;
  len: Integer;
begin
  len := GetMenuString(GetSubMenu(MainMenu1.Handle, 0), 0, nil, 0, MF_BYPOSITION);
  if (len > 0) then
  begin
    GetMem(MenuString, len + 1);
    try
      GetMenuString(GetSubMenu(MainMenu1.Handle, 0), 0, MenuString, len + 1, MF_BYPOSITION);
      ShowMessage(MenuString);
    finally
      FreeMem(MenuString);
    end;
  end;
end;
Dazu passendes Menü:
Code:
Datei
  Test
"Test" ist der nullte Submenüneintrag vom Hauptmenü "Datei".
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz