Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.04.2013, 17:07
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию Скопировать cxGrid

Есть PageControl на нём cxGrid с вьюхой... пользователь её настраивает и заполняет данными.

Как скопировать Его вьюху, вместе с данными и настройками в другой cxGrid лежащий на другой форме.?
Ответить с цитированием
  #2  
Старый 14.04.2013, 23:50
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Uniq!
Есть PageControl на нём cxGrid с вьюхой...Как скопировать Его вьюху, вместе с данными и настройками в другой cxGrid лежащий на другой форме.?
Не понял, что такое вьюха, да и компонентов таких, cxGrid у меня нет, но вот есть юнит с функцой, которая копирует компонент туда, где новый владелец
Код:
unit DupCmp;
interface
uses Classes, SysUtils, Controls;

function DuplicateComponents(AComponent, NewOwner, NewParent
: TComponent): TComponent;
procedure RegisterComponentClasses(AComponent: TComponent);
implementation
type
  TDuplicator = class(TObject)
  private
    FResult: TComponent;
    procedure OnRead(Cmp: TComponent);
    procedure OnSetName(Reader: TReader; Cmp: TComponent; var Name: string);
    procedure WriteComponents(Stream: TStream; Root: TComponent);
    procedure ReadComponents(Stream: TStream; Owner, Parent: TComponent);
  public
    function Duplicate(Cmp, Owner, Parent: TComponent): TComponent;
  end;
{ TDuplicator }
procedure TDuplicator.OnRead(Cmp: TComponent);
begin
  FResult:= Cmp;
end;

procedure TDuplicator.OnSetName(Reader:TReader;Cmp:TComponent;var Name:string);
var
  i: integer;
  Tmp: string;
begin
  i:= 0;
  Tmp:= Name;
  while Cmp.Owner.FindComponent(Name) <> nil do
  begin
    Inc(i);
    Name:= Tmp + IntToStr(i);
  end;
end;

procedure TDuplicator.WriteComponents(Stream: TStream; Root: TComponent);
var
  Writer: TWriter;
begin
  Writer:= TWriter.Create(Stream, 4096);
  try
    Writer.Root:= Root.Owner;
    Writer.WriteSignature;
    Writer.WriteComponent(Root);
    Writer.WriteListEnd;
  finally
    Writer.Free;
  end;
end;

procedure TDuplicator.ReadComponents(Stream:TStream;Owner, Parent: TComponent);
var
  Reader: TReader;
begin
  Reader:= TReader.Create(Stream, 4096);
  try
    Reader.OnSetName:= OnSetName;
    Reader.ReadComponents(Owner, Parent, OnRead);
  finally
    Reader.Free;
  end;
end;

function TDuplicator.Duplicate(Cmp,Owner,Parent:TComponent): TComponent;
var
  Stream: TMemoryStream;
begin
  FResult:= nil;
  RegisterComponentClasses(Cmp);
  Stream:= TMemoryStream.Create;
  try
    WriteComponents(Stream, Cmp);
    Stream.Position:= 0;
    ReadComponents(Stream, Owner, Parent);
  finally
    Stream.Free;
  end;
  Result:= FResult;
end;

procedure RegisterComponentClasses(AComponent: TComponent);
var
  i: integer;
begin
  RegisterClass(TPersistentClass(AComponent.ClassType));
  if AComponent is TWinControl then
    for i := 0 to TWinControl(AComponent).ControlCount - 1 do
      RegisterComponentClasses(TWinControl(AComponent).Controls[i]);
end;

function DuplicateComponents(AComponent, NewOwner, NewParent:
 TComponent): TComponent;
begin
  with TDuplicator.Create do
  try
    Result:= Duplicate(AComponent, NewOwner, NewParent);
  finally
    Free;
  end;
end;
end.
Пример использования
Код:
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  DuplicateComponents(cxGrid1, Form2.PageControl, nil);  // дублируем cxGrid
end;
}
стрингрид нормально копируется на другую форму, вместе с ячейками и настройками.
Ответить с цитированием
  #3  
Старый 15.04.2013, 07:40
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Спасибо, конечно, но это всё не то. А с DevExpress советую познакомиться.
Ответить с цитированием
  #4  
Старый 18.04.2013, 22:13
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

А если в том гриде который на другой форме сделать create вьюху и ей присвоить ту которую надо скопировать? Пс. К сожалению попробовать не могу т.к с планшета позже может до компа доберусь
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #5  
Старый 21.04.2013, 17:16
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Не канает, бfналаьное
Код:
cxGrid1TableView1 := cxGrid1TableView2;
не канает, как и
Код:
cxGrid1TableView1.Assign(cxGrid1TableView2)

Во втором случае копируется только шапка
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter