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

Вниз

Edit & UpDown   Найти похожие ветки 

 
Flood_control ©   (2007-09-21 12:36) [0]

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


 
Ega23 ©   (2007-09-21 12:40) [1]

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


 
Leonid Troyanovsky ©   (2007-09-21 16:52) [2]


> 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.


 
Flood_control ©   (2007-09-23 19:59) [3]

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


 
Kolan ©   (2007-09-23 20:15) [4]

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

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


 
Flood_control ©   (2007-09-23 22:16) [5]

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


 
{RASkov} ©   (2007-09-23 23:19) [6]


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

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


 
Kolan ©   (2007-09-24 08:52) [7]

> [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.


 
Leonid Troyanovsky ©   (2007-09-24 09:22) [8]


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

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

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

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

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

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

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-09-24 09:30) [9]


> 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.


 
Kolan ©   (2007-09-24 09:39) [10]

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

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


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

Идея загружать из ини в Edit &#151; неверная&#133


 
{RASkov} ©   (2007-09-24 13:25) [11]

> [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 нужно :)


 
Flood_control ©   (2007-09-25 21:59) [12]

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


 
{RASkov} ©   (2007-09-25 23:31) [13]

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


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

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


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

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



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

Текущий архив: 2007.10.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
2-1190782024
savyhinst
2007-09-26 08:47
2007.10.21
Стрелка


11-1173903627
VVU
2007-03-14 23:20
2007.10.21
Прямоугольник текста в StrigGrid


2-1190983310
hinst
2007-09-28 16:41
2007.10.21
Не отвечает


2-1190554660
Антон Шестаков
2007-09-23 17:37
2007.10.21
Непонятки


2-1190656191
Aser
2007-09-24 21:49
2007.10.21
Как получить указатель (handle) на иконку программы в трее?