![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
События при потере и поллучении фокуса [D6, WinXP]
Domix © (2005-03-03 08:23:00)Подскажите пожалуста какие события происходят при потере и установке фокуса в компоненте TEdit
ЮЮ (2005-03-03 13:29:00) [1]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
ghg (2005-03-03 13:21:00) [2]>ЮЮ © (03.03.05 13:16) [26]
не понял
подробнее
ЮЮ (2005-03-03 13:16:00) [3]тогда вместо ReadEdits; вставь Next; Previous; (методы формы), форсировав тем самым потерю фокуса активным контролом
ghg (2005-03-03 13:08:00) [4]>в том месте, где Edit5.text тебе действительно понадобится
таких мест гораздо больше чем Edit-ов
>Сделай один метод формы, например ReadEdits
возможно так и придется, только вот кроме edit-ов есть еще StringGrid и т.п., придется и их там считывать
поэтому получается что будет не самая быстрая операция
потому вопрос еще открыт
ЮЮ (2005-03-03 13:01:00) [5]>а если этих 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:00:00) [6]>Anatoly Podgoretsky © (03.03.05 12:58) [22]
я это уже понял
и что же делать?
Anatoly Podgoretsky (2005-03-03 12:58:00) [7]SpeedButton не забирает фокус.
ghg (2005-03-03 12:52:00) [8]а если этих SpeedButton-ов и Edit-ов много?
для всех все проверять?
по-моему это не выход
может все эти изменения делать в каком-нить обработчике формы (владельце всех компонентов)?
ЮЮ (2005-03-03 12:43:00) [9]>Но использовать OnChange нельзя
в OnChange просто фиксируй факт внесения изменеий в данном компоненте, в он Exit - сбрасывай. Тогда при нажатии на TSpeedButton картина будет ясна и если в фокусе находится тот самых компонент, в котором вносились изменения, принудительно лиши его фокуса, хотя бы на время
ghg (2005-03-03 12:24:00) [10]и что же делать если у меня TSpeedButton?
генерировать для всех TEdit событие?
вообще задача следующая: сохранять значение из TEdit при окончании редактирования (например потеря фокуса или обработка события другого компонента). Но использовать OnChange нельзя, потому как при изменении значения переменнной происходит перерисовка которая занимает много времени.
ЮЮ (2005-03-03 11:09:00) [11]>но когда Edit в фокусе и сразу нажимаем на кнопку перерисовки всего что на форме находится
Так Edit-то в фокусе и потеряет его только если фокус перейдет к другому компоненту. Если кнопка не TButton, а графическая, то и потери фокуса не будет
ghg (2005-03-03 10:40:00) [12]кстати у меня тоже что то похожее был
хотел чтобы при потере фокуса Edit-ом сохранялось его содержимое в переменную, но когда Edit в фокусе и сразу нажимаем на кнопку перерисовки всего что на форме находится то, то что в обработчике OnExit не выполняется
почему?
вот код:
procedure TForm_shema.Edit5Exit(Sender: TObject);
begin
square.Ymin := strtofloat(Edit5.text);
end;
Anatoly Podgoretsky (2005-03-03 09:36:00) [13]И вновь продолжается бой.
И юный Домикс впереди.
Gero (2005-03-03 09:20:00) [14]Тебе уже дали ответ на этот вопрос.
Если в [13] все правильно, то ошибка где-то в твоей программе.
Domix (2005-03-03 09:18:00) [15]И опять по кругу
> Domix © (03.03.05 08:23)
> Подскажите пожалуста какие события происходят при потере
> и установке фокуса в компоненте TEdit
Gero (2005-03-03 08:56:00) [16]Тебе нужно при получении и потере фокуса Edit'ом менять ему BorderStyle и Color?
ENameEnter и ENameExit — это обработчики событий OnEnter и OnExit соответственно?
Domix (2005-03-03 08:53:00) [17]А как мне быть посоветуйте пожалуйста
Gero (2005-03-03 08:53:00) [18]Сорри, меня проглючило.
Вобщем все равно ENameExit не выполяется.
Domix (2005-03-03 08:52:00) [19]при этом даже данные в эдите не отображаются
Domix (2005-03-03 08:51:00) [20]Нет это эдит я же писал ранее