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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2009, 13:00   #1
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию Как программно перебрать в цикле все формы в приложении?

В проекте существует много форм имеющих следующие имена: Form1, Form2, ... , FormN. Как перебрать все эти формы в цикле с целью установить всем одинаковые свойства? Предполагаю, что перебирать нужно по ее названию - String, а не по имени типа TForm.
Заранее благодарен.
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 18.08.2009, 13:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что хелп уже отменили?
Код:
for  I := 0 to Screen.FormCount-1 do
  begin
   Caption := Screen.Forms[I].Name;
  end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2009, 22:17   #3
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию

Такой код будет перебирать все формы на экране. А нужно перебирать лишь некоторые формы в проекте (они могут быть не видны) и к тому же по имени.
Я это представляю где-то так:
Код:
var FormName: String;
begin
for i:=1 to 5 do FormName:='DForm'+IntToStr(i);
{и вот по этому имени формы ее нужно найти и, например, изменить какие-то свойства}
end;
Возможно ли такое сделать?
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 01.09.2009, 00:03   #4
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Можно самый простой вариант: case.
Код:
case FormName of
'DForm1': SetFormParam(DForm1);
'DForm2': SetFormParam(DForm2);
// И так далее
end;
Манжосов Денис :) вне форума Ответить с цитированием
Старый 01.09.2009, 08:37   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А нужно перебирать лишь некоторые формы в проекте
Ну и что за проблема поставить условие на отсев форм?:
Код:
for  I := 0 to Screen.FormCount-1 do
  begin
   if pos('DForm',Screen.Forms[i].Name)<>0 then
    // Нужная форма
  end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.09.2009, 08:39   #6
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Так все-таки интереснее
Код:
var
  i: integer;
begin
  for i := 0 to Application.ComponentCount - 1 do
  begin
    if (Application.Components[i] is TForm)
    then Memo1.Lines.Add((Application.Components[i] as TForm).Name);
  end;
end;
Или еще вариант
Код:
var
 c: TComponent;
begin
c := Application.FindComponent('Form10');
if c <> nil then ShowMessage(c.name);
end;
Понятно, что формирование имени искомого компонента можно сделать динамическим.

Последний раз редактировалось Баламут; 01.09.2009 в 08:55.
Баламут вне форума Ответить с цитированием
Старый 09.09.2009, 11:06   #7
cowboy
Форумчанин
 
Регистрация: 12.03.2009
Сообщений: 109
По умолчанию

А как мне теперь обратиться к стринг гридам на этих формах? Он уже создан

Пробую вот так
Код:
for i := 0 to Application.ComponentCount - 1 do
  begin
    if (Application.Components[i] is Tstringgrid)
    then begin Memo1.Lines.Add((Application.Components[i] as Tstringgrid).cells[0,0]);
    end;

  end;
Но не выходит
cowboy вне форума Ответить с цитированием
Старый 09.09.2009, 11:48   #8
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

дык двойным перебором - сначала формы, потом компоненты на форме

Код:
((application.Components[i] as tform).Components[j] as tstringgrid).cells[0,0];
Ну намудрили я смотрю......

а если вы выполните вот такой кодик

Код:
var i:integer;
begin
for i := 0 to application.ComponentCount-1 do
  if (application.Components[i] is tstringgrid) then
    memo1.Lines.Add((application.Components[i] as tstringgrid).Cells[0,0]) else
    memo1.Lines.Add(application.Components[i].Name);
end;
то увидите, что application.componentcount - это кол-во форм, а не компонентов по формам
[Ferox]

Последний раз редактировалось postal2; 09.09.2009 в 11:59.
postal2 вне форума Ответить с цитированием
Старый 09.09.2009, 13:41   #9
cowboy
Форумчанин
 
Регистрация: 12.03.2009
Сообщений: 109
По умолчанию

Всем спасибо..Код если кому интересно следующий

Код:
var
i,j:integer;
begin

for i := 0 to application.ComponentCount-1 do
  if (application.Components[i] is tform) then
  for j:=0 to  (application.Components[i] as tform).ComponentCount-1 do
  if  (application.Components[i].Components[j] is tstringgrid) then
    memo1.Lines.Add(((application.Components[i] as tform).Components[j] as tstringgrid).cells[1,2]);


end;
cowboy вне форума Ответить с цитированием
Старый 09.09.2009, 14:00   #10
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

application.Components[i] всегда tform. По-моему. Но в принципе проверка не помешает.

Код:
(application.Components[i].Components[j] is tstringgrid) then
стринггридов на форме может быть много.
Ещё можно после того, как найден нужный компонент не гнать цикл дальше, а сделать break. Но это уже придирки, код рабочий
[Ferox]
postal2 вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перебрать все числа из заданных цифр, чтобы цифры в числах не повторялись? TwiX Общие вопросы Delphi 7 17.08.2009 16:56
как перебрать все элементы на форме? Аlex Общие вопросы C/C++ 1 07.02.2009 03:46
перебрать все варианты перестановки строк sv_mix Помощь студентам 2 26.07.2008 17:48
Как использовать две формы в одном приложении SeRhy Общие вопросы Delphi 6 23.01.2008 21:42
Как программно перечислить все формы приложения? Avron Общие вопросы Delphi 5 07.09.2007 08:51