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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2013, 16:11   #1
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию Есть ли возможность копирования свойств компонента?

К примеру, на форме в дизайнтайме размешается StringGrid и много времени уходит на настройку его свойств и вида.
Тут же на форме нужно разместить еще несколько точно таких же компонентов.
Можно, конечно, накопировать их и в дизайнтайме, но если бы была возможность на вновь созданный компонент в рантайме скоприровать все свойства с уже отлаженного компонента, то можно было бы их рассовать по форме в цикле с меньшими трудозатратами.
Т.е., не может ли существовать аналог дизайнтаймовского Ctrl+C -> Ctrl+V?

Речь о D 2010.
Прик вне форума Ответить с цитированием
Старый 23.08.2013, 16:33   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Это понятно, общее место.
Но вопрос был в другом: нет ли такой же возможность в run-time?
Прик вне форума Ответить с цитированием
Старый 23.08.2013, 16:58   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно попробовать используя Clipboard
Код:
procedure TForm1.Button1Click(Sender: TObject);
var xGrid: TStringGrid;
begin
  Clipboard.SetComponent(StringGrid1);
  StringGrid1.Name:='NewNameStringGrid';
  xGrid:=TStringGrid(Clipboard.GetComponent(Self,Self));
  xGrid.Top:=0;
  xGrid.Left:=0;
end;

initialization

RegisterClasses([TStringGrid]);

end.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.08.2013, 16:59   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Все можно и религия при деле, но, как всегда, хотелось бы с минимальными трудозатратами и писаниной.
Видимо, нет такой фичи. Во всяком случае, до сих пор слышно не было.
Прик вне форума Ответить с цитированием
Старый 23.08.2013, 17:00   #5
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

Создай свой класс, в котором будет создаваться нужный тебе компонент с заданными свойствами, и создавай его в run-time хоть миллион раз

Код:
Видимо, нет такой фичи. Во всяком случае, до сих пор слышно не было.
Тебе какая фича нужна? Добавил одну строчку кода и программа написана?
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru

Последний раз редактировалось Stilet; 24.08.2013 в 15:19.
grominfo вне форума Ответить с цитированием
Старый 23.08.2013, 17:35   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Аватар, идейка классная. Работает. Минимум писанины. Спасибо. Сам не дотумкал. Практически, один-в-один как и в дизайнтайме.
События, правда, не копируются, но это уже мелочь (а может я кривыми ручками чего-то не так сделал, но не копирует).
Некоторая странность: класс компонента надо зарегистрировать, иначе ошибка: при копировании обратно на форму не находится класс TStringGrid (казалось бы штатный компонент, но тем не менее).
Код:
...
initialization
  RegisterClasses([TStringGrid]);
end.
Прик вне форума Ответить с цитированием
Старый 23.08.2013, 17:44   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Видимо, нет такой фичи. Во всяком случае, до сих пор слышно не было.
С чего бы это нету?
В GExperts уже очень давно такое есть, и называется "Components to code".
Вот сейчас, я залпом, из disign-time, скопировал весь TVirtualStringTree c формы, в код.
Код:
var
  Tree: TVirtualStringTree;

  Tree := TVirtualStringTree.Create(Self);

  with Tree do
  begin
    Name := 'Tree';
    Parent := Self;
    Left := 0;
    Top := 30;
    Width := 824;
    Height := 358;
    Align := alClient;
    BorderWidth := 1;
    Images := TreePics;
    PopupMenu := TreePopup;
    TabOrder := 1;
    OnChange := TreeChange;
    OnFreeNode := TreeFreeNode;
    OnGetText := TreeGetText;
    OnPaintText := TreePaintText;
    OnGetImageIndex := TreeGetImageIndex;
    OnGetNodeDataSize := TreeGetNodeDataSize;
    OnNodeClick := TreeNodeClick;
    OnNodeDblClick := TreeNodeDblClick;
    with Columns.Add do begin 
      Options := [coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coVisible, coUseCaptionAlignment];
      Position := 0;
      Width := 298;
      WideText := 'User name';
    end;
    with Columns.Add do begin 
      Options := [coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coVisible, coUseCaptionAlignment];
      Position := 1;
      Width := 120;
      WideText := 'Password';
    end;
    with Columns.Add do begin 
      Options := [coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coVisible, coUseCaptionAlignment];
      Position := 2;
      Width := 100;
      WideText := 'Access time';
    end;
    with Columns.Add do begin 
      Options := [coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coVisible, coUseCaptionAlignment];
      Position := 3;
      Width := 100;
      WideText := 'Time left';
    end;
    with Columns.Add do begin 
      Options := [coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coVisible, coUseCaptionAlignment];
      Position := 4;
      Width := 100;
      WideText := 'Total time left';
    end;
    with Columns.Add do begin 
      Options := [coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coVisible, coUseCaptionAlignment];
      Position := 5;
      Width := 100;
      WideText := 'Profile';
    end;
  end;
Осталось подправить под нужды и убрать лишнее. Все.
Очень экономит время.

Последний раз редактировалось Человек_Борща; 23.08.2013 в 17:48.
Человек_Борща вне форума Ответить с цитированием
Старый 24.08.2013, 12:29   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Assign method (TPersistent)
Цитата:
Copies the contents of another, similar object.
procedure Assign(Source: TPersistent); virtual;

Цитата:
Call Assign to copy the properties or other attributes of one object from another. The standard form of a call to Assign is
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.08.2013, 12:36   #9
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Этот способ я испытал самым первым.
Происходит ошибка (во всяком случае, у меня) типа: "невозможно копировать TStringGrid в TStringGrid".
Поэтому и искал альтернативу.
Прик вне форума Ответить с цитированием
Старый 24.08.2013, 12:39   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Assign далеко не для всех работает. Разве что самому его переопределить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сохранить возможность копирования заблокированной диаграммы Pavarotti Microsoft Office Excel 6 15.02.2011 17:25
Описание свойств компонента Aleksey1989 Помощь студентам 0 06.11.2010 07:22
DBGrid есть ли такая возможность Baharev БД в Delphi 10 28.11.2009 20:17
Подскажите есть ли возможность saags Microsoft Office Excel 2 20.11.2007 15:29