![]() |
GetMenuItemInfo -> falscher Parameter
Ich bekomme bei diesem Code immer die obige fehlermeldung:
Delphi-Quellcode:
Ich frage mich nur warum? :gruebel:
hMenu := GetMenu(hDlg);
hSubMenu := GetSubMenu(hMenu, 3); ZeroMemory(@mii, sizeof(TMenuItemInfo)); if not GetMenuItemInfo(hSubMenu, 0, True, mii) then DisplayErrMsg(hApp, APPNAME, GetLastError); AppendMenu(mii.hSubMenu, MF_STRING, 0, 'Test'); Noch etwas näheres zur Erklärung:
Code:
Ich brauche das Handle vom Menüpunkt "Sprache", um dort dynamisch die Menüpunkte "Deutsch" und "Englisch" zu erstellen. Ob das mit AppenMenu geht, bin ich mir noch gar nicht mal so sicher, aber ich bekomme ja erst gar nicht das Handle auf den MenuIzem "Sprache".
Benutzer | Ansicht | Extras | Hilfe
Sprache > Deutsch Englisch Ich bin für jedwede Vorschläge offen. |
Re: GetMenuItemInfo -> falscher Parameter
Man sollte alles lesen:
Zitat:
Aber mii.hSubMenu ist immer noch null. Der Menüpunkt "Sprache" ist als Popup deklariert in der Ressource. Und im PSDK steht: Zitat:
Delphi-Quellcode:
hMenu := GetMenu(hDlg);
hSubMenu := GetSubMenu(hMenu, 3); ZeroMemory(@mii, sizeof(TMenuItemInfo)); mii.cbSize := sizeof(TMenuItemInfo); mii.fMask := MIIM_SUBMENU; GetMenuItemInfo(hSubMenu, 0, True, mii); AppendMenu(mii.hSubMenu, MF_STRING, 0, 'Test'); |
Re: GetMenuItemInfo -> falscher Parameter
Warum nicht so?
Code:
(0) (1)
File Help (0) Anderes (1) --------- (2) Sprache > Deutsch Test
Delphi-Quellcode:
//..
_hMenu := GetMenu(hwnd); _hSubMenu := GetSubMenu(_hMenu, 1); _hSubMenu := GetSubMenu(_hSubMenu, 2); AppendMenu(_hSubMenu, MF_STRING, 0815, 'Test'); DrawMenuBar(hwnd); |
Re: GetMenuItemInfo -> falscher Parameter
Auf meine Anwendung angepass:
Delphi-Quellcode:
Aber auch jetzt ist nach dem zweiten Aufruf von GetSubMenu hSubMenu immer 0.
hMenu := GetMenu(hDlg);
hSubMenu := GetSubMenu(hMenu, 3); hSubMenu := GetSubMenu(hSubMenu, 0); AppendMenu(hSubMenu, MF_STRING, 0815, 'Test'); DrawMenuBar(hDlg); |
Re: GetMenuItemInfo -> falscher Parameter
Liste der Anhänge anzeigen (Anzahl: 3)
Also bei mir klappt das ohne Probleme.
Delphi-Quellcode:
Ist das so dekl. dann ändere doch mal in
var hMenu : HMENU;
Delphi-Quellcode:
aber nicht in der DlgFuncProc als lokale Variable.
var _hMenu : HMENU;
:gruebel: |
Re: GetMenuItemInfo -> falscher Parameter
hMenu ist als THandle deklariert, was anderes wird HMENU auch nicht sein. Ich gucke mir mal deine Demo an.
In deiner Demo existiert schon der erste Eintrag, nämlich "Deutsch". Ich habe da aber noch keinen. So, wenn ich da schon einen habe, dann geht es auch. Hm, Deutsch wird da auf alle Fälle auftauchen, könnte ich also so machen. Vielen Dank für deine Mühe mit der Demo. :thumb: |
Re: GetMenuItemInfo -> falscher Parameter
Bitte.
Eine Sprache würde ich gleich als "Programmsprache" integrieren. Es kann ja sein das versehentlich eine dll gelöscht wurde... erster Menüpunkt... übrigens: THandle = System.THandle = Cardinal HMENU = type LongWord; oder so. |
Re: GetMenuItemInfo -> falscher Parameter
Ursprünglich ist auch alles Deutsch. Aber wenn man auf Englisch umstellt, die deutsche DLL löscht und dann wieder auf deutsch würde alles leer bleiben. Ich habe es hetzt so gemacht, dass wenn DLL nicht vorhanden gar nichts passiert und die ursprüngliche Sprache nicht geändert wird. Aber wer eine mitgelieferte DLL löscht, ist selber schuld. ;)
Trotzdem muss ich jetzt irgendwie tricksen, dass er die Deutsche DLL überspringt. :roll: Oder ich muss, wenn ich alle drinne habe, den ersten Dummy-Eintrag wieder löschen. ;) |
Re: GetMenuItemInfo -> falscher Parameter
:mrgreen:
|
Re: GetMenuItemInfo -> falscher Parameter
Es läuft. :hello: :firejump:
Jetzt brauche ich nur noch die Sprach-DLL zu erzeugen und brauche nur noch die DLLs zu verteilen. Der Bneutzer muss sie dann nur noch in das entsprechende Verzeichnis kopieren und er hat die Sprache zur Auswahl. :P |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz