Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-40990
User_OKA
2003-10-16 07:50
2003.11.13
Отображение значения справочника


7-42199
pst
2003-08-27 18:29
2003.11.13
AsyncPro for Delphi6


3-40903
ZA
2003-10-17 07:41
2003.11.13
INSERT и значение поля auto_increment


11-41130
ABM
2003-02-17 20:56
2003.11.13
<b>!!!! Ужас !!! KOLEDB, TQuery. Out of Memory !</b>


8-41768
Карелин Артем
2003-07-07 11:16
2003.11.13
Определение геометрических размеров пятна на рисунке.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский