|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Скопировать cxGrid
Есть PageControl на нём cxGrid с вьюхой... пользователь её настраивает и заполняет данными.
Как скопировать Его вьюху, вместе с данными и настройками в другой cxGrid лежащий на другой форме.? |
#2
|
||||
|
||||
Цитата:
Код:
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
|
||||
|
||||
Спасибо, конечно, но это всё не то. А с DevExpress советую познакомиться.
|
#4
|
|||
|
|||
А если в том гриде который на другой форме сделать create вьюху и ей присвоить ту которую надо скопировать? Пс. К сожалению попробовать не могу т.к с планшета позже может до компа доберусь
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#5
|
||||
|
||||
Не канает, бfналаьное
Код:
cxGrid1TableView1 := cxGrid1TableView2; Код:
cxGrid1TableView1.Assign(cxGrid1TableView2) Во втором случае копируется только шапка |