Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Вниз
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c