Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массовое изменение свойств 
:(
    Опции темы
lamravas
Дата 7.7.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



Вот у меня нескольлько компонентов у них есть общее свойство которое я хочу менять в процессе работы приложения.
вот пример
Код


case pcontrol.ActivePageIndex of
0:begin  lpPOnum.LookupSource:=sQadjust;
trdate.DataSource:=sqadjust;
tdescr.DataSource:=sqadjust;
tjtype.DataSource:=sqadjust;
testim.DataSource:=sqadjust;
tpradj.DataSource:=sqadjust;
tcur.DataSource:=sqadjust;
tdesm.DataSource:=sqadjust;
  end;
  1: begin lpPOnum.LookupSource:=ssaved;
  trdate.DataSource:=ssaved;
  tdescr.DataSource:=ssaved;
  tjtype.DataSource:=ssaved;
  testim.DataSource:=ssaved;
  tpradj.DataSource:=ssaved;
  tcur.DataSource:=ssaved;
  tdesm.DataSource:=ssaved;
     end;
    2:begin  lpPOnum.LookupSource:=sclosed;
    trdate.DataSource:=sclosed;
    tdescr.DataSource:=sclosed;
    tjtype.DataSource:=sclosed;
    testim.DataSource:=sclosed;
    tpradj.DataSource:=sclosed;
    tcur.DataSource:=sclosed;
    tdesm.DataSource:=sclosed;
      end;

проблем бы не было только вот компонентов стало неприлично много , хочу узнать если более изящный способ.????
PM MAIL   Вверх
Alexeis
Дата 7.7.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



lamravas, занести компоненты в массив и менять в цикле.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lamravas
Дата 7.7.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



Цитата(Alexeis @  7.7.2008,  14:37 Найти цитируемый пост)
lamravas, занести компоненты в массив и менять в цикле. 

нельзя небольшой примерчик
PM MAIL   Вверх
Alexeis
Дата 7.7.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Код

var
  i : Integer;
begin
  for I := 0 to DataContrlosLen - 1
  do
    if DataContrlos[i] is TDBImage then (DataContrlos[i] as TDBImage).DataSource    = ssaved
    else if DataContrlos[i] is TDBMemo then (DataContrlos[i] as TDBMemo).DataSource = ssaved;
    ...


Если у компонентов есть общий предок, то дело упрощается.

Добавлено через 5 минут и 39 секунд
  Кстати можно еще использовать модуль TypInfo и устанавливать свойство при помощи SetPropValue не возясь с типами, менять просто по строковому имени. Это будет еще изящней, но намного медленнее. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lamravas
Дата 8.7.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



блин проблемка еще в том что это форма создаёться 
Код


with tfrmjobadd.create(self) do
begin
  i:=showmodal;
  free;
rdate.DataSource:=frmjobs.Sjobs;
  descr.DataSource:=frmjobs.sjobs;
  lpjtypes.DataSource:=frmjobs.sjobs;
  lpclid.DataSource:=frmjobs.sjobs;
  ponum.DataSource:=frmjobs.sjobs; 
end;

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


rdate.DataSource:=frmjobs.Sjobs;


что делать как присвоить новое свойство компоненту на другой форме???? smile 
PM MAIL   Вверх
Alexeis
Дата 8.7.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(lamravas @  8.7.2008,  08:41 Найти цитируемый пост)
что делать как присвоить новое свойство компоненту на другой форме????

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lamravas
Дата 8.7.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



Ну вот у меня к примеру форма1  на ней кнопа при нажатиии выполняеться вызов формы2, формы-ввода, след. образом
Код

i:integer;
begin
 qQuot.edit;
 qQuotUndel.Value:=1;
 if  qquotjclose.Value=1 then
 MessageDlg('This Job closed!!!', mtWarning, [mbYes], 0) else
 with tfrmQuotAdd.create(self) do
    begin
    i:=showmodal;
    free;
    end;
 case i of
 mrOK: begin qquotqsave.Value:='0'; qquot.Post; end;
 mrcancel: begin qquot.Cancel;  end;
 mrYes: begin qquotqsave.Value:='q'; qquot.Post;
 qQuot.Close; qsave.Close;  qclosed.Close;
 qQuot.Open;  qsave.Open;  qclosed.Open; qquot.Refresh; end;
 end;
qquot.Refresh;


Код

with tfrmQuotAdd.create(self) do
    begin
    i:=showmodal;
    free;
    end;

на этой форме2 ввода (которая создаёться )  присутствуют компоненты связанные с таблицией находящейся на форме1.
На форме 1 присутствует pagecontrol-компонет при изменении которого у компонентов на форме 2 следует изменять свойства компонентов(благо оно одно) это ДАТАСОУРС. Проблема еще  в том что датасоурсы находятся на форме1
это на онкрейт формы2(ввода)
Код

case frmjobs.PControl.ActivePageIndex of
0:begin
  rdate.DataSource:=frmjobs.Sjobs;
  descr.DataSource:=frmjobs.sjobs;
  lpjtypes.DataSource:=frmjobs.sjobs;
  lpclid.DataSource:=frmjobs.sjobs;
  ponum.DataSource:=frmjobs.sjobs;   end;
  1: begin
  rdate.DataSource:=frmjobs.ssaved;
  descr.DataSource:=frmjobs.ssaved;
  lpjtypes.DataSource:=frmjobs.ssaved;
  lpclid.DataSource:=frmjobs.ssaved;
  ponum.DataSource:=frmjobs.ssaved;  end;
    2:begin
  rdate.DataSource:=frmjobs.sclosed;
  descr.DataSource:=frmjobs.sclosed;
  lpjtypes.DataSource:=frmjobs.sclosed;
  lpclid.DataSource:=frmjobs.sclosed;
  ponum.DataSource:=frmjobs.sclosed; end;
end;

итак имеем 
Форма1 (pagecontrol, cxgrid, button, Датасоурсы)
Форма2 (компоненты связанные с таблице на форме1)
PM MAIL   Вверх
Alexeis
Дата 8.7.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Гм.. я не силен в СУБД, но мне кажеться что тут что-то со структурой не в порядке. Можно в конечную форму кинуть TSQL  или как там его и использовать как источник данных. В общем так чтобы связывался только 1 компонент, а все остальные связывались через него.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lamravas
Дата 8.7.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



Да нет неважно субд это или еще чтото
Просто ответьте такое возможно или нет
При вызове формы поменять значение свойства1 (к примеру) компонентов находящихся на вызванной форме, на значение находящиеся на первоначальной форме с которого осуществляеться вызов???
Вот и всё
PM MAIL   Вверх
Alexeis
Дата 8.7.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



lamravas, это неверно с точки зрения проектирование системы. Жесткая связь неотказоустойчиая и негибкая. Лучше отослать сообщение или передать объект, который на месте все настроит сам.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lamravas
Дата 8.7.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 23.1.2008

Репутация: нет
Всего: нет



Alexeis,  Т.е. если я правильно понял то мне надо свойство, передаваемое компонентам на форме2, послать сначала с формы1 на форму2,
А уже в дальнейшем изменять свойства компонентов на  полученные?
PM MAIL   Вверх
Alexeis
Дата 8.7.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(lamravas @  8.7.2008,  11:29 Найти цитируемый пост)
Т.е. если я правильно понял то мне надо свойство, передаваемое компонентам на форме2, послать сначала с формы1 на форму2,
А уже в дальнейшем изменять свойства компонентов на  полученные? 

  Примерно, так. Только лучше это сделать не по свойствам, а ввиде одной или 2х логически оформленных программных единиц, ввиде передачи объекта или интерфейса. Почитайте книжку по патернам, это здорово облегчит проектирование. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
pseud
Дата 14.7.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Цитата(lamravas @  8.7.2008,  09:41 Найти цитируемый пост)

Код

with tfrmjobadd.create(self) do
begin
  i:=showmodal;
  free;
  rdate.DataSource:=frmjobs.Sjobs;
  descr.DataSource:=frmjobs.sjobs;
  lpjtypes.DataSource:=frmjobs.sjobs;
  lpclid.DataSource:=frmjobs.sjobs;
  ponum.DataSource:=frmjobs.sjobs; 
end;

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

rdate.DataSource:=frmjobs.Sjobs;

что делать как присвоить новое свойство компоненту на другой форме???? smile
 


по-моему, ты страдаешь херней.
обращаешься к свойствам компонентов, лежаших на несуществующей (удаленной тобой же free) форме.
попробуй так:
Код

with tfrmjobadd.create(self) do
try
  i:=showmodal;
  rdate.DataSource:=frmjobs.Sjobs;
  descr.DataSource:=frmjobs.sjobs;
  lpjtypes.DataSource:=frmjobs.sjobs;
  lpclid.DataSource:=frmjobs.sjobs;
  ponum.DataSource:=frmjobs.sjobs; 
finally
  free;
end;


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


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.