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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 11:24   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Поиск компонента на форме

Здраствуйте, есть датамодуль на котором лежит 4 компанента для подключения к базе, в ходе выполнения программы динамически создаются ешё датамодули, при этом в квери из датамодулей нужно создат ьпараметры, и этим параметрам присвоить значения динамически созданых дататаймпикеров, проблема в том что не находит пикеры... хотя вроде всё верно
Код:
         with DM[y+1].Query do
          begin
          Close;
          SQL.Clear;
          //Params.AddParam(Params.CreateParam(ftUnknown,'date1',ptInput));
          //ParamByName('date1').AsDate:=TDateTimePicker(Form1.FindComponent('DateTimePicker')).Date;
          SQL.Text:=SqlText;
          for i:=1 to Form1.StringGrid1.RowCount do
              begin
               //Params.AddParam(Params.CreateParam(ftUnknown,'date'+intToStr(i),ptInput));
               ShowMessage(DateToStr(TDateTimePicker(Form1.FindComponent('DateTimePicker'+intToStr(i))).Date));
               //ParamByName('date'+intToStr(i)).AsDate:=TDateTimePicker(Form1.FindComponent('DateTimePicker'+intToStr(i))).Date;
              end;
          //DM[y+1].Trans.Active:=true;
          //Active:=true;
          end;
Создание дататаймпикеров

Код:
 If Status='1' then
   begin
    temp:=SqlText;
    rcount:=0;
    While Pos(':', temp)>1 do
      begin
         //ñîçäà¸ì êîìïàíåíò
        Form1.StringGrid1.RowCount:=rcount+1;    // ZAMENA!!!!!!!!!!!
        DateTimePicker:=TDateTimePicker.Create(self);
        DateTimePicker.Parent:=Form1;
        DateTimePicker.Name:='DateTimePicker'+IntTOStr(rcount+1);
       // âñòàâëÿåì
        Form1.StringGrid1.Objects[1, rcount]:=DateTimePicker;
        Form1.StringGrid1.Objects[1, rcount].AfterConstruction;
        R:= Form1.StringGrid1.CellRect(1, rcount);
        if (Form1.StringGrid1.Objects[1, rcount] is TControl) then
        with TControl(Form1.StringGrid1.Objects[1, rcount]) do
        // åñëè ðàçìåð ÿ÷åéêè íå ðàâåí 0, òî äåëàåì åãî íåâèäèìûì
          if R.Right = R.Left then
             Visible:=false
             else
             begin
            // èíà÷å ðèñóåì åãî
              InflateRect(R, -1, -1);
              OffsetRect(R, Form1.StringGrid1.Left+1, Form1.StringGrid1.Top+1);
              BoundsRect:=R;
             // äåëàåì êîìïîíåíò âèäèìûì
             Visible:=true;
            end;
        inc(rcount);
        delete(temp, Pos(':', temp), 1);
      end;
при попытке вывести хотябы значения дататаймпикеров валится, с ошибкой доступа к памяти

ShowMessage(DateToStr(TDateTimePick er(Form1.FindComponent('DateTimePic ker'+intToStr(i))).Date));

Access violation at address 0044858B in module 'UZVS.exe'. Read of address 00000210
Dozent вне форума Ответить с цитированием
Старый 22.05.2012, 11:54   #2
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Ошибка чтения данных.
UZVS.exe - возможно модуль не указан в разделе Uses или его нет в папке программы.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 22.05.2012, 12:15   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
есть датамодуль на котором лежит 4 компанента для подключения к базе,
ищешь не там где положил, а где светлее.
Код:
DateTimePicker:=TDateTimePicker.Create(self);
положил в датамодуль
Код:
TDateTimePicker(Form1.FindComponent('DateTimePicker'+intToStr(i))).Date)
ищешь на форме

читать про Tcomponent
Tcomponent.Owner
Tcomponent.Components
Tcomponent.Findcomponent
Tcomponent.Create(Aowner: TComponent)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 22.05.2012, 13:14   #4
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

evg_m, спс за подсказку, положил не в дата модуль а на форму два ибо создание идёт в форме2

Код:
 DateTimePicker:=TDateTimePicker.Create(Form1)
работает спс большое
Dozent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов события компонента на другой форме Lokos Общие вопросы Delphi 4 02.08.2010 11:12
Компонент на форме -> работа компонента до создания формы YarUnderoaker Компоненты Delphi 2 26.07.2010 15:32
перемещение компонента по форме blackstersl Общие вопросы Delphi 4 15.08.2009 22:16
Перемешение компонента по форме Vladya Помощь студентам 3 26.05.2009 00:01
Как можно изменить цвет полосы меню компонента TMainmenu на форме? SkAndrew Общие вопросы Delphi 6 11.08.2008 17:35