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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2012, 21:23   #1
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию Исключение из проверки по Enabled...?

Пишу проверку на адекватность значений в LabeledEdit'ах
Код:
case ComboBox2.ItemIndex of
  0..7:
  begin
  for IndexLE:= 1 to 10 do
   begin
   if ((FindComponent('LabeledEdit'+IntToStr(IndexLE)) as TEdit).Text = '') or
    ((FindComponent('LabeledEdit'+IntToStr(IndexLE)) as TEdit).Text = '0') then
     begin
      ShowMessage('Одно или несколько полей ввода заполнены неверно!');
      (FindComponent('LabeledEdit'+IntToStr(IndexLE)) as TEdit).SetFocus;
     end;
   end;
  end;
 end;
Как добавить в этот код исключение LabeledEdit'ов, которые
Код:
Enabled:= False;
kta87 вне форума Ответить с цитированием
Старый 05.02.2012, 21:45   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Банальный цикл фо форме:
Код:
for i:=0 to Form.ComponentCount -1 do
begin
  If (Components[i] is TLabeledEdit) then
  begin
  if not (Components[i] as TLabeledEdit).enabled then continue else
  begin
  {DO SOMETHING! DO!!!1}
  end;
  end;
end;
Человек_Борща вне форума Ответить с цитированием
Старый 06.02.2012, 10:40   #3
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Не могу понять в чем ошибка... все компилируется, однако при полях ввода равных '' или '0' программа вылетает с ошибкой: Invalid Class TypeCast вы деляется при этом строка
Код:
if ((FindComponent('LabeledEdit'+IntToStr(IndexLE)) as TEdit).Text='') or
Весь код показан ниже
Код:
// Проверкана адекватность данных по LabeledEdit;
 for NComp:= 1 to Form1.ComponentCount -1 do
   begin
    if (Components[NComp] is TLabeledEdit) then
     begin
      if not (Components[NComp] as TLabeledEdit).Enabled then Continue else
      begin
      for IndexLE:=1 to 10 do
      if ((FindComponent('LabeledEdit'+IntToStr(IndexLE)) as TEdit).Text='') or
      ((FindComponent('LabeledEdit'+IntToStr(IndexLE)) as TEdit).Text='0') then
        begin
         ShowMessage('Одно или несколько полей ввода заполнены неверно!');
         (FindComponent('LabeledEdit'+IntToStr(IndexLE)) as TEdit).SetFocus;
         Exit;
        end;
      end;
     end;
   end;
Подскажите как исправить?
kta87 вне форума Ответить с цитированием
Старый 06.02.2012, 11:01   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Страшная тайна:
1. отсчет начинать с 0-я.
2. Если перебираете компоненты, то FindComponent вам больше не нужен.
Человек_Борща вне форума Ответить с цитированием
Старый 06.02.2012, 11:03   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Это что-то странное... Вы LabeledEdit приводите к Tedit ? разницу видите, думаю ? Причем в одном месте Вы делаете правильно а в другом неправильно
Если что, вот ещё инфа :
Доступ к тексту написанному в Эдите прицепленном к Labelededit осуществляется через свойство Text, а доступ к тексту в прицепленном лейбле по свойству Editlabel.caption
phomm вне форума Ответить с цитированием
Старый 06.02.2012, 11:18   #6
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

phomm, и действительно... но вот заметил только после того как вы написали... Человек_борща, согласен - с 0-я, просто тупанул, про ненужность FindComponent - не могли бы написать код в таком виде как вы его представляете?
kta87 вне форума Ответить с цитированием
Старый 06.02.2012, 12:11   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Человек Борща намекал, что нет смысла одновременно делать перебор компонентов в цикле и метод FindComponent (который сам по себе есть цикл по компонентам, в чем легко убедиться, Ctrl+кликнув по FindComponent, с просмотром его исходника в VCL).

Если Вам надо перебирать все компоненты и что-то с ними делать, то 1 цикл от Вас - нормальное решение, а если Вам надо только 1 компонент из всей массы, то FindComponent избавляет Вас от необходимости делать свой цикл.

Последний раз редактировалось phomm; 06.02.2012 в 12:13.
phomm вне форума Ответить с цитированием
Старый 06.02.2012, 12:35   #8
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

насчет labeledit приводить к edit это моя ошибка(ну я в другой теме вам помогал) я просто забыл про существование такого компонент и думал что ыу вас Tedit так называеться
Кольша вне форума Ответить с цитированием
Старый 06.02.2012, 12:48   #9
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Если Вам надо перебирать все компоненты и что-то с ними делать, то 1 цикл от Вас - нормальное решение, а если Вам надо только 1 компонент из всей массы, то FindComponent избавляет Вас от необходимости делать свой цикл.
Мой первый цикл работает... однако я просил помочь в него добавить исключение из проверки LebeledEdit'ов Enabled которых = False; вот собственно прошу с этим разобраться!
П.С. перебрать нужно по компонентам всем с индексами 1..10.
kta87 вне форума Ответить с цитированием
Старый 06.02.2012, 12:53   #10
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
for NComp:= 1 to Form1.ComponentCount -1 do
   begin
    if (Components[NComp] is TLabeledEdit) then
     begin
      if  (Components[NComp] as TLabeledEdit).Enabled then
      begin
      for IndexLE:=1 to 10 do
      if ((Components[NComp] as TLabeledEdit).Text='') or
      ((Components[NComp] as TLabeledEdit).Text='0') then
        begin
         ShowMessage('Одно или несколько полей ввода заполнены неверно!');
         (FindComponent('LabeledEdit'+IntToStr(IndexLE)) as TEdit).SetFocus;
         Exit;
        end;
      end;
     end;
   end;
Кольша вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сделать item of combobox enabled saltonik Общие вопросы Delphi 1 09.03.2011 23:40
Задержка с помощью timer.Enabled tisha077 Мультимедиа в Delphi 12 14.12.2009 02:33
Фокус и св-во enabled megachuhancer Общие вопросы Delphi 4 09.09.2009 11:59
Перехват изменения Enabled kinderproc Компоненты Delphi 4 22.06.2009 15:21
SpeedButton, glyph, enabled ScorpioN_T Общие вопросы Delphi 8 27.04.2009 19:14