Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2013, 00:59
Sheitan48 Sheitan48 вне форума
Прохожий
 
Регистрация: 05.05.2013
Сообщения: 11
Версия Delphi: RAD Studio 2010
Репутация: 10
Стрелка FindComponent и скрытая форма...

Всю голову себе сломал, хоть тресни FindComponent не верно отрабатывает если перед ним не сделать Form7.Show;
Не рабочий код:
Код:
dm.DbGrid2.DataSource.DataSet.Active:=true;
  dm.DbGrid2.DataSource.DataSet.First;
  while not dm.DbGrid2.DataSource.DataSet.Eof do
    begin
      i:=dm.DbGrid2.DataSource.DataSet.RecNo;
     { with Form7 do  }
      (Form7.FindComponent('MaskEdit'+IntToStr(i+1)) as TMaskEdit).Text:=dm.DbGrid2.DataSource.DataSet.FieldValues['FachPK'];
      if ((Form7.FindComponent('MaskEdit'+IntToStr(i+1)) as TMaskEdit).Text='СПЕЦИАЛЬНОСТЬ') then
        begin
          (Form7.FindComponent('Edit'+IntToStr(i+4)) as TEdit).Enabled:=False;
          (Form7.FindComponent('ComboBox'+IntToStr(i)) as TComboBox).ItemIndex:=1;
          (Form7.FindComponent('ComboBox'+IntToStr(i)) as TComboBox).Enabled:=False;
          (Form7.FindComponent('MaskEdit'+IntToStr(i+6)) as TMaskEdit).Enabled:=False;
          (Form7.FindComponent('Edit'+IntToStr(i+8)) as TEdit).Enabled:=False;
        end;
      dm.DbGrid2.DataSource.DataSet.Next;
      end;
Рабочий код:
Код:
  dm.DbGrid2.DataSource.DataSet.Active:=true;
  dm.DbGrid2.DataSource.DataSet.First;
  Form7.Show;//ОТЛИЧИЕ ТОЛЬКО В ЭТОЙ СТРОКЕ
  while not dm.DbGrid2.DataSource.DataSet.Eof do
    begin
      i:=dm.DbGrid2.DataSource.DataSet.RecNo;
     { with Form7 do  }
      (Form7.FindComponent('MaskEdit'+IntToStr(i+1)) as TMaskEdit).Text:=dm.DbGrid2.DataSource.DataSet.FieldValues['FachPK'];
      if ((Form7.FindComponent('MaskEdit'+IntToStr(i+1)) as TMaskEdit).Text='СПЕЦИАЛЬНОСТЬ') then
        begin
          (Form7.FindComponent('Edit'+IntToStr(i+4)) as TEdit).Enabled:=False;
          (Form7.FindComponent('ComboBox'+IntToStr(i)) as TComboBox).ItemIndex:=1;
          (Form7.FindComponent('ComboBox'+IntToStr(i)) as TComboBox).Enabled:=False;
          (Form7.FindComponent('MaskEdit'+IntToStr(i+6)) as TMaskEdit).Enabled:=False;
          (Form7.FindComponent('Edit'+IntToStr(i+8)) as TEdit).Enabled:=False;
        end;
      dm.DbGrid2.DataSource.DataSet.Next;
      end;
UPD. Причем даже нет, не так, НЕ ПРАВИЛЬНО отрабатывает именно
Код:
 if ((Form7.FindComponent('MaskEdit'+IntToStr(i+1)) as TMaskEdit).Text='СПЕЦИАЛЬНОСТЬ') then
т.е. в поле MaskEdit2 100% находится текст СПЕЦИАЛЬНОСТЬ который он все равно не верно сравнивает...
Собственно вопрос как сделать так чтоб выполнить findcomponent над form7 без необходимости показывания 7 формы?
P.S. Parent'ом для искомых компонентов является GroupBox1, но мне это нифига не помогло ибо при поиске в паренте выдает Error

Последний раз редактировалось Sheitan48, 22.05.2013 в 01:09.
Ответить с цитированием
  #2  
Старый 22.05.2013, 09:39
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Sheitan48
Всю голову себе сломал, хоть тресни FindComponent не верно отрабатывает если перед ним не сделать Form7.Show;
.....
UPD. Причем даже нет, не так, НЕ ПРАВИЛЬНО отрабатывает именно
Код:
 if ((Form7.FindComponent('MaskEdit'+IntToStr(i+1)) as TMaskEdit).Text='СПЕЦИАЛЬНОСТЬ') then
т.е. в поле MaskEdit2 100% находится текст СПЕЦИАЛЬНОСТЬ который он все равно не верно сравнивает...
Собственно вопрос как сделать так чтоб выполнить findcomponent над form7 без необходимости показывания 7 формы?
P.S. Parent'ом для искомых компонентов является GroupBox1, но мне это нифига не помогло ибо при поиске в паренте выдает Error
Не удалось мне сымитировать твою проблему - у меня FindComponent прекрасно находит все компоненты на скрытой форме.
Попробуй поставить точку останова на этой проблемной строке, и когда произойдёт в том месте останов - посмотри какое значение содержится в переменной i - скорее всего значение будет отличаться от предполагаемого тобой.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Sheitan48 (22.05.2013)
  #3  
Старый 22.05.2013, 10:24
Sheitan48 Sheitan48 вне форума
Прохожий
 
Регистрация: 05.05.2013
Сообщения: 11
Версия Delphi: RAD Studio 2010
Репутация: 10
По умолчанию

Да пробовал, верное туда значение пишется, собственно оно только здесь и используется, откуда ж ему не верному взяться... Да и тем более оно ж правильно отрабатывает если показать форму а значит и счетчик правильный пишется...

Не знаю с чем это связано, причем просто findcomponent отрабатывает, а на if сравнение со значением не верно делает %) бред какой-то...
Ответить с цитированием
  #4  
Старый 22.05.2013, 10:31
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Sheitan48
Не знаю с чем это связано, причем просто findcomponent отрабатывает, а на if сравнение со значением не верно делает %) бред какой-то...
Тогда посмотри какое значение в действительности в найденном TMaskEdit-е, например добавив перед этой проблемной строкой такую:
Код:
  ShowMessage('"'+(Form7.FindComponent('MaskEdit'+IntToStr(i+1)) as TMaskEdit).Text+'"');
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Sheitan48 (22.05.2013)
  #5  
Старый 22.05.2013, 11:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Или я чего-то не понимаю или лыжи не едут.
Зачем в вашем случае вообще искать что-то на форме? Вы же фактически работаете с текущим значением:
Код:
dm.DbGrid2.DataSource.DataSet.FieldValues['FachPK']

Не проще написать сразу?
Код:
if dm.DbGrid2.DataSource.DataSet.FieldValues['FachPK']='СПЕЦИАЛЬНОСТЬ') then
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Sheitan48 (22.05.2013)
  #6  
Старый 22.05.2013, 19:55
Sheitan48 Sheitan48 вне форума
Прохожий
 
Регистрация: 05.05.2013
Сообщения: 11
Версия Delphi: RAD Studio 2010
Репутация: 10
Смущение упс)

Цитата:
Сообщение от poli-smen
Код:
  ShowMessage('"'+(Form7.FindComponent('MaskEdit'+IntToStr(i+1)) as TMaskEdit).Text+'"');
Цитата:
Сообщение от Страдалецъ
Код:
dm.DbGrid2.DataSource.DataSet.FieldValues['FachPK']
Код:
if dm.DbGrid2.DataSource.DataSet.FieldValues['FachPK']='СПЕЦИАЛЬНОСТЬ') then


Ууу...позор мне) я почему то был на 100% уверен что в базе хранятся строки в верхнем регистре... Оказалось нет. В базе лежит "Специальность"...

И ShowMessage в итоге перед показом формы возвращает "Специальность", а после показа формы "СПЕЦИАЛЬНОСТЬ" (в MaskEdit'e CharCase выставлен в ecUpperCase)... Теперь стало понятно почему не правильно как я думал отрабатывал if...
Но это не отменяет непонимания мной того факта, почему перед показом формы возвращается значение которое находилось в базе, т.е. не обработанное с учетом CharCase...

Последний раз редактировалось Sheitan48, 22.05.2013 в 20:00.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:58.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter