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

Вниз

События при потере и поллучении фокуса   Найти похожие ветки 

 
Domix ©   (2005-03-03 08:23) [0]

Подскажите пожалуста какие события происходят при потере и установке фокуса в компоненте TEdit


 
begin...end ©   (2005-03-03 08:27) [1]

> Domix ©   (03.03.05 8:23)

OnEnter, OnExit


 
Domix ©   (2005-03-03 08:31) [2]

Спасибо!!
И можно еще один вопрос как определить имя активного компонента
в частности на форме находится 5 Edit"ов узнать имя активного
За ранее благодарен!!


 
begin...end ©   (2005-03-03 08:33) [3]

> Domix ©   (03.03.05 8:31) [2]

Screen.ActiveComponent.Name


 
Gero ©   (2005-03-03 08:37) [4]


> Domix ©   (03.03.05 08:31)

TForm.ActiveControl


 
begin...end ©   (2005-03-03 08:42) [5]

> begin...end ©   (03.03.05 8:33) [3]

Упс... Screen.ActiveControl.Name


 
Domix ©   (2005-03-03 08:48) [6]

Возникла такая проблема при получение потери вокуса я я делаю следущие действия

procedure TFSpTovar.ENameEnter(Sender: TObject);
begin
 EName.BorderStyle:=bsSingle;
 EName.Color:=TColor($FFCCCC);
end;

procedure TFSpTovar.ENameExit(Sender: TObject);
begin
 EName.BorderStyle:=bsNone;
 EName.Color:=clBtnFace;
end;

но почему то отражается только прямоугольник $FFCCCC цвета


 
Gero ©   (2005-03-03 08:50) [7]


> Domix ©   (03.03.05 08:48)

Если EName — это TPanel, то рискну предположить, что ENameExit нигде не выполняется.


 
Gero ©   (2005-03-03 08:50) [8]


> Domix ©   (03.03.05 08:48)

Если EName — это TPanel, то рискну предположить, что ENameExit нигде не выполняется.


 
Domix ©   (2005-03-03 08:51) [9]

Нет это эдит я же писал ранее


 
Domix ©   (2005-03-03 08:52) [10]

при этом даже данные в эдите не отображаются


 
Gero ©   (2005-03-03 08:53) [11]

Сорри, меня проглючило.
Вобщем все равно ENameExit не выполяется.


 
Domix ©   (2005-03-03 08:53) [12]

А как мне быть посоветуйте пожалуйста


 
Gero ©   (2005-03-03 08:56) [13]

Тебе нужно при получении и потере фокуса Edit"ом менять ему BorderStyle и Color?
ENameEnter и ENameExit — это обработчики событий OnEnter и OnExit соответственно?


 
Domix ©   (2005-03-03 09:18) [14]

И опять по кругу
> Domix ©   (03.03.05 08:23)  
> Подскажите пожалуста какие события происходят при потере
> и установке фокуса в компоненте TEdit


 
Gero ©   (2005-03-03 09:20) [15]

Тебе уже дали ответ на этот вопрос.
Если в [13] все правильно, то ошибка где-то в твоей программе.


 
Anatoly Podgoretsky ©   (2005-03-03 09:36) [16]

И вновь продолжается бой.
И юный Домикс впереди.


 
ghg ©   (2005-03-03 10:40) [17]

кстати у меня тоже что то похожее был

хотел чтобы при потере фокуса Edit-ом сохранялось его содержимое в переменную, но когда Edit в фокусе и сразу нажимаем на кнопку перерисовки всего что на форме находится то, то что в обработчике OnExit не выполняется

почему?

вот код:

procedure TForm_shema.Edit5Exit(Sender: TObject);
begin
 square.Ymin := strtofloat(Edit5.text);
end;


 
ЮЮ ©   (2005-03-03 11:09) [18]

>но когда Edit в фокусе и сразу нажимаем на кнопку перерисовки всего что на форме находится

Так Edit-то в фокусе и потеряет его только если фокус перейдет к другому компоненту. Если кнопка не TButton, а графическая, то и потери фокуса не будет


 
ghg ©   (2005-03-03 12:24) [19]

и что же делать если у меня TSpeedButton?
генерировать для всех TEdit событие?

вообще задача следующая: сохранять значение из TEdit при окончании редактирования (например потеря фокуса или обработка события другого компонента). Но использовать OnChange нельзя, потому как при изменении значения переменнной происходит перерисовка которая занимает много времени.


 
ЮЮ ©   (2005-03-03 12:43) [20]

>Но использовать OnChange нельзя
в OnChange просто фиксируй факт внесения изменеий в данном компоненте, в он Exit - сбрасывай. Тогда при нажатии на TSpeedButton картина будет ясна и если в фокусе находится тот самых компонент, в котором вносились изменения, принудительно лиши его фокуса, хотя бы на время


 
ghg ©   (2005-03-03 12:52) [21]

а если этих SpeedButton-ов и Edit-ов много?
для всех все проверять?
по-моему это не выход

может все эти изменения делать в каком-нить обработчике формы (владельце всех компонентов)?


 
Anatoly Podgoretsky ©   (2005-03-03 12:58) [22]

SpeedButton не забирает фокус.


 
ghg ©   (2005-03-03 13:00) [23]

>Anatoly Podgoretsky ©   (03.03.05 12:58) [22]
я это уже понял
и что же делать?


 
ЮЮ ©   (2005-03-03 13:01) [24]

>а если этих Edit-ов много?
Но ты же не поленился написать

procedure TForm_shema.Edit5Exit(Sender: TObject);
begin
square.Ymin := strtofloat(Edit5.text);
end;

вместо того, что бы сделать это в том месте, где Edit5.text тебе действительно понадобится

а если этих SpeedButton-ов много?
Сделай один метод формы, например ReadEdits, где и считывай всю инфу из едитов в свои структуры. Всё равно для каждого SpeedButton-а есть обработчик OnClick, в начале каждого и добавишь строчку ReadEdits;


 
ghg ©   (2005-03-03 13:08) [25]

>в том месте, где Edit5.text тебе действительно понадобится
таких мест гораздо больше чем Edit-ов

>Сделай один метод формы, например ReadEdits
возможно так и придется, только вот кроме edit-ов есть еще StringGrid и т.п., придется и их там считывать
поэтому получается что будет не самая быстрая операция

потому вопрос еще открыт


 
ЮЮ ©   (2005-03-03 13:16) [26]

тогда вместо ReadEdits; вставь Next; Previous; (методы формы), форсировав тем самым потерю фокуса активным контролом


 
ghg ©   (2005-03-03 13:21) [27]

>ЮЮ ©   (03.03.05 13:16) [26]
не понял
подробнее


 
ЮЮ ©   (2005-03-03 13:29) [28]

TForm1.BitBtn256Click(Sender: TObject);
begin
 Next; // переход к следующему контролу, дабы сработал OnExit
 Previous; // возврат, дабы юзверя не пугать
 if
   (ActiveControl is TStringGrid) and TStringGrid(ActiveControl).EditorMode
 then
   TStringGrid(ActiveControl).EditorMode := false;
 ...
   <твой код>
end;

итак уже 6 строк которы лучше оформить как метод

procedure TForm1.CheckEditorMode;
begin
 Next; // переход к следующему контролу, дабы сработал OnExit
 Previous; // возврат, дабы юзверя не пугать
 if
   (ActiveControl is TStringGrid) and TStringGrid(ActiveControl).EditorMode
 then
   // выходим из режима редактирования в гриде
   TStringGrid(ActiveControl).EditorMode := false;
end;

и вставить CheckEditorMode в начале всех твоих OnClick



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

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

Наверх





Память: 0.51 MB
Время: 0.037 c
14-1109396531
begin...end
2005-02-26 08:42
2005.03.20
С Днём рождения! 26 февраля


1-1109850033
Copperhead
2005-03-03 14:40
2005.03.20
Приложение не запускается только на одном компьютере сети


1-1110039565
Leeechhhh
2005-03-05 19:19
2005.03.20
Чайниковский вопрос, хм, как получить системное время


8-1097211447
CosmoBoy
2004-10-08 08:57
2005.03.20
CD Ripping


4-1107731888
romshtain
2005-02-07 02:18
2005.03.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский