Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMainMenu: а что нажато? 
:(
    Опции темы
December
Дата 23.10.2004, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Greetings All!
Есть задача.
Когда выпадает главное меню, создать в нём элементы, проинициализировать их (это я , ессно, и сам сделал), а потом регулярно обновлять до тех пор, пока меню не закроется(то есть пока юзверь не переключится на какой-нибудь другой контрол).
В чём вопрос: как узнать, нажат ли сейчас именно нужный пункт меню? Чтобы я в таймере мог его опрашивать на состояние.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 23.10.2004, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Ну, думаю может создать глобальную переменную, в которую по событию OnClick записывать Sender, а потом уже глядеть на него... :(
PM   Вверх
December
Дата 23.10.2004, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



OnClick - чего?
А если юзверь втихаря кликнул где-нить по форме, на которую я онклик не хочу делать? Тогда менюшка закроется и всё, а я этого не услежу.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 23.10.2004, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



Есмли нажат, то в OnClick
Чтобы получить имя объекта, который нажат (предварительно повесив процедуру на ВСЕ элементы MainMenu), можно так:
Sender.Name или ( Sender as TMainMenu ) . Name, щас точно не помню...

Вроде тебе именно это нужно.
PM ICQ   Вверх
Pakshin A. S.
Дата 23.10.2004, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Цитата(December @ 23.10.2004, 21:04)
OnClick - чего?

Итема меню...

Код

...
interface
type
TForm1 = class...
...
 procedure OnClickMenu(Sender:TObject);
...
implementation;

...

var
ClickMenu: TMenuItem;

...

procedure TForm1.OnClickMenu(Sender: TObject);
begin
ClickMenu:=sender as TMenuItem
end;

...

    MyMenuItem:=TMEnuItem.Create...
    ...
   MyMenuItem.OnClick:=ClickMenu;
   ...


PM   Вверх
December
Дата 23.10.2004, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Как насчёт клика на форме? :)
Вот и чат пошёл... :)


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 23.10.2004, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



А для чего клик на форме, ведь мы с меню работаем-с... :(
Добавлено @ 20:15
Цитата(December @ 23.10.2004, 21:10)
Вот и чат пошёл...

Дык енто есть гуд! Быстрее поможем-с... :D
PM   Вверх
December
Дата 23.10.2004, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Pakshin A. S.
Mal Hack
Ещё раз опишу постановку вопроса.
До тех пор, пока какая-то часть главного меню "выпала" (то есть нажат итем "Файл", и видны New, Open, Save etc.) нужно чёто делать раз в полсекунды. То есть надо отловить момент, когда это самое меню закроется, чтобы перестать чё-то делать.
Как вы понимаете, менюшка может закрыться не только от клика в самом меню.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 23.10.2004, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



:stena
Извините,
Удаляюсь из-за того, что ответа не знаю, и дабы не быть улеченным во флейме..
Может к завтрашнему дню смогу дать ответ... :)
PM   Вверх
Girder
Дата 24.10.2004, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



1)Событие OnClick - срабатывает на пункте если мы по нему кликнули или если данный пункт имеет подменю(а точнее подпункты) и оно активировалось... как следствие - повесив обработчик на OnClick мы можем узнать что меню активировалось и какое енто меню, а также узнать информацию о подменю(и при необходимости что нить изменить :) ).

2)Из ходя из 1 пункта мы знаем что меню... активно. Но нам надо знать что меню закрылось... для ентого ловим сообщение WM_CAPTURECHANGED или его не видно WM_UNINITMENUPOPUP.

Пример для первого и второго пункта:
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, Menus, StdCtrls, ComCtrls;

type
 TForm1 = class(TForm)
   MainMenu1: TMainMenu;
   N1231: TMenuItem; //Какой то пункт
   N23551: TMenuItem; //Какой то пункт
   N1231231: TMenuItem; //Какой то пункт
   N1231111: TMenuItem; //Какой то пункт
   Timer1: TTimer; //Какой то пункт
   N2341: TMenuItem; //Какой то пункт
   N2342: TMenuItem; //Какой то пункт
   N234541: TMenuItem; //Какой то пункт
   N23421: TMenuItem; //Какой то пункт
   ertert1: TMenuItem; //Какой то пункт
   N1: TMenuItem; //Какой то пункт
   N123121: TMenuItem; //Какой то пункт
   N1231232: TMenuItem; //Какой то пункт
   N2343: TMenuItem; //Какой то пункт
   procedure Timer1Timer(Sender: TObject);
   procedure WndProc(var Message: TMessage); override;
   procedure N1231Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 f:boolean=false; //флаг активности

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Message: TMessage);
begin
if f then
 begin
  if (Message.Msg=WM_UNINITMENUPOPUP) then
   Caption:='Мдя... Че-то меня не видно! Но я активен!' else
   if (Message.Msg=WM_CAPTURECHANGED) then
    begin
     Caption:='Ёпс!... ты че вышел?';
     f:=false; //Сбрасываем флаг активности
    end else inherited;
 end else inherited;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
EndMenu; //закрываем меню
Timer1.Enabled:=false;
end;

procedure TForm1.N1231Click(Sender: TObject);
//Вешаем на все пункты меню :)
begin
Caption:=IntToStr(TMenuItem(Sender).MenuIndex);
if (TMenuItem(Sender).Count>0) then
 begin
  if f=false then
   begin
    Timer1.Interval:=10000; //Ставим таймер для автоматического закрытия
    Timer1.Enabled:=true;
    Timer1.OnTimer:=Timer1Timer;
   end;
  f:=true; //меню активированно!
 end;
end;

end.


Удачи.

Это сообщение отредактировал(а) Girder - 24.10.2004, 02:23

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  eMenu.zip


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
mutex
Дата 24.10.2004, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: нет
Всего: 3



Лови сообщение WM_COMMAND и LoWord(wParam) даст CommandID пункта меню, к-рый юзер щелкнул. Затем по FindItem ищи этот ID циклом среди всех элементов MainMenu.

PM MAIL   Вверх
December
Дата 24.10.2004, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Girder
Спасибо за сэмпл! В нём есть то, что нужно.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.