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

Вниз

Чем в данном случае лучше воспользоваться   Найти похожие ветки 

 
tolstiak   (2003-10-27 16:17) [0]

Уважаемые, подскажите как правильно сделать:
есть 3 combobox"а с некой информацией.
величина R зависит от всех combobox"ов, т.е. в зависимости от того что там выбрано. If....then очень долго и муторно...
Как это сделать?


 
хз ©   (2003-10-27 16:20) [1]

> есть 3 combobox"а с некой информацией.

С какой конкретно - числа, строки? Что с этой информацией надо делать?


 
Reindeer Moss Eater ©   (2003-10-27 16:21) [2]

If....then очень долго и муторно...

Что долго?


 
Малиновский Владимир   (2003-10-27 16:24) [3]

Если не хотите реализовывать функцию от трех перменных с помощью IF - ов, то создайте 3-мерный массив размерностью (ЧИСЛО_ВОЗМОЖНЫХ_ЗНАЧЕНИЙ_КОМБО_1)*(ЧИСЛО_ВОЗМОЖНЫХ_ЗНАЧЕНИЙ_КОМБО_2)*(ЧИСЛО_ВОЗМОЖНЫХ_ЗНАЧЕНИЙ_КОМБО_3),
и инициализируйте его необходимыми результирующими значениями, которые хотите получать. Затем просто извлекаете из массива нужное значение, просто обращаясь к массиву значений
ArrValues[Значение_Индекса_Комбо_1, Значение_Индекса_Комбо_2,Значение_Индекса_Комбо_3].
Правда, объемы большие, зато скорость!


 
Reindeer Moss Eater ©   (2003-10-27 16:24) [4]

Грамотно составленный if else if работает не медленно.
А самое главное нет ничего, что бы работало принципиально быстрее.


 
Малиновский Владимир   (2003-10-27 16:25) [5]

2 Reindeer Moss Eater
- выборка из массива значений быстрее!


 
хз ©   (2003-10-27 16:25) [6]

> Что долго?

Он наверное перепутал Мастера Delphi с сайтом телепатов...


 
tolstiak   (2003-10-27 16:38) [7]

Reindeer Moss Eater

комбо1 - 22строки породы дерева
комбо2 - 3сорта
комбо3 - 5условий эксплуатации
и в зависимости от породы дерева, сорта и условий эксплуатации, расчетное сопротивление древесины изгибу должнобыть разным.
как грамотно составить if...?


 
Sandman25 ©   (2003-10-27 16:42) [8]

Если есть какая-то формула по какому-либо из параметров (например, для первого сорта значение в N раза больше, чем для второго, и в M раз больше, чем для третьего), то это можно использовать и сократить размерность массива. В любом случае см. [3] Малиновский Владимир (27.10.03 16:24)


 
saska   (2003-10-27 16:45) [9]

все зависит от вида ф-ции от этих трех переменных...


 
Palladin ©   (2003-10-27 18:57) [10]

Ну что ж, если считать что за каждым из пунктов закреплено некое числовое значение (пусть будет currency) и каждое числовое значение участвует в некой формуле (пусть будет cb1+cb2*4-cb3), то собственно никаких жутких телодвижений c if не нужно, достаточно лишь сохранить эти значения в массиве Objects класса TStrings...

что то вроде такого
type
PCurrency=^Currency;

procedure TForm1.lcAddItem(p_cb:TComboBox;p_strLine:string;p_fValue:Currency);
var
v:PCurrency;
begin
New(v);
v^:=p_fValue;
p_cb.AddItem(p_strLine,TObject(v));
end;

procedure TForm1.InitializeCBs;
begin
lcAddItem(ComboBox1,"1 порода дерева",3.14);
....

lcAddItem(ComboBox2,"1 сорт",2);
....

lcAddItem(ComboBox3,"1 условие эксплуатации",34.23);
...
end;

ну и весь расчет значения в этом случае будет выглядеть примерно так

function TForm1.lcGetValue(p_cb:TComboBox):currency;
begin
Result:=PCurrency(p_cb.Items.Objects[p_cb.ItemIndex])^;
end;

function TForm1.CalcValue:currency;
begin
result:=lcGetValue(ComboBox1)+lcGetValue(ComboBox2)*4-lcGetValue(ComboBox3);
end;


и при освобождении уже не нужных ComboBox - не забыть освободитиь выделенную память

procedure TForm1.lcClearValues(p_cb:TComboBox);
var
v:PCurrency;
i:integer;
begin
for i:=0 to p_cb.Items.Count-1 do
begin
v:=PCurrency(p_cb.Items.Objects[i]);
Dispose(v);
end;
end;


 
tolstiak   (2003-10-28 12:50) [11]

Всем большое спасибо. В проблеме разобрался. Программа работает и правильно работает.


 
Song ©   (2003-10-28 12:53) [12]

2tolstiak (28.10.03 12:50) [11]
Самое главное, что ты был должен разобраться без примера, только послушав совет.



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
14-41989
Chuha
2003-10-16 21:15
2003.11.13
Lingvo


3-40810
NewD
2003-10-22 09:46
2003.11.13
Как подключиться через ADO к SQL SERVER на другой машине


1-41615
Layner
2003-10-22 13:20
2003.11.13
Как округлить число с 5 знаками после запятой до 3х знаков?


1-41569
афвуд
2003-10-27 15:01
2003.11.13
Нужно достать значения left, top и т.д. формы, когда она в развёр


1-41483
Deedlit
2003-10-28 18:04
2003.11.13
Где я? StringGrid