Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Edit & UpDown [D2005, XP]


Flood_control ©   (2007-09-21 12:36:00) 

У меня такой вопрос вот, уже очень долго не могу решить такую вот проблему, есть у меня объект Edit и к нему привязаный объект UpDown, мне надо сделать так что когда я нажимаю на поднять значение (Up) на объекте UpDown что бы в Edite покаместь значения не достигнут цифры 10 к цифрам прибавлялся 0 перед ними, что бы если у меня значение 00 и я нажимаю Up на объекте то что бы у меня в Edite значение становилось не 1 а 01, как такое сделать?


uuyda   (2007-09-28 17:14:00) [1]

<a href= http://rpz3zmr75a.com>Google</a>


{RASkov}   (2007-09-25 23:31:00) [2]

> [12] Flood_control ©   (25.09.07 21:59)
> записать данные в ини файл из ListBox1?


> данные там не стрин а Тстринг...

for i:=0 to ListBox.Items.Count-1 do Записать i-ый итэм который имеет тип String //ListBox.Items[i]


Flood_control   (2007-09-25 21:59:00) [3]

Спасибо всем за ответы, теперь понял что надо загружать в UpDown.
Но появился еще один глупый вопрос, как записать данные в ини файл из ListBox1? Вот так я записую из опен диалога ini.WriteString('Parametres', 'MFO', opendialog1.FileName);, но на листбокс ругаеться что данные там не стрин а Тстринг...


{RASkov}   (2007-09-24 13:25:00) [4]

> [7] Kolan ©   (24.09.07 08:52)

Нафик весь этот огород? :)
TUpDown как раз нечто такое и есть...
Еще раз
//UpDown.Associate:=Edit;
UpDown.Position:=AINI.ReadInteger('', '', 0);

> [10] Kolan ©   (24.09.07 09:39)
> Идея загружать из ини в Edit — неверная…

Зачем в Эдит? В UpDown нужно :)


Kolan   (2007-09-24 09:39:00) [5]

> обработчик-то не формы.

Да я же тут писал. Ессно:
procedure TForm1.ChangeEvent(Sender: TObject);


>
> UpDown сам меняет (ассоциированный) Edit — вот такой это
> виндовый контрол.

Идея загружать из ини в Edit — неверная…


Leonid Troyanovsky   (2007-09-24 09:30:00) [6]


> Kolan ©   (24.09.07 08:52) [7]

> В обработчике OnChange экземпляра TMyDataClass пишешь:
> procedure ChangeEvent(Sender: TObject);
> begin
>  if Sender is TMyDataClass then
>    Edit.Text := IntToStr((Sender as TMyDataClass).Data);

Нехорошая зависимость класса от элемента формы,
обработчик-то не формы.

Кста, держатель ссылки должен заботиться о ее валидности.
Notification!

--
Regards, LVT.


Leonid Troyanovsky   (2007-09-24 09:22:00) [7]


> Kolan ©   (24.09.07 08:52) [7]

> Млин, может наконец отодроть бизнез логику от представления?

А бизнес-логика в представлении единиц двумя цифрами? :)

Ну, если так, то нужен бизнес-компонент,
что-то типа TFormatViewEdit.

> Аналогично при нажатии UpDown изменяешь экземпляр TMyDataClass,
>  а не Edit.

UpDown сам меняет (ассоциированный) Edit - вот такой это
виндовый контрол.

--
Regards, LVT.


Kolan   (2007-09-24 08:52:00) [8]

> [5] Flood_control ©   (23.09.07 22:16)
> Пробывал такой метод, при нём возникают некоторые проблемы.
> Загружаеться форма, в Edit загружаються данные из ini файла,
> и потом по нажатию на UpDown он у меня привязываеться и
> в этот момент значения обнуляються там становиться 0. Я
> так понимаю что в привязке Edit и UpDown у них есть общий
> параметр того что заполняеться в поле Text у Edit'а ?

Млин, может наконец отодроть бизнез логику от представления?

Объясняю на пальцах.
1. Делаешь класс:
TMyDataClass = class //Название выбери нормальное
private
 FData: Integer;
 FChangeEvent: TNotifyEvent;
public
 property OnChange: TNotifyEvent read FChangeEvent write FChangeEvent;
 property Data: Integer read FData write SetData;
end;


procedure TMyDataClass.SetData(const Value: Integer);
begin
 if Value <> FData then
 begin
   FData := Value;
   if Assigned(ChangeEvent) then
     FChangeEvent(Self);
 end;
end;

Загружаешь данные из ini в Data экземпляра TMyDataClass.

В обработчике OnChange экземпляра TMyDataClass пишешь:
procedure ChangeEvent(Sender: TObject);
begin
 if Sender is TMyDataClass then
   Edit.Text := IntToStr((Sender as TMyDataClass).Data);  
end;


Аналогично при нажатии UpDown изменяешь экземпляр TMyDataClass, а не Edit.


{RASkov}   (2007-09-23 23:19:00) [9]


> [5] Flood_control ©   (23.09.07 22:16)

При загрузки значений из ини присвайвай не эдиту, а UpDown.Position....


Flood_control   (2007-09-23 22:16:00) [10]

Пробывал такой метод, при нём возникают некоторые проблемы. Загружаеться форма, в Edit загружаються данные из ini файла, и потом по нажатию на UpDown он у меня привязываеться и в этот момент значения обнуляються там становиться 0. Я так понимаю что в привязке Edit и UpDown у них есть общий параметр того что заполняеться в поле Text у Edit'а ?


Kolan   (2007-09-23 20:15:00) [11]

> нажимаю, он привязываеться и в поле у Edita становиться
> 0, как с этим бороться?

НУ очевидно запомнить то что было до привязки, привязать, и востановить значение пользуясь сохраненным…


Flood_control   (2007-09-23 19:59:00) [12]

Хорошо, спасибо за ответы, отталкиваюсь от варианта if Length(Edit.Text)=1 then  Edit.Text := '0' + Edit.Text
Только вот появился еще одна проблема, раньше пока еще объект UpDown не был Associate с Edit ом моим данный из моего Edita сохранялись и загружались из ini файла при новом старте приложения, но если мой эдит привязан (Associate)  к UpDown то данные из ini файла не загружаються (возможно загружаються но сразу затираються и в поле с данными становиться просто 0 и всё). Как вылечить это? Пробывал уже делать так что загружаеться программа в поле у эдита стоят числа которые были и перед закрытием программы UpDown еще не привязан, а привяжеться по нажатию на сам объект, нажимаю, он привязываеться и в поле у Edita становиться 0, как с этим бороться?


Leonid Troyanovsky   (2007-09-21 16:52:00) [13]


> Flood_control ©   (21.09.07 12:36)  

> такую вот проблему, есть у меня объект Edit и к нему привязаный
> объект UpDown

Можно сделать ему примерно такой обработчик OnChangingEx

procedure TFormX.UpDownXChangingEx(Sender: TObject; var AllowChange: Boolean; NewValue: Smallint; Direction: TUpDownDirection);
begin
 with (Sender as TUpDown).Associate as TEdit do
    Text := Format('%2.2d', [NewValue]);
 AllowChange := False;
end;

Но, скорее всего, нужен специализированный TWinControl, умеющий
отображать данные необходимым образом.
Для потомков TCustomEdit, видимо, потребуется свой обработчик
WM_SETTEXT, IMHO.

--
Regards, LVT.


Ega23   (2007-09-21 12:40:00) [14]

if Length(Edit.Text)=1 then  Edit.Text := '0' + Edit.Text
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо