Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизЧем в данном случае лучше воспользоваться Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.066 c