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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2010, 18:19   #1
areyoudead
 
Регистрация: 24.10.2010
Сообщений: 7
По умолчанию привязка к динамическим объектам

Добрый вечер, обращаюсь к вам за помощью ещё раз)
Есть динамически создаваемые формы, на них динамически создаваемые компоненты
вопрос: как намертво привязать эти компоненты к конкретной, созданной форме.
через parent, owner или через что-то еще, не могу разобраться.
Просто создаешь одну форму, на ней все работает, создаешь следующую, не закрывая старую, на ней тоже все работает, а на предыдущей все события кнопок и созданные компоненты обращаются к последней созданной форме .

Последний раз редактировалось mihali4; 04.11.2010 в 01:59.
areyoudead вне форума Ответить с цитированием
Старый 03.11.2010, 19:35   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
NewButton.Parent:=NewForm;
NewButton.OnClick:=NewForm.MyButton.Click;
mihali4 вне форума Ответить с цитированием
Старый 04.11.2010, 00:16   #3
areyoudead
 
Регистрация: 24.10.2010
Сообщений: 7
По умолчанию

а как быть с таким компонентами как ADOConnection ADOTable и подобные, у которых нет Parent?
заменить Owner? подскажите как будет выглядеть синтаксис?
areyoudead вне форума Ответить с цитированием
Старый 04.11.2010, 00:48   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну что, без "доброго дяди" никак ?
Или серое вещество кончилось ?
Или просто лень самому ?
Код:
var q: TQuery;
begin
q:=TQuery.Create(Form1);
q.DatabaseName:='DBDEMOS';
DataSource1.DataSet:=q;
q.SQL.Text:='select * from events';
q.Open;
end;
mihali4 вне форума Ответить с цитированием
Старый 04.11.2010, 01:37   #5
areyoudead
 
Регистрация: 24.10.2010
Сообщений: 7
По умолчанию

да в том то и дело , что сам во всем стараюсь разбираться, перед тем как сюда написать, кучу всего перерыл и перечитал.
Поэтому уже не один день пытаюсь разобраться сам.

Но с этим случаем, что-то не так, не могу понять самой привязки или что-то неправильно делаю.
Прикрепляю проектик, если не сложно посмотрите, укажите ошибку.

вот описание небольшое в чем загвоздка:
Цитата:
Откройте комбо1, нажмите "редактировать" все в нем работает.
Откройте, не закрывая первое, комбо2, там тоже с редактированием все правильно, а теперь вернитесь к открытому первому.
В нем отображаются данные из последнего созданного, а нужно, чтобы вновь созданная форма, не перебивала значения старой
Вложения
Тип файла: rar TEST.rar (421.2 Кб, 11 просмотров)

Последний раз редактировалось mihali4; 04.11.2010 в 02:00.
areyoudead вне форума Ответить с цитированием
Старый 04.11.2010, 01:55   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Может, все-таки
Код:
ManageTovar.ShowModal; 
ManageTovar.Free;
?
Если б вы разные формочки создавали для каждого склада...
А так неразбериха получается ! Раз создали форму редактирования, два создали ее же (не убив предыдущий экземпляр)...
Вот вам и "накладки"...

Кстати, ни комбо1, ни комбо2 не нашел... Есть только комбо3.

Последний раз редактировалось mihali4; 04.11.2010 в 02:04.
mihali4 вне форума Ответить с цитированием
Старый 04.11.2010, 07:53   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
а нужно, чтобы вновь созданная форма, не перебивала значения старой
Не нужно использовать глобальные переменные при формировании данных формы. Я имею ввиду вот эти переменные.
var
EditTovarForm: TEditTovarForm;
var
KodTovara,
Naimenovanie,
Edinitsy,
Kolichestvo,
Tara,
KolichestvoVTare,
MaksSrok,
Dlinna,
Shirina,
Visota,
NomerSklada,
MestoNaSklade,
DataPostuplenia,
DataSpisania,
CENA,
operator:string;
rs:_Recordset;

вновь создаваемая форма ПЕРЕБИВАЕТ их значения и при повторном их использовании в первой форме вы получаете их новые значения (для второй формы).Перенесите все зти объявления в раздел Private (или publuc) соответсвующей формы.

А еще лучше перенсти вот этот код
Код:
          Command.CommandText:=('select * from [товары] where [код товара]='+data.DataSet.FieldByName('Код товара').Text+';');
          rs :=command.Execute;
          with EditTovarForm do
          begin



          KodTovara:=rs.Fields['Код товара'].Value;
          KodTovaraEdit.Text:=rs.Fields['Код товара'].Value;
          NaimenovanieEdit.Text:=rs.Fields['Наименование'].Value;
          EdinitsyCombo.Text:=rs.Fields['Единицы'].Value;
          KolichestvoEdit.Text:=rs.Fields['Количество на складе'].Value;
          TaraCombo.Text:=rs.Fields['Тара'].Value;
          KolichestvoVTareEdit.Text:=rs.Fields['Количество в таре'].Value;
          MaksSrokEdit.Text:=rs.Fields['Макс срок хранения на складе'].Value;
          DlinnaEdit.Text:=rs.Fields['Длинна'].Value;
          ShirinaEdit.Text:=rs.Fields['Ширина'].Value;
          VisotaEdit.Text:=rs.Fields['Высота'].Value;
          NomerSkladaCombo.Text:=rs.Fields['Номер склада'].Value;
          MestoNaSkladeEdit.Text:=rs.Fields['Место на складе'].Value;
          DataPostupleniaPicker.Date:=Strtodate(rs.Fields['Дата поступления'].Value);
          DataSpisaniaPicker.Date:=Strtodate(rs.Fields['Дата списания'].Value);
          CENAEdit.Text:=rs.Fields['Цена'].Value;
          //Заносится уже имя редактирующего
          operatoredit.Text:=rs.Fields['Оператор'].Value;
//говорит нам о том , что мы редактируем товар
EditDialog:=true;

end;
rs.Close;
Оставив здесь
Код:
with EditTovarForm do 
  editcode:=data.DataSet.FieldByName('Êîä òîâàðà').Text;
В такую процедуру

Код:
procedure TEditTovarForm.EditCode(tovarcode: string);
begin
           Command.CommandText:=('select * from [товары] where [код товара]='+data.DataSet.FieldByName('Код товара').Text+';');
          rs :=command.Execute;
          with EditTovarForm do
          begin



          KodTovara:=rs.Fields['Код товара'].Value;
          KodTovaraEdit.Text:=rs.Fields['Код товара'].Value;
          NaimenovanieEdit.Text:=rs.Fields['Наименование'].Value;
          EdinitsyCombo.Text:=rs.Fields['Единицы'].Value;
         KolichestvoEdit.Text:=rs.Fields['Количество на складе'].Value;
          TaraCombo.Text:=rs.Fields['Тара'].Value;
          KolichestvoVTareEdit.Text:=rs.Fields['Количество в таре'].Value;
          MaksSrokEdit.Text:=rs.Fields['Макс срок хранения на складе'].Value;
          DlinnaEdit.Text:=rs.Fields['Длинна'].Value;
          ShirinaEdit.Text:=rs.Fields['Ширина'].Value;
          VisotaEdit.Text:=rs.Fields['Высота'].Value;
          NomerSkladaCombo.Text:=rs.Fields['Номер склада'].Value;
          MestoNaSkladeEdit.Text:=rs.Fields['Место на складе'].Value;
          DataPostupleniaPicker.Date:=Strtodate(rs.Fields['Дата поступления'].Value);
          DataSpisaniaPicker.Date:=Strtodate(rs.Fields['Дата списания'].Value);
          CENAEdit.Text:=rs.Fields['Цена'].Value;
          //Заносится уже имя редактирующего
          operatoredit.Text:=rs.Fields['Оператор'].Value;
//говорит нам о том , что мы редактируем товар
EditDialog:=true;

end;
rs.Close;
end;
в зтом случае эти переменные возможно даже и не понадобятся.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 04.11.2010 в 08:14.
evg_m вне форума Ответить с цитированием
Старый 04.11.2010, 14:15   #8
areyoudead
 
Регистрация: 24.10.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Кстати, ни комбо1, ни комбо2 не нашел... Есть только комбо3.
Извините, что я немного не понятно написал, я имел ввиду, что нужно выбрать в первом окошке, в комбобоксе, сначала значение "1", запустить, потом значение "2" не закрывая предыдущее и его тоже запустить по кнопке. Поэтому ShowModal тут не очень подходит.
нужно чтобы оба окна были активны одновременно.

evg_m, сейчас попробую ваш способ, просто я думаю что все равно если перенести это в отдельную процедуру, старая форма будет ссылаться к этой процедуре в новой форме, так как она уже создала новые значения, поверх старых

кстати, спасибо вам, что не оставляете без внимания

Последний раз редактировалось areyoudead; 04.11.2010 в 14:20.
areyoudead вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обращение к объектам по индексам Zo0M Общие вопросы Delphi 8 24.02.2010 14:15
Обращение к объектам не зная объекта) Djem1991 Общие вопросы Delphi 5 02.01.2010 21:44
вопрос по объектам на паскале demonara Помощь студентам 7 09.09.2009 20:52
С++ Интересный вопрос по объектам: Познающий Помощь студентам 12 11.05.2009 19:26
Обращение к объектам в процедуре. Maxs Помощь студентам 5 02.05.2009 12:54