Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Disable\Enable MenuItem in MainMenu [D7, WinXP]


Wital ©   (2004-07-26 03:01:00) 

Здравствуйте!
Проясните пожалуйста ситуацию. На форме имеется компонент MainMenu, и четыре кнопки которые откл. и вкл. пункт в меню.
Если пользоваться только VCL или API методами то проблем не возникает. Но если скрестить то получается непонятная ситуация.
Например: Если я блокирую пункт test.Enabled := False;, то при включении его с помощью API, пункт приобретает нормальный цвет, но отваливается его событие. Если откл. с помощью API, то включить этот пункт через VCL неполучается. (Надо вначале откл. через VCL, а только затем он включится).
В чем причина ???

procedure TForm1.VclDisableClick(Sender: TObject);
begin
test.Enabled := False;
end;

procedure TForm1.VclEnableClick(Sender: TObject);
begin
test.Enabled := True;
end;

procedure TForm1.ApiDisableClick(Sender: TObject);
begin
EnableMenuItem(MainMenu1.Handle, 4, MF_BYCOMMAND Or MF_DISABLED Or MF_GRAYED);
end;

procedure TForm1.ApiEnableClick(Sender: TObject);
begin
EnableMenuItem(MainMenu1.Handle, 4, MF_BYCOMMAND OR MF_ENABLED);
end;

procedure TForm1.testClick(Sender: TObject);
begin
ShowMessage('___OK___');
end;


Cobalt   (2004-07-29 09:11:00) [1]

2 Wital   (29.07.04 06:57) [4]

Ну так тебе же сказали - не надо смешивать.
Ты в VCL поставил свойство Enabled (FEnabled) в false.
Затем разрешил пункт. На него нажимают, и вызывается метод
procedure TMenuItem.Click;
begin
 if Enabled then {Означает if FEnabledthen}
 begin


А он-то у тебя - false.


Wital   (2004-07-29 06:57:00) [2]


> if Value <> FEnabled then
> ...

Исходя из этого предположения получается что присутствуют два значения FEnabled?!?
Если я откл/вкл или на vcl или на api то всё нормально работает, если смешиваешь отваливается событие.
Получается неубедительно ...


Alex44   (2004-07-28 15:11:00) [3]

Prichina ochevidna: ne nuzhno smeshivat' nesmeshivaemoe.
VCL hranit informatsiyu (enabled/disabled) otdel'no i polagaetsya na nee. T.e., VCL dumaet, chto on disabled, i ne vyzyvaet sootvetstvuyushij method. Sootvetstvenno, lyuboy SetSomething(Value) method nachnaetsya, obychno, so stroki

if Value <> FEnabled then
...


Кириешки   (2004-07-28 04:14:00) [4]

"никто с такими проблемами не сталкивался?"
Скорее всего нет. Посмотрите в FAQ или покапайтесь в инете, дабы "сайтов" подобно этому - полно.


Wital   (2004-07-28 02:54:00) [5]

Приветствую.
Я что-то непонятно написал или никто с такими проблемами не сталкивался?


Наверх

Титульная страница Поиск, карта сайта Написать письмо