Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизCase ... of <a>:<b>; end; Найти похожие ветки
← →
Agent[007] (2003-11-01 22:07) [0]Почему, если писать вот это:
case (ChordAdd.Text) of
"A":
begin
Chords.Cells[XtoChange, 5]:="00";
Chords.Cells[XtoChange, 4]:="00";
Chords.Cells[XtoChange, 3]:="02";
Chords.Cells[XtoChange, 2]:="02";
Chords.Cells[XtoChange, 1]:="02";
Chords.Cells[XtoChange, 0]:="00";
end;
end;
То выдается сообщение об ошибкеOrdinal type required
... (ChordAdd - TComboBox)
← →
Vuk (2003-11-01 22:16) [1]ChordAdd.Text[1]
← →
DrPass (2003-11-01 22:33) [2]Потому что в инструкции case допускается использовать только переменные порядковых типов, к коим тип string не относится. А тип char - относится
← →
Серый тушкан (2003-11-01 23:13) [3]A tak ne lutshe?
if ChordAdd.Text[1] = "A" then
with Chords do begin
Cells[XtoChange, 5]:="00";
Cells[XtoChange, 4]:="00";
Cells[XtoChange, 3]:="02";
Cells[XtoChange, 2]:="02";
Cells[XtoChange, 1]:="02";
Cells[XtoChange, 0]:="00";
end;
← →
Agent[007] (2003-11-02 08:38) [4]Серый тушкан, у меня там около сотни будет...
PS: А PChar принимается, а то там надо будет всякие Asus5, Badd7 и т.д.
← →
Agent[007] (2003-11-02 08:40) [5]Ну или ещё че-нить для передачи строк...
← →
KSergey (2003-11-02 08:47) [6]Для строк ничего нет! Только if .. then .. else if...
В приницие эту конструкцию тоже можно красибо оформить и вполне читаемо.
PS
А если их там сотня - может как-то иначе организовать? Статическим массивом, например, задаваемым на этапе разработки, и в нем прописать значения, котороые куда-то там пихаться дубут? Приведите пару-тройку вариантов действий, которые происходитят при различных ChordAdd.Text - может что и подскажут.
← →
Opuhshii (2003-11-02 08:48) [7]а что такое PChar?
← →
Zacho (2003-11-02 08:53) [8]Например, такой вариант:
Заносишь свои строки в какой-нибудь потомок TStrings, и потом так :
case MyStrings.IndexOf(ChordAdd.Text) of
0: ...
1: ...
...
end;
← →
Zacho (2003-11-02 09:16) [9]Кстати, можно и вообще без case.
Алгоритм примерно такой:
Создаешь два массива: массив строк (можно и TStrings использовать и метод TStrings.IndexOf) и массив значений, к-рые тебе надо заносить в Chords. Номер строки в массиве строк должен соответствовать номеру строки в массиве значений. Находишь в массиве строк строку, совпадающую с ChordAdd.Text и заносишь в Chords.Cells значения из массива значений.
Примерный код:
Пусть у нас уже есть готовые массивы MyStrings и MyValues, тогда:
var
i:integer;
begin
for i:=Low(MyStrings) to High(MyStrings) do
begin
if MyStings[i]=Trim(ChordAdd.Text) then
begin
Cells[XtoChange, 5]:=MyValues[i,5];
Cells[XtoChange, 4]:=MyValues[i,4];
Cells[XtoChange, 3]:=MyValues[i,3];
Cells[XtoChange, 2]:=MyValues[i,2];
Cells[XtoChange, 1]:=MyValues[i,1];
Cells[XtoChange, 0]:=MyValues[i,0];
break;
end;
end;
end;
← →
Zacho (2003-11-02 09:41) [10]А можно и еще проще. Заполнить TStrings строками вида A=000202020000 и использовать TStrings.Values
Примерно так:
var
MyStrings:TStrings;
s:=string;
begin
MyStrings:=TStringList.Create;
MyStrings.Add("A=000202020000");
MyStrings.Add(..
...
s:=MyStrings.Values[ChordAdd.Text];
Cells[XtoChange, 0]:=copy(s,1,2);
Cells[XtoChange, 1]:=copy(s,3,2);
...
Что-то я разошелся :)
А вообще-то есть еще и другие варианты :-)
← →
KSergey (2003-11-02 09:43) [11][9] Zacho © (02.11.03 09:16)
Предлагаю не забегать вперед и сначала выслушать ответ автора на вопрос из [6] KSergey © (02.11.03 08:47) "Приведите пару-тройку вариантов действий, которые происходитят при различных ChordAdd.Text"
Ведь в вашем варианте предполагается, что всегда прописываются элементы с номерами 0..5
А может там еще какие-то вариаты бывают?
А так, если исходить из этого. то сделать, думаю, стоит несколько иначе: массив структур, что я и имел в виду, задавая уточняющий вопрос.
← →
Agent[007] (2003-11-02 10:07) [12]Всем большое спасибо... THANKS
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c