Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Клонирование объекта

Delphi , Компоненты и Классы , Компоненты

Клонирование объекта


Идет пьянка у программера, вдруг он "срывается с катушек", начинает буйствовать, приставать к окружающим и т.д. Тут же жена берет скалку и как даст ему по башке. Программер, понятное дело, отключается. Подруга удивленно спрашивает:
- Ты что его так?
- Перезагрузится - успокоится.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ScrollBox1: TScrollBox;
    Label1: TLabel;
    CheckBox1: TCheckBox;
    Label2: TLabel;
    Button2: TButton;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    SpeedButton1: TSpeedButton;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    procedure Button1Click(Sender: TObject);
    procedure ClickComp(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  AForm: TForm;
begin
  // clone the 'self' object
  Application.CreateForm (
    TFormClass(Self.ClassType), AForm);
  // move the form and show it
  AForm.Left := Left  + 50;
  AForm.Top := Top  + 50;
  AForm.Show;
end;

procedure TForm1.ClickComp(Sender: TObject);
var
  ControlText: string;
begin
  with TControlClass (Sender.ClassType).Create (self) do
  begin
    Parent := (Sender as TControl).Parent;
    Left := (Sender as TControl).Left + 10;
    Top := (Sender as TControl).Top + 10;
    SetLength (ControlText, 50);
    (Sender as TControl).GetTextBuf(
      PChar(ControlText), 50);
    ControlText := PChar(ControlText) + ' *';
    SetTextBuf (PChar (ControlText));
  end;
end;



end.

Загрузить весь проект

Перевод контента на русский язык:

Это проект Delphi, демонстрирующий, как клонировать объект в языке программирования Pascal. Проект состоит из одиночной формы с несколькими контролами, включая кнопки, метки, чекбоксы и радио-кнопки.

Главная функция этого проекта - возможность создавать копию текущей формы или любого контрола на форме. Это достигается через два процедура: Button1Click и ClickComp.

Процедура Button1Click создает новый экземпляр текущей формы и перемещает его на 50 пикселей вправо и вниз от оригинальной позиции. Новый форм показывается.

Процедура ClickComp создает копию контрола, который вызвал событие (то есть, контрол, который был кликнут). Она устанавливает родителя копии в тот же, что и у оригинального контрола, корректирует левую и верхнюю позиции на 10 пикселей и добавляет звездочку (*) к тексту оригинального контрола.

Вот разбивка кода:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ScrollBox1: TScrollBox;
    Label1: TLabel;
    CheckBox1: TCheckBox;
    Label2: TLabel;
    Button2: TButton;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    SpeedButton1: TSpeedButton;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    procedure Button1Click(Sender: TObject);
    procedure ClickComp(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  AForm: TForm;
begin
  // clone the 'self' object
  Application.CreateForm(TFormClass(Self.ClassType), AForm);
  // move the form and show it
  AForm.Left := Left + 50;
  AForm.Top := Top + 50;
  AForm.Show;
end;

procedure TForm1.ClickComp(Sender: TObject);
var
  ControlText: string;
begin
  with TControlClass(Sender.ClassType).Create(self) do
  begin
    Parent := (Sender as TControl).Parent;
    Left := (Sender as TControl).Left + 10;
    Top := (Sender as TControl).Top + 10;
    SetLength(ControlText, 50);
    (Sender as TControl).GetTextBuf(PChar(ControlText), 50);
    ControlText := PChar(ControlText) + ' *';
    SetTextBuf(PChar(ControlText));
  end;
end;

end.

Чтобы запустить этот проект, вам нужно создать новый проект Delphi и добавить данный код в него. Затем вы можете скомпилировать и запустить проект, чтобы увидеть форму с ее контролами в действии.

В целом, это проект демонстрирует, как клонировать объект (в этом случае, форму или контрол) с помощью языка Object Pascal Delphi.

Клонирование объекта - это процесс создания нового объекта, идентичного существующему объекту, с помощью которого можно достичь различных целей в программировании.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компоненты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-07 00:06:26/0.0033500194549561/0