|
#1
|
|||
|
|||
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
|
||||
|
||||
Попробуй так
Код:
Edit1.Text:=Format('%d',[ComboBox1.ItemIndex+1]); или Edit1.Text:=IntToStr(ComboBox1.ItemIndex+1); это по примеру дней недели, про кварталы вопрос не совсем понял Понять, что хочет заказчик - бесценно, ведь он платит MasterCard |
#3
|
|||
|
|||
По поводу кварталов:
Прожиточный минимум 1 квартала 2008 Прожиточный минимум 2 квартал 2008 Прожиточный минимум 3 квартал 2008 и когда я выбираю любой из кварталов чтобы в Edit подставлялся размер прожиточного минимума, который утвержден, к примеру 100 рублей. Вставлять нужно непосредственно в Edit (можно было бы конечно вставить в Combobox просто к примеру 100, 200, 300) т.к. с этой суммой будут проводится математические действия, и во вторых чтобы работник мог рассчитать прож.минимум например за более ранний период, выбрав только квартал и год, ведь невозможно ведь помнить какая сумма прожиточного была к примеру в 1 квартале 2006 года |
#4
|
|||
|
|||
Цитата:
Это не то, это просто первой строке combobox присваивается значение 1в edit, второй 2, третьей 3 и т.д. а нужно чтобы присваивалось то значение, которое нужно мне |
#5
|
|||
|
|||
Добавлять позиции в ComboBox через AddObject:
Код:
ComboBox1.Items.AddObject('Здесь текст',TObject(100)); // вместо 100 подставляешь переменну. При выборе делаешь так: Код:
Edit1.Text := IntToStr(Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex])); Да, ComboBox надо поставить стиль соответсвующий, что бы можно было только выбирать из списка. |
#6
|
|||
|
|||
написал вот так
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
|
|||
|
|||
Мужик, ты не прав.
1. Добавление в ComboBox должно выполняться 1 раз при инициализации формы. Вставь его хотя бы в FormCreate. 2. Вообще, такой фокус для дробных значений не проходит - нужно использовать целые. Если нужны дробные - то придется делать обертку над ними. |
#8
|
|||
|
|||
Напиши подробнее
|
#9
|
|||
|
|||
Ну куда ж подробнее.
Заполнение: Код:
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
|
|||
|
|||
ОГРОМНОЕ СПАСИБО, Все получилось. Единственное, а что если сумма с копейками, тогда как?
|
#11
|
|||
|
|||
Читать умеем???
Тогда - через обертки. Код показал. Там собственно, надо только добавить хранение ссылок на эксземпляры класса и их уничтожение при закрытии формы. Если это главная форма приложения, тогда вообще можно забить, т.к. при закрытии программы винда всю память процесса вычистит, хотя это и не кошерно. |
#12
|
|||
|
|||
а как сделать чтобы 2 квартал 2008 уже был выбран в combobox при открытии программы?
|
#13
|
|||
|
|||
Мужик, ну головой давай думать, да...
ComboBox1.ItemIndex := 1; // Если это вторая позиция в ComboBox. |