Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2015, 17:36   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Возможно ли упростить код (SpeedButton.Down на несколько if и одно на всех else)

Доброе время суток форумчане,
Интересует такой вопрос:
Можно ли упростить такой код:

Код:
if SpeedButton1.Down then
    SHOW_SYMBOL(Eng, 0)
  else
  begin
    edEngWord.Text := dbedEngWord.Text;
    exit;
  end;
  if SpeedButton2.Down then
    SHOW_SYMBOL(Eng, 1)
  else
  begin
    edEngWord.Text := dbedEngWord.Text;
    exit;
  end;
  if SpeedButton3.Down then
    SHOW_SYMBOL(Eng, 2)
  else
  begin
    edEngWord.Text := dbedEngWord.Text;
    exit;
  end;
  if SpeedButton4.Down then
    SHOW_SYMBOL(Eng, 3)
  else
  begin
    edEngWord.Text := dbedEngWord.Text;
    exit;
  end;
а именно
код:
Код:
  begin
    edEngWord.Text := dbedEngWord.Text;
    exit;
  end
сделать в единичном экземпляре. Может как-то через «Case»?

Заранее спасибо.
KBO вне форума Ответить с цитированием
Старый 26.10.2015, 17:54   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Код:
 for i:=0 to Form1.ControlCount-1 do
  if Form1.Controls[i] is TSpeedButton
    then if TSpeedButton(Form1.Controls[i]).Down
      then SHOW_SYMBOL(Eng,TSpeedButton(Form1.Controls[i]).Tag)
        else
         begin
          edEngWord.Text := dbedEngWord.Text;
          Exit;
         end;
Тэги им надо присвоить 0,1,2,3. Иначе не знаю как эти 1,2,3,4 в SHOW_SYMBOL
type_Oleg вне форума Ответить с цитированием
Старый 26.10.2015, 17:56   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А где этот код помещается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.10.2015, 17:58   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

проще всего воспользоваться свойством Tag
пропиши нужное число где-то в FormCreate:
Код:
SpeedButton1.Tag:=1;
SpeedButton2.Tag:=2;
SpeedButton3.Tag:=3;
SpeedButton4.Tag:=4;

потом задай один обработчик все SpeedButton
Код:
begin
  if (Sender as TSpeedButton).Tag>0 then
    SHOW_SYMBOL(Eng, (Sender as TSpeedButton).Tag-1)
  else 
    edEngWord.Text := dbedEngWord.Text;
end;
p.s. пока сочинял ответ, уже меня опередили и про Tag вспомнили!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.10.2015, 18:00   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А где этот код помещается?
В обработчике DBEditChange(Sender: TObject);
KBO вне форума Ответить с цитированием
Старый 26.10.2015, 18:01   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А где этот код помещается?
это правильный вопрос!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.10.2015, 18:09   #7
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
проще всего воспользоваться свойством Tag
пропиши нужное число где-то в FormCreate:
Код:
SpeedButton1.Tag:=1;
SpeedButton2.Tag:=2;
SpeedButton3.Tag:=3;
SpeedButton4.Tag:=4;
та я наверное их стационарно забью в ObjectInspector
KBO вне форума Ответить с цитированием
Старый 26.10.2015, 18:49   #8
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

тут еще такая небольшая ошибка
raised exception class EInvalidCast with message 'Invalid class typecast'
вылазит на строке:
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
if (Sender as TSpeedButton).Tag>0 then
KBO вне форума Ответить с цитированием
Старый 26.10.2015, 18:55   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

а понял :-) перед этим нужно добавить

Код:
  if Sender is TSpeedButton then
и все вместе:
Код:
if Sender is TSpeedButton then
begin
  if (Sender as TSpeedButton).Tag>0 then
    SHOW_SYMBOL(Eng, (Sender as TSpeedButton).Tag-1)
  else 
    edEngWord.Text := dbedEngWord.Text;
end;

Последний раз редактировалось KBO; 26.10.2015 в 19:11.
KBO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли упростить формулу? СУММПРОИЗВ АННА-ЕАО Microsoft Office Excel 5 29.10.2015 09:38
Одно значение на несколько input L6go1as HTML и CSS 4 27.03.2015 13:39
Возможно ли упростить..? kta87 Общие вопросы Delphi 5 05.02.2012 16:38
Возможно ли упростить макрос? KOSTIK1 Microsoft Office Excel 6 31.08.2011 14:01
как возможно упростить? monogramm Общие вопросы по Java, Java SE, Kotlin 3 01.06.2011 01:40