Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.09.2008, 23:17
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию ComboBox и Edit

Имеется один ComboBox и один Edit. Строка Edit пустая.
В ComboBox имеются строки:
1 квартал 2008
2 квартал 2008
3 квартал 2008

Как строке 1 квартал 2008 присвоить значение к примеру 100 и скопировать его (именно 100) в Edit. Остаотные кварталы думаю сделаю по аналогии.
Или если еще проще:
В ComboBox имеются строки:
понедельник
вторник
среда
.........
При выборе среда нужно чтобы в Edit подставлялось число 3, понедельник 1 и т.д.

Заранее спасибо.

Последний раз редактировалось Михалыч, 08.09.2008 в 23:32.
Ответить с цитированием
  #2  
Старый 08.09.2008, 23:42
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Попробуй так
Код:
Edit1.Text:=Format('%d',[ComboBox1.ItemIndex+1]);
или
Edit1.Text:=IntToStr(ComboBox1.ItemIndex+1);

это по примеру дней недели, про кварталы вопрос не совсем понял
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #3  
Старый 09.09.2008, 00:15
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

По поводу кварталов:
Прожиточный минимум 1 квартала 2008
Прожиточный минимум 2 квартал 2008
Прожиточный минимум 3 квартал 2008
и когда я выбираю любой из кварталов чтобы в Edit подставлялся размер прожиточного минимума, который утвержден, к примеру 100 рублей.
Вставлять нужно непосредственно в Edit (можно было бы конечно вставить в Combobox просто к примеру 100, 200, 300) т.к. с этой суммой будут проводится математические действия, и во вторых чтобы работник мог рассчитать прож.минимум например за более ранний период, выбрав только квартал и год, ведь невозможно ведь помнить какая сумма прожиточного была к примеру в 1 квартале 2006 года
Ответить с цитированием
  #4  
Старый 09.09.2008, 00:23
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

Цитата:
Сообщение от cotseec
Попробуй так
Код:
Edit1.Text:=Format('%d',[ComboBox1.ItemIndex+1]);
или
Edit1.Text:=IntToStr(ComboBox1.ItemIndex+1);

это по примеру дней недели, про кварталы вопрос не совсем понял

Это не то, это просто первой строке combobox присваивается значение 1в edit, второй 2, третьей 3 и т.д. а нужно чтобы присваивалось то значение, которое нужно мне
Ответить с цитированием
  #5  
Старый 10.09.2008, 21:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Добавлять позиции в ComboBox через AddObject:

Код:
ComboBox1.Items.AddObject('Здесь текст',TObject(100)); // вместо 100 подставляешь переменну.

При выборе делаешь так:
Код:
Edit1.Text := IntToStr(Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]));

Да, ComboBox надо поставить стиль соответсвующий, что бы можно было только выбирать из списка.
Ответить с цитированием
  #6  
Старый 10.09.2008, 21:58
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

написал вот так
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ComboBox1.Items.AddObject('I квартал 2008',TObject(4063,00));
Memo2.Text := IntToStr(Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]));
end;

end.

1. Если удалить все строки в Tstring, то ничего не выбирается, показывает пустую строку, а если в Tstring ввести что либо, то при выборе идет типа копирования строки "I квартал 2008", т.е. сколько раз будешь выбирать, то с каждым разом строк I квартал 2008 становиться больше.

2. В остальном работает, в поле Edit1 подставляется то что надо.
Ответить с цитированием
  #7  
Старый 10.09.2008, 22:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Мужик, ты не прав.

1. Добавление в ComboBox должно выполняться 1 раз при инициализации формы. Вставь его хотя бы в FormCreate.
2. Вообще, такой фокус для дробных значений не проходит - нужно использовать целые. Если нужны дробные - то придется делать обертку над ними.
Ответить с цитированием
  #8  
Старый 10.09.2008, 22:11
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

Напиши подробнее
Ответить с цитированием
  #9  
Старый 10.09.2008, 22:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну куда ж подробнее.

Заполнение:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Clear;
  ComboBox1.Itema.AddObject('1 квартал 2008',TObject(4063));
  ComboBox1.Itema.AddObject('2 квартал 2008',TObject(4120));
  ComboBox1.Itema.AddObject('3 квартал 2008',TObject(4254));
  ComboBox1.Itema.AddObject('4 квартал 2008',TObject(5000));
end;

При выборе элемента:

Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  C : Integer;
begin
  If ComboBox1.ItemIndex > -1 Then
    Begin
       Edit1.Text := IntToStr(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
    End;
end;

Аесли ты про обертки, то там надо сделать класс и его экземпляры использовать при добавлении и при извлечении.
Код краткий, только для понимания принципа:

Код:
type
  TComboCurrency = class
  private
    FValue : Currency;
  public
    constructor Create(AValue : Currency); virtual;
    
    property Value : Currency read FValue write FValue;
  end;

constructor TComboCurrency.Create(AValue : Currency);
begin
  inherited Create;
  FValue := AValue;
end;

тогда код будет выглядеть так:

Заполнение:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Clear;
  ComboBox1.Itema.AddObject('1 квартал 2008',TComboCurrency.Create(4063.10));
  ComboBox1.Itema.AddObject('2 квартал 2008',TComboCurrency.Create(4120.20));
  ComboBox1.Itema.AddObject('3 квартал 2008',TComboCurrency.Create(4254.30));
  ComboBox1.Itema.AddObject('4 квартал 2008',TComboCurrency.Create(5000.40));
end;

При выборе элемента:

Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  V : TComboCurrency;;
begin
  If ComboBox1.ItemIndex > -1 Then
    Begin
       V := ComboBox1.Items.Objects[ComboBox1.ItemIndex] As TComboCurrency
       Edit1.Text := V.Value;
    End;
end;
Ответить с цитированием
  #10  
Старый 10.09.2008, 22:37
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

ОГРОМНОЕ СПАСИБО, Все получилось. Единственное, а что если сумма с копейками, тогда как?
Ответить с цитированием
  #11  
Старый 10.09.2008, 22:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Читать умеем???

Тогда - через обертки. Код показал. Там собственно, надо только добавить хранение ссылок на эксземпляры класса и их уничтожение при закрытии формы. Если это главная форма приложения, тогда вообще можно забить, т.к. при закрытии программы винда всю память процесса вычистит, хотя это и не кошерно.
Ответить с цитированием
  #12  
Старый 10.09.2008, 23:17
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

а как сделать чтобы 2 квартал 2008 уже был выбран в combobox при открытии программы?
Ответить с цитированием
  #13  
Старый 10.09.2008, 23:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Мужик, ну головой давай думать, да...

ComboBox1.ItemIndex := 1; // Если это вторая позиция в ComboBox.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter