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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2011, 21:16   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию Delphi 2010 пересчитать все формы проекта программно.

Доброго времени суток

Собственно вопрос, хочется реализовать что-то вроде такого:
Код:
for i:= 0 to FormsCount do
begin
Form[i].ShowHint:=True;
end;
в проекте 25 форм.
И не хочется делать так:
Код:
Form1.ShowHint:=ChackBox1.checked;
Form2.ShowHint:=ChackBox1.checked;
Form3.ShowHint:=ChackBox1.checked;
Form4.ShowHint:=ChackBox1.checked;
FormN.ShowHint:=ChackBox1.checked;
...
Form25.ShowHint:=ChackBox1.checked;
У Application смотрел, нету такого.
А creen не одходит т.к. перечсчитывает только те окна что на экране
Человек_Борща вне форума Ответить с цитированием
Старый 13.04.2011, 21:30   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Уже созданные формы можно с использованием Application.Components и Application.ComponentCount, при условии, что при создании формы было Create(Application). А при создании новой ShowHint нужно присваивать

UPD
Не забыть Application.Components[i] is TForm
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.04.2011 в 21:33.
Аватар вне форума Ответить с цитированием
Старый 13.04.2011, 21:41   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ага=)

Код:
var
  Form2: TForm2;

implementation

uses
  Unit3,
  Unit4,
  Unit5;
{$R *.dfm}

procedure TForm2.Button3Click(Sender: TObject);
begin
  Form3.Show;
end;

procedure TForm2.Button4Click(Sender: TObject);
begin
  Form4.Show;
end;

procedure TForm2.Button5Click(Sender: TObject);
begin
  Form5.Show;
end;

procedure TForm2.Button6Click(Sender: TObject);
var
  i: Integer;
begin
  For i := 0 to Application.ComponentCount - 1 do
  begin
    If Components[i].ClassType = TForm then
    begin
    (Components[i] as TForm).ShowHint := True;
    end;
  end;
end;

end.
Не работает, может что-то не так?
Человек_Борща вне форума Ответить с цитированием
Старый 13.04.2011, 21:58   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ваш Components[i].ClassType относится к Form2, а не к Application

upd
а если форма будет унаследована не от TForm, а от его потомка то Application.Components[i] is TForm будет корректно, а Application.Components[i].ClassType = TForm???
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.04.2011 в 22:02.
Аватар вне форума Ответить с цитированием
Старый 13.04.2011, 22:08   #5
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Вообще то Screen перечисляет как раз все созданные в данный момент формы (кроме доков).
eduard93 вне форума Ответить с цитированием
Старый 13.04.2011, 22:10   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар
Ваш Components[i].ClassType относится к Form2, а не к Application
позволю себе прокомментировать абсолютно верное замечание Аватар исправленным кодом:
Код:
  For i := 0 to Application.ComponentCount - 1 do
  begin
    If Application.Components[i].ClassType = TForm then
    begin
    (Application.Components[i] as TForm).ShowHint := True;
    end;
  end;
p.s. разумеется, я не проверял...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2011, 22:39   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

eduard93, Спасибо!

сработал такой код:
Код:
procedure TForm2.Button6Click(Sender: TObject);
var
  i:SmallInt;
begin
  For i:=0 To Screen.FormCount -1 do
  begin
    Screen.Forms[i].ShowHint:=true;
  end;
end;
и спасибо справке:
Цитата:
Сообщение от Delphi Help
Read FormCount to learn the number of forms currently displayed on the screen. These forms can be accessed by the Forms property. FormCount can be used with Forms to iterate over all the forms in an application.
чтобы убедиться, я помучал себя, создал 4 формы и на первой положил 5 кнопок.
Далее:
Код:
implementation

uses Unit2,Unit3,Unit4;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
Form2.Show;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
Form3.Show;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
Form4.Show;
end;

procedure TForm2.Button4Click(Sender: TObject);
var
  i:SmallInt;
begin
  For i:=0 To Screen.FormCount -1 do
  begin
    Screen.Forms[i].ShowHint:=true;
  end;
end;

procedure TForm2.Button5Click(Sender: TObject);
begin
If Form1.ShowHint then
Label1.Caption:='1'
else
begin
 Label1.Caption:='0';
end;

If Form2.ShowHint then
Label2.Caption:='1'
else
begin
 Label2.Caption:='0';
end;

If Form3.ShowHint then
Label3.Caption:='1'
else
begin
 Label3.Caption:='0';
end;

If Form4.ShowHint then
Label4.Caption:='1'
else
begin
 Label4.Caption:='0';
end;
end;

end.
не показывая формы 2,3,4 тыкнул выставить всем ShowHint:=True далее тыкнул кнопку и все метки изменились на 1=)

Последний раз редактировалось Человек_Борща; 13.04.2011 в 22:44.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание формы в delphi 2010 zotox Общие вопросы Delphi 3 27.06.2010 13:51
Как программно закрыть все открытые модальные формы перед сворачиванием главной формы в трей? SkAndrew Общие вопросы Delphi 8 27.01.2010 22:44
Как "закрепить" все главные окна в Delphi 2010 / 2009? Vill Общие вопросы Delphi 2 11.11.2009 01:18
Как программно перебрать в цикле все формы в приложении? chandrasecar Общие вопросы Delphi 18 11.09.2009 12:14
Как программно перечислить все формы приложения? Avron Общие вопросы Delphi 5 07.09.2007 08:51