Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2007, 10:44   #1
Ярослав
Пользователь
 
Аватар для Ярослав
 
Регистрация: 14.11.2007
Сообщений: 74
Вопрос

Нашел текст с вопросом и ответом
содержание следующие
вопрос
Каким образом можно изменить системное меню формы?
ответ
Не знаю как насчет акселераторов, надо поискать, а вот добавить Item - пожалуйста
объясните что этот код означает
type
TMyForm=class(TForm)
procedure wmSysCommand(var Message:TMessage); message WM_SYSCOMMAND;
end;

const
ID_ABOUT = WM_USER+1;
ID_CALENDAR=WM_USER+2;
ID_EDIT = WM_USER+3;
ID_ANALIS = WM_USER+4;

implementation

procedure TMyForm.wmSysCommand;
begin
case Message.wParam of
ID_CALENDAR:DatBitBtnClick(Self) ;
ID_EDIT :EditBitBtnClick(Self);
ID_ANALIS:AnalisButtonClick(Self);
end;
inherited;
end;

procedure TMyForm.FormCreate(Sender: TObject);
var
SysMenu:THandle;

begin
SysMenu:=GetSystemMenu(Handle,False );
InsertMenu(SysMenu,Word(-1),MF_SEPARATOR,ID_ABOUT,'');
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Calendar, 'Calendar');
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Analis, 'Analis');
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Edit, 'Edit');
end;

заранее спасибо
Каждый из нас в чём-то новичок

Последний раз редактировалось Ярослав; 19.11.2007 в 11:33.
Ярослав вне форума Ответить с цитированием
Старый 22.11.2007, 18:00   #2
Ярослав
Пользователь
 
Аватар для Ярослав
 
Регистрация: 14.11.2007
Сообщений: 74
Вопрос

Ни кто не знает что ли или отвечать не хотите
Каждый из нас в чём-то новичок
Ярослав вне форума Ответить с цитированием
Старый 22.11.2007, 18:18   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Если ты не понимаешь код, значит тебе рано его понимать, повышай сложность постепенно. Это тебе щас целую лекцию читать надо про WinAPI.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.11.2007, 18:28   #4
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Каждый раз, когда выбирается пункт в системном меню (в заголовке окна, слева), программе посылается сообщение с кодом WM_SYSCOMMAND, чтобы программа могла на это отреагировать.

Код:
type
   TMyForm=class(TForm)
   procedure wmSysCommand(var Message:TMessage); message WM_SYSCOMMAND;
   end;
Здесь объявляется процедура wmSysCommand, которая будет автоматически вызываться в ответ на сообщение WM_SYSCOMMAND (то, что имена процедуры и константы совпадают, не имеет значения, вернее, не имеет значения имя процедуры, главное указать правильную константу сообщения).


Код:
const
ID_ABOUT  = WM_USER+1;
ID_CALENDAR=WM_USER+2;
ID_EDIT  =  WM_USER+3;
ID_ANALIS = WM_USER+4;
Это номера пунктов меню. Все номера должны быть уникальными, часть номеров зарезервировано системой до номера WM_USER (кажется он равен 8000, это неважно). Любые номера после WM_USER можно использовать по своему усмотрению.

Код:
procedure TMyForm.wmSysCommand;
begin
case Message.wParam of
ID_CALENDAR:DatBitBtnClick(Self) ;
ID_EDIT  :EditBitBtnClick(Self);
ID_ANALIS:AnalisButtonClick(Self);
end;
inherited;
end;
Это процедура-обработчик, которая была объявлена в начале, просто у нее "пропущены" параметры - это допускается правилами языка, но лучше писать полностью: procedure TMyForm.wmSysCommand(var Message:TMessage);
В ней проверяется номер выбранного пункта меню и если он равен ID_CALENDAR, ID_EDIT или ID_ANALIS, то вызываются соответствующие дополнительные подпрограммы. Потом вызывается "обработчик по умолчанию", чтобы могли обработаться и другие пункты меню

Код:
procedure TMyForm.FormCreate(Sender: TObject);
var
  SysMenu:THandle;
begin
SysMenu:=GetSystemMenu(Handle,False);
InsertMenu(SysMenu,Word(-1),MF_SEPARATOR,ID_ABOUT,'');
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Calendar, 'Calendar');
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Analis, 'Analis');
InsertMenu(SysMenu,Word(-1),MF_BYPOSITION,ID_Edit, 'Edit');
end;
При запуске программы она добавляет к своему системному меню дополнительные пункты с заданными номерами.
Jeni вне форума Ответить с цитированием
Старый 23.11.2007, 16:57   #5
Ярослав
Пользователь
 
Аватар для Ярослав
 
Регистрация: 14.11.2007
Сообщений: 74
По умолчанию

большое спасибо
Каждый из нас в чём-то новичок
Ярослав вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание блок-схем по коду С++ Panterka Общие вопросы C/C++ 7 04.02.2018 19:21
Комментарии к коду Juhn Паскаль, Turbo Pascal, PascalABC.NET 6 24.12.2007 20:29
Написать комментарии к коду. Delphi. Дарюха Помощь студентам 1 21.11.2007 16:05