![]() |
AW: Fremdes PopupMenu erweitern
Zitat:
Habs glaube ich nur für Standard/System Menüs erstellt schon lange her.. Teste es einfach dann kannst sehen ob du es gebrauchen kannst. PS: Alternativ könntest du dein Popupmenu zerstören und einfach während der laufzeit mit neuen Einträgen erweitern bzw.. neu einladen (aber zur Laufzeit ;)) Ich mache das genauso. gruss |
AW: Fremdes PopupMenu erweitern
Self.Handle dürfte nicht das Handle des Memos auf deiner Form, sondern die Form selber sein.
|
AW: Fremdes PopupMenu erweitern
Delphi-Quellcode:
Ich glaube, das mit dem Kontextmenü funktioniert nicht, weil es nicht sichtbar ist. Es wird erst erzeugt, wenn es aufgerufen wird.
procedure TForm1.Button1Click(Sender: TObject);
var Menu: THandle; begin Menu := GetMenu(Memo1.Handle); if Menu <> 0 then begin if not InsertMenu(Menu, 0, MF_BYPOSITION or MF_STRING, 0, 'Test') then RaiseLastOSError; end else RaiseLastOSError; end; |
AW: Fremdes PopupMenu erweitern
Wird schon gehen ;)
Man kann das mit einem trick bewerkstelligen das Kontexmenü erstellen aber mit Focus unterdrücken damit du es nicht siehst anschließend könnte man (also meine Idee) trotzdem an die Einträge kommen. Beispiel Textbox: Wie bekannt hat eine Textbox ein eigenes Kontexmenü das kann man aber unterdrücken in dem man vorher beim RButtonClick diese auf Enabled False stellt anschließend wieder auf true dann den Focus auf die TextBox setzen und dann dein eigenes Popupmenu anzeigen lassen. Meine idee auch wenn das menü unterdrückt wird müßte es eigentlich ausgelößt sein um daraus Daten entnehmen zu können. gruss |
AW: Fremdes PopupMenu erweitern
Ich würde das Memo irgendwie subklassen oder den Aufruf des Kontextmenüs hooken.
|
AW: Fremdes PopupMenu erweitern
Zitat:
Hier mal das Wichtigste aus meiner hook.dll:
Delphi-Quellcode:
Falls du noch etwas brauchst, sag Bescheid.
mmfData^.hHookWndProc := SetWindowsHookEx(WH_CALLWNDPROC, @HookWndProc, hInstance, TID);
function HookWndProc(Code: Integer; wParam: wParam; lParam: lParam): Integer; stdcall; var cwp: PCWPSTRUCT; begin Result := CallNextHookEx(mmfData^.hHookWndProc, Code, wParam, lParam); if Code >= 0 then begin cwp := PCWPSTRUCT(lParam); case cwp.message of WM_INITMENU: AddPopupItem(cwp.wParam); end; end; end; // - fügt dem PopupMenu mit Handle hPopup einen Eintrag "&Advanced" an zweiter Stelle ein // - es handelt sich um das richtige PopupMenu, wenn die Anzahl der MenuItems = 8 und der Text des ersten MenuItems = "&Open" ist procedure AddPopupItem(hPopup: Cardinal); var mii: TMENUITEMINFO; s: string; len: Integer; begin if GetMenuItemCount(hPopup) = 8 then begin len := GetMenuString(hPopup, 0, nil, 0, MF_BYPOSITION); if (len > 0) then begin SetLength(s, len + 1); GetMenuString(hPopup, 0, PChar(s), len + 1, MF_BYPOSITION); if Pos('&Open', s) > 0 then begin s := '&Advanced'; ZeroMemory(@mii, sizeof(TMENUITEMINFO)); mii.cbSize := sizeof(TMENUITEMINFO); mii.fMask := MIIM_TYPE; mii.dwTypeData := PChar(s); mii.cch := Length(s); InsertMenuItem(hPopup, 1, true, mii); end; end; end; end; |
AW: Fremdes PopupMenu erweitern
Zitat:
gruss |
AW: Fremdes PopupMenu erweitern
Solang es keinen anderen gibt, der wie ich an den PopupMenus rumschraubt, hab ich da keine Bedenken, zumal ich mein Tool nur privat einsetze.
|
AW: Fremdes PopupMenu erweitern
Zitat:
Ich denke nur er wollte fremde popupmenus erweitern. und da weiss er ja nicht wo was steht. Im eigenen wird das gehn da du ja weist wo was stehen muss bz. steht um erfolg zu haben. gruss |
AW: Fremdes PopupMenu erweitern
War auch nicht so aufgefasst. :)
Meine Antwort war aber schon auf ein fremdes Programm ausgelegt. Um genau zu sein handelte es sich um ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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-2025 by Thomas Breitkreuz