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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2012, 18:07   #1
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию Копирование страниц на PageControl

Как целиком скопировать страницу PageControl'а (то есть создать ещё одну такую же) со всеми компонентами, их свойствами и т.д.?
DelhiProgramer вне форума Ответить с цитированием
Старый 26.10.2012, 22:36   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Вот примерный код - копирование через буфер. Код кривоват, набросан на скорую руку, но работает. Лишь бы идея была понятна

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ImgList, ComCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TrackBar1: TTrackBar;
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
    TS: TTabSheet;
    Stream: TFileStream ;
    Contr: array [0..10] of TControl;
    CL: TControl;
begin
  TS:=TTabSheet.Create(PageControl1);
  TS.PageControl:=PageControl1;
  TS.Caption:=TabSheet1.Caption;
  Stream := TFileStream.Create( 'AFile', fmCreate ) ;
  try
    For i:=0 to TabSheet1.ControlCount-1 do begin
      Stream.WriteComponent(TabSheet1.Controls[i]);
    end ;
  finally
    Stream.Free ;
  end;
  TS.Visible:=true;
  PageControl1.ActivePageIndex:=PageControl1.ActivePageIndex+1;
  Stream := TFileStream.Create( 'AFile', fmOpenRead ) ;
  try
    For i:=0 to TabSheet1.ControlCount-1 do begin
      Contr[i]:= Stream.ReadComponent( nil ) as TControl;
      Contr[i].Parent:=TS;
    end;
  finally
    Stream.Free ;
  end ;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterClass(TEdit);
  RegisterClass(TTrackbar);
  RegisterClass(TButton);
end;

end.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 26.10.2012, 23:31   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

О_О а Frames уже отменили?
Человек_Борща вне форума Ответить с цитированием
Старый 26.10.2012, 23:44   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
О_О а Frames уже отменили?
Так я просто никогда с подобными задачами не сталкивался, максимум - динамическое создание компонент на форме. Потому написал то, что первое в голову пришло.

Напишите Ваш код, мне тоже интересно будет поучиться
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
копирование строк, соответствующих условию фильтра и копирование на новый лист xorek Microsoft Office Excel 0 09.07.2012 18:13
pagecontrol Kamalekb Компоненты Delphi 2 11.05.2012 20:27
Видимость страниц PageControl AJlEKCA Помощь студентам 11 22.01.2011 11:27
копирование текста из буфера без разрыва страниц mistx Microsoft Office Word 10 08.08.2010 17:12
PageControl chingiz Компоненты Delphi 14 22.11.2008 10:49