Вниз
Скачать: CL | DM;

Disable Enable MenuItem in MainMenu   Найти похожие ветки 

← →
Wital   (2004-07-26 03:01) [0]

Здравствуйте!
Проясните пожалуйста ситуацию. На форме имеется компонент 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;


← →
Wital   (2004-07-28 02:54) [1]

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


← →
Кириешки ©   (2004-07-28 04:14) [2]

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


← →
Alex44   (2004-07-28 15:11) [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
...


← →
Wital   (2004-07-29 06:57) [4]


> if Value <> FEnabled then
> ...

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


← →
Cobalt ©   (2004-07-29 09:11) [5]

2 Wital   (29.07.04 06:57) [4]

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


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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.034 c
4-1090755241
Itap
2004-07-25 15:34
2004.09.12
"Вытащить" данные из DOS окна


1-1093489221
SNV-Soft
2004-08-26 07:00
2004.09.12
Компонент "Линейка"


1-1093588179
serg128
2004-08-27 10:29
2004.09.12
Как активизировать MDI окно?


4-1090596820
parovoZZ
2004-07-23 19:33
2004.09.12
Картинка в пункте меню


3-1092339929
Сергей Плоткин
2004-08-12 23:45
2004.09.12
Огромный размер БД




   Наверх