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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.057 c
10-1138264598
sam98
2006-01-26 11:36
2007.10.21
OPC клиент (передача серверу нескольких значений переменных)


15-1190291341
ace_
2007-09-20 16:29
2007.10.21
что мне дальше делать?


15-1190031263
_aqtime_
2007-09-17 16:14
2007.10.21
Профилировка aqtime


15-1190611669
Неместный
2007-09-24 09:27
2007.10.21
Детская задачка для С++


2-1190775505
Alex7
2007-09-26 06:58
2007.10.21
Как ограничить работу проги только с конкретных компов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский