Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.043 c
1-1109858480
Erik1
2005-03-03 17:01
2005.03.20
Выдление всей неактивной записи в DbEHGrid.


14-1109866422
kaif
2005-03-03 19:13
2005.03.20
Вопрос[2]. О власти


1-1110189703
Хинт
2005-03-07 13:01
2005.03.20
Преобразование имени файла


9-1092944420
Zer0[np]
2004-08-19 23:40
2005.03.20
А не устраивать ли нам небольшие конкурсы по кодингу? (ч.2)


4-1107341470
alpet
2005-02-02 13:51
2005.03.20
Быстрое снятие задачи.