Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-64536
User_OKA
2002-04-22 14:45
2002.05.20
ADO


1-64669
TPavel
2002-05-04 22:13
2002.05.20
Взаимодействие двух форм


1-64602
Korin
2002-05-07 18:19
2002.05.20
Нажатие кнопок мыши


3-64559
SB.John
2002-04-24 15:33
2002.05.20
InterBase 6.0


14-64841
Феликс
2002-04-12 17:03
2002.05.20
Почем нынче курсовые, доклады, рефераты?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский