Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 286

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты! Необходимо сменить transparent в true для всех лейблов и чекбоксов на всех формах проекта, их порядка сотни, вручную это делать - пустая трата времени. Есть ли какой-ть тулз для автоматизации процессы смены свойства?

Phoenix Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Phoenix (статус: Посетитель)
Вопрос отправлен: 14 октября 2009, 17:48
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 15 октября 2009, 04:05; участников в обсуждении: 4.

14 октября 2009, 19:57: Вопрос перемещён из тематического раздела Delphi » Оболочка Delphi, компилятор, версии среды и т.д. в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.

Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 14 октября 2009, 19:57 [#1]:

Открыть блокнотом dfm-файл и сделать Replace.
Phoenix

Phoenix (статус: Посетитель), 14 октября 2009, 20:10 [#2]:

вся проблема в том, что свойство по умолчанию "false" не записывается в dfm, поэтому реплейс не подходит.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 14 октября 2009, 21:46 [#3]:

обязательно сделать это на стадии проектирования? может в run-time - будет проще?
Phoenix

Phoenix (статус: Посетитель), 14 октября 2009, 23:22 [#4]:

проект готов, мне нужно просто изменить свойства всех указанных компонентов
Александр Дубик

Александр Дубик (статус: 1-ый класс), 15 октября 2009, 04:05 [#5]:

Слегка изменил процедуру, найденную в DelphiWorld. Не очень красиво, но для разового использования пойдёт.
uses
  …, TypInfo;
 
…
 
procedure SetPropertiesForAllForms(ClassName_, SomeProperty: string; Value: Integer);
 
  procedure SetProperties(Form: TComponent; ClassName, SomeProperty: string; Value: Integer);
  var
    i: Integer;
    PropInfo: PPropInfo;
    Component:TComponent;
  begin
    for i := 0 to Form.ComponentCount - 1 do
    begin
      Component := Form.Components[i];
      if (Component is TControl) and ((Component.ClassName = ClassName)
        or (ClassName = 'AllComponents')) then
      begin
        PropInfo := GetPropInfo(Component.ClassInfo, SomeProperty);
        if Assigned(PropInfo) then
          SetOrdProp(Component, PropInfo, Integer(Value));
      end;
    end;
  end;
 
var i: Integer;
begin
  with Application do
  for i := 0 to ComponentCount - 1 do
    if Components[i] is TForm then
      SetProperties(Components[i], ClassName_, SomeProperty, Value);
end;
 
procedure TfrmMain.Button1Click(Sender: TObject);
var
  i: Integer;
  OutPath: String;
begin
  OutPath := ExtractFilePath(ParamStr(0)) + 'Modified Forms\';
  if not DirectoryExists(OutPath) then MkDir(OutPath);
  SetPropertiesForAllForms('TLabel', 'Transparent', 1);
  SetPropertiesForAllForms('TCheckBox', 'Transparent', 1);
  with Application do
    for i := 0 to ComponentCount - 1 do
      if Components[i] is TForm then
        WriteComponentResFile(OutPath + Components[i].Name + '.dfm', Components[i]);
end;

Думаю комментарии здесь можно опустить.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:49
Выполнено за 0.03 сек.