Как да проверите състоянието на менюто, DelphiSite

Най-четени

Как да проверя състоянието на менюто?

Какъв е въпросът: как да разбера дали в момента е натиснат правилният елемент от менюто? Че аз в таймера мога да го разпитам за статус. Докато някоя част от главното меню не "изпадне" (т.е. елементът "Файл" е натиснат и се виждат Нов, Отваряне, Запазване и т.н.), трябва да правите нещо на всеки половин секунда. Тоест, трябва да хванете момента, в който това меню се затваря, за да спрете да правите нещо. 1) Събитие OnClick - задейства върху елемент, ако щракнем върху него или ако този елемент има подменю (или по-скоро поделементи) и то е активирано. в резултат на това - като окачим манипулатора на OnClick, можем да разберем дали менюто е активирано и кое меню, както и да разберем информация за подменюто (и, ако е необходимо, какво да променим в нишката). 2) От стъпка 1 знаем какво е менюто. активно. Но трябва да знаем, че менюто е затворено. за това хващаме съобщението WM_CAPTURECHANGED или то не се вижда WM_UNINITMENUPOPUP. Пример за първия и втория параграф:

Windows, съобщения, SysUtils, варианти, класове, графики, контроли, формуляри,

Диалогови прозорци, ExtCtrl, менюта, StdCtrl, ComCtrl;

TForm1 = клас (TForm)

N1231: TMenuItem; // Някаква точка

N23551: TMenuItem; // Някаква точка

N1231231: TMenuItem; // Някаква точка

N1231111: TMenuItem; // Някаква точка

Таймер1: TTimer; // Някаква точка

N2341: TMenuItem; // Някаква точка

N2342: TMenuItem; // Някаква точка

N234541: TMenuItem; // Някаква точка

N23421: TMenuItem; // Някаква точка

ertert1: TMenuItem; // Някаква точка

N1: TMenuItem; // Някаква точка

N123121: TMenuItem; // Някаква точка

N1231232: TMenuItem; // Някаква точка

N2343: TMenuItem; // Някаква точка

процедураTimer1Timer(Подател: TObject);

процедура WndProc ( var Message: TMessage ); отмяна;

процедура N1231Click ( Подател: TObject ) ;

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

процедура TForm1. WndProc ( var Message: TMessage ) ;

if ( Message. Msg =WM_UNINITMENUPOPUP ) тогава

Надпис: = 'Хм. Не можеш да ме видиш! Но аз съм активен!' друго

if ( Message. Msg =WM_CAPTURECHANGED ) тогава

Надпис: = 'Упс. навън ли си?' ;

f:= невярно; //Нулирайте флага за активност

end else inherited;

end else inherited;

процедура TForm1. Timer1Timer(Подател: TObject);

EndMenu; // затворете менюто

Таймер1. Активирано := невярно ;

процедура TForm1. N1231Click (Подател: TObject) ;

// Задържаме всички елементи от менюто :)

Caption:= IntToStr ( TMenuItem ( Sender ) . MenuIndex ) ;

if ( TMenuItem ( Sender ) . Count > 0 ) then

ако f= невярно тогава

Таймер1. Интервал := 10000 ; // Задаване на таймер за автоматично затваряне