Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];

Вниз

Помогите! Событие OnExit вызывается 2 раза!!   Найти похожие ветки 

 
semion   (2002-04-02 17:14) [0]

Народ! Может кто подскажет как сделать, чтобы при выходе из контрола проверялось значение на какое-либо условие и если условие не верно, то чтобы фокус оставался на этом контроле. Проблема в том, что если обрабатывать событие OnExit и туда вставлять self.SetFocus, то при переходе на некоторые контролы (например, TRxDataEdit) это событие вызывается дважды. Как это можно побороть или может другой способ кто посоветует!


 
Song   (2002-04-02 17:35) [1]

IF условие then класс(Sender).SetFocus;


 
semion   (2002-04-03 10:42) [2]

Дело в том, что перед этим надо вывести диалог типа "поле заполнено неверное". Если вставить то, что ты предлагаешь в OnExit, то это диалог, по описанным выше причинам появится 2 раза.


 
Anatoly Podgoretsky   (2002-04-03 10:54) [3]

У тебя где то ошибка, я как раз и использую описанный тобой алгоритм, но вот это self.SetFocus нельзя.


 
Sat7   (2002-04-03 11:10) [4]

Зачем self.setfocus? Попробуй так:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
if TEdit(Sender).Text<>"555" then
begin
MessageDlg("Incorrect!",mtError,[mbok],0);
TWinControl(Sender).Setfocus;
end;

end;

У меня работает, на все rx-компоненты тоже.


 
semion   (2002-04-03 12:37) [5]

Упрощаем ситуацию, чтобы было проще проверять :)
Создаем пустой проект. На форму кидаем ComboBox и DateEdit (из RX)

Пишем код

procedure TMainForm.ComboBox1Exit(Sender: TObject);
begin
MessageDlg("Incorrect!",mtError,[mbok],0);
TWinControl(Sender).Setfocus;
end;


Заходим в Combobox и оттуда пытаемся выйти в DateEdit. Считаем сколько раз выводится диалог. У меня 2.


 
Sat7   (2002-04-03 12:48) [6]

А у меня один!

У меня 5-ый delphi стоит... Может в этом дело? Хотя что-то я сомневаюсь.


 
Sat7   (2002-04-04 06:17) [7]

Ради спортивного интереса поставил дома 6-ой. Я не знаю, что у тебя за проблема, но в 6-ом delphi диалог тоже вызывается 1 (1!!!) раз. На все компоненты! Если у тебя все же 2 раза, попробуй так:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.OnExit:=nil;
MessageDlg("Incorrect!",mtError,[mbok],0);
TWinControl(Sender).Setfocus;
Edit1.OnExit:=Edit1Exit;
end;

(Конкретно для Edit1, конечно). Если и так не будет работать...


 
semion   (2002-04-04 11:25) [8]

Твой вариант не помогает :(.
Я так чувствую, что проблема в RX. У тебя под D6 какой порт RX стоит? Если не трудно, скинь ссылку где ты его брал.

Кстати, я посмотрел как это получается, что onExit вызывается 2 раза. И вот что получил: Сначала вызывается onExit, потом (после того как onExit отрабатывает!!) вызывается
TCustomComboEdit.MouseDown
Это происходит от того, что был щелчок мыши на другой компоненте.
В этом обработчике стоит установка Focus
Соответственно фокус переходит на него и снова вызывается мой onExit. Причем TCustomComboEdit.MouseDown выглядит таким образом:


if (FPopup <> nil) and (Button = mbLeft) then begin
if CanFocus then
SetFocus;
if not FFocused then Exit;
if FPopupVisible then PopupCloseUp(FPopup, False);
{else if (not ReadOnly or AlwaysEnable) and (not DirectInput) then
PopupDropDown(True);}
end;
inherited MouseDown(Button, Shift, X, Y);

В каких-то случаях FPopup = Nil и все работает отлично. В каких я пока не понял :((.



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

Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
1-46311
Алекс555
2002-04-03 12:37
2002.04.15
Друзья, подскажите для чего нужны указатели, на простом примере


3-46238
Lord Vader
2002-03-21 16:26
2002.04.15
TTable: автокалькуляция


1-46396
ded_di
2002-04-02 13:05
2002.04.15
печать rtf


1-46301
AvcRUSSIAN
2002-04-03 14:57
2002.04.15
ScrollBARs для TTreeView


4-46548
Beast
2002-02-13 03:58
2002.04.15
Hook





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский