Re: HMENU zur laufzeit die Beschriftung herausbekommen
Welchen Fehler gibt GetLastError?
Was mich verwundert - Laut msdn hat die Funktion nur 3 Parameter :gruebel: |
Re: HMENU zur laufzeit die Beschriftung herausbekommen
Mhh als Fehler kommt "Falscher Parameter"..
hab noch das hier gefunden: Zitat:
|
Re: HMENU zur laufzeit die Beschriftung herausbekommen
Habe jetzt ne Möglichkeit gefunden!
Mit folgender Funktion hab ichs gemacht:
Delphi-Quellcode:
GetMenuString
function GetMenuString(hMenu: HMENU; uIDItem: UINT; lpString: PChar;
nMaxCount: Integer; uFlag: UINT): Integer; stdcall; |
Re: HMENU zur laufzeit die Beschriftung herausbekommen
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:
so lief es, bis heute Morgen, bis vorhinn!! Nun auf einmal kommt ne Fehlermeldung:
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; Zitat:
|
Re: HMENU zur laufzeit die Beschriftung herausbekommen
Wo wird der Speicher für MenueTemp reserviert?
|
Re: HMENU zur laufzeit die Beschriftung herausbekommen
Auserhalb der Fenster Funktion, also gleich am Anfang der Unit.
|
Re: HMENU zur laufzeit die Beschriftung herausbekommen
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.
|
Re: HMENU zur laufzeit die Beschriftung herausbekommen
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??
|
Re: HMENU zur laufzeit die Beschriftung herausbekommen
Ich versteh es nicht *grummel*
ich hab es jetzt so nochmal versucht (das hab ich hier auch im Forum gefunden)
Delphi-Quellcode:
Ich bekomme einfach die Caption des Menüs nicht mehr ausgelesen, woran kann das noch liegen??
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 ... |
Re: HMENU zur laufzeit die Beschriftung herausbekommen
Delphi-Quellcode:
Dazu passendes Menü:
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;
Code:
"Test" ist der nullte Submenüneintrag vom Hauptmenü "Datei".
Datei
Test |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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