Форум: "Основная";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
ВнизСобытия в Лэйбле Найти похожие ветки
← →
SPeller (2002-05-04 14:10) [0]Столкнулся с такой вот штукой: есть форма, в которой по событиям MouseEnter и MouseLeave на Лэйблах происходит отрисовка некоего текста. Но если поверх неё показать модально другую форму, то по идее первая форма должна вести себя так как если бы Enabled был равен False и не воспринимать события мыши. С одной стороны это так, но вот события MouseLeave и MouseEnter продолжают работать причём странно! Программно невозможно определить что они работают. Вот пример кода:
TForm1 = class(TForm)
....
private
....
testover:boolean; {флаг, что форма2 показана}
public
....
end;
var
Form1: TForm1;
implementation
.......
...
{Где-то в коде показываем вторую форму}
Form2.showmodal;
testover:=true;
EndDoing; { Моя процедура для завершения некоторых действий}
...
procedure TForm1.lbl1MouseEnter(Sender: TObject);
begin
if testover then exit; {Выходим если форма2 показана}
_drawtext(tlabel(sender).Tag,true); {Отрисовка текста в своей пр-ре}
if testover then {Для проверки выводим в lbltest значение testover}
lbltest.caption:="True"
else
lbltest.caption:="False";
end;
procedure TForm1.lbl1MouseLeave(Sender: TObject);
begin
if testover then exit; {То же самое}
_drawtext(tlabel(sender).Tag,false);
if testover then
lbltest.caption:="True"
else
lbltest.caption:="False";
end;
По алгоритму если форма2 показана, то мы выходим из процедуры и не рисуем текст, всё правильно. Но на самом деле, при показе формы события отрабатываются, причём надпись на lbltest НИКОГДА не станет True, хотя testover верочно ставится в True и нигде в другом месте программы не используется.
Однако эта проблема легко решаема если поставить действия по показу второй формы в таком порядке:
testover:=true;
Form2.showmodal;
EndDoing;
Процедура EndDoing выполняется успешно и в том и в другом случаях.
Что это может быть такое ? В чём разница при выполнении первого и второго вариантов показа формы ?
← →
troits (2002-05-04 15:09) [1]А что такое события MouseEnter и MouseLeave?
Когда они наступают? Просто D6 у меня нет, а в D5 у TLabel, по-моему, таких событий нет.
← →
Anatoly Podgoretsky (2002-05-04 15:26) [2]А с чего бы ей стать "True" если if testover then exit;
← →
SPeller (2002-05-04 16:26) [3]2troits © (04.05.02 15:09)
Они происходят когда мышь "заходит" и покидает этот Лэйбл
2Anatoly Podgoretsky © (04.05.02 15:26)
А с чего бы ей стать "True" если if testover then exit;
А там где if testover then exit есть изменение значения testover ?? Смотрите внимательней код.
← →
Набережных С. (2002-05-04 21:06) [4]Управление из ShowModal не вернется, пока Form2 не будет закрыта.
Ты делаешь testover:=true; после того, как форма закроется.
← →
SPeller (2002-05-05 04:35) [5]Ах вон оно чего.... Благодарю!
← →
Anatoly Podgoretsky (2002-05-05 07:35) [6]SPeller © (04.05.02 16:26)
if testover then exit; {То же самое}
_drawtext(tlabel(sender).Tag,false);
if testover then
lbltest.caption:="True"
Никогда не станет "True", не что и жалуешься
else
lbltest.caption:="False";
end;
По алгоритму если форма2 показана, то мы выходим из процедуры и не рисуем текст, всё правильно. Но на самом деле, при показе формы события отрабатываются, причём надпись на lbltest НИКОГДА не станет True, хотя testover верочно ставится в True и
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c