Цитата:
Сообщение от Erl
удалил stdcall; но проблемма не исчезла
|
Причем тут stdcall? Я же вам, кажется, по-русски сказала:
Цитата:
Сообщение от Nyctos Kasignete
Уберите callback-функцию EnumProc из списка методов формы.
|
В общем, вот:
Код:
......................
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WinMSG(var Msg:TMsg;var Handled:Boolean);
procedure DoWhatEver;
end;
var
Form1: TForm1;
Function EnumProc(h:HWND):BOOL; stdcall; // <-- Обычная функция, а не метод объекта формы!!
......................
Function EnumProc(h:HWND):BOOL; stdcall;
begin
Application.OnMessage:=Form1.WinMSG;
AppendMenu(GetSystemMenu(h,false),MF_SEPARATOR,0,'');
AppendMenu(GetSystemMenu(h,False),MF_BYPOSITION,ItemID,'My Menu');
EnumProc:=true;
end;
......................
_________________
Цитата:
Приведённый выше код добовляет пункт в контекстное меню для всех открытых окон
|
Еще раз повторю, что
не в контекстное меню, а в
системное — то, которое открывается по нажатии Alt+Space.
Если нужно добраться именно до контекстного меню Edit'а, то, очевидно, нужно брать handle
не функцией GetSystemMenu, а какой — не знаю, если честно...
И, конечно, нужно перебирать дочерние окна. Для этого из функции EnumProc нужно вызывать функцию EnumChildWindows, указывая ей в качестве параметра адрес еще одной callback-функции, в которой и нужно выполнять модификацию меню.