| 
| 
 | Вопрос # 3 286/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты! Необходимо сменить transparent в true для всех лейблов и чекбоксов на всех формах проекта, их порядка сотни, вручную это делать - пустая трата времени. Есть ли какой-ть тулз для автоматизации процессы смены свойства? 
|  |   Вопрос задал: 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 (статус: Посетитель), 14 октября 2009, 20:10 [#2]:вся проблема в том, что свойство по умолчанию "false" не записывается в dfm, поэтому реплейс не подходит. |  
|   | Мережников Андрей (статус: Абитуриент), 14 октября 2009, 21:46 [#3]:обязательно сделать это на стадии проектирования? может в run-time - будет проще? |  
|   | 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;Думаю комментарии здесь можно опустить.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |