Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Свой пункт в системном меню!


Автор: Marsianin 29.5.2007, 12:58
Только не нужно сразу посылать и бить сапогами по лицу!
Я знаю как добавить этот пункт в системное меню формы, но под Delphi 2007 это НЕ работает, как ни старался:

Код

procedure OnFormCreate(...);
var Sysm:HMenu;
begin
  Sysm:=GetSystemMenu(Handle,False);
  AppendMenu(Sysm,MF_SEPARATOR,0,'');
  AppendMenu(Sysm,MF_STRING,1025,'About'));
end;


Автор: Rouse_ 30.5.2007, 08:34
Ну так проверь что возвращается в Sysm и какой результат возвращают AppendMenu.
ЗЫ: когда в mars notepad перетаскивание узлов наконец то появиться? ;)

Автор: Marsianin 30.5.2007, 23:55
Проверил.

GetSystemMenu выдаёт что-то отличное от 0 и каждый раз разное, явно Handle.
AppendMenu выдают True, т.е. без ошибки.
GetLastError выдаёт 0.

Хз в чём дело.

P.S. Mars Notebook...к версии 1.5 планирую перетаскивание (не пойму, зачем оно так всем нужно)

Автор: Rouse_ 31.5.2007, 09:42
Тогда проверь (до нас еще 2007-ая не дошла, мне не на чем) не происходит ли вызов метода TWinControl.RecreateWnd после AppendMenu

Автор: Marsianin 31.5.2007, 23:13
Разобрался. Прикол. Причём хз что с ним делать.
Если стоит MainForm.BorderStyle:=bsSizeable;, то пункта в меню в системном не показывает, а если устанавливаешь MarsInstForm.BorderStyle:=bsSingle; - то всё путём.
Думаю надо меню после того, как это меняешь добавлять...иду пробовать smile

Добавлено через 4 минуты и 58 секунд
Помогло smile
Видать когда меняешь тип своего окна и Handle меняется. Зачем - хз, но факт.

Автор: Rouse_ 1.6.2007, 08:25
Цитата(Marsianin @  1.6.2007,  00:13 Найти цитируемый пост)
Видать когда меняешь тип своего окна и Handle меняется

Вот именно при смене типа и производится RecreateWnd и все, что ты нахимичил с окном ранее, теряется smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)