Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ Delphi - Компоненты _ Как добавить свойства к компоненту без его регистрации?

Автор: bvn123 8:04:2008, 13:34

Здравствуйте,

хочу к компоненту TCheckBox добавить по несколько свойств типов Integer и TColor во время написания программы (компонент TCheckBox уже размещен на форме, писать можно непосредственно в программе)

Я знаю, как создать компонент-наследник TCheckBox с доп.свойствами и разместить его на палитре компонентов - этот вариант не подходит.
Другие возможности также не интересуют (например, создать структуру, в которой будут элементами ссылка на TCheckBox и доп.свойства)

можно ли это сделать и что надо добавить в такую программу:


Код
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.


Спасибо

Автор: sax_ol 8:04:2008, 14:18

Если только динамически создавать, по другому - а почему именно "без его регистрации" ... ?

Автор: zubr 8:04:2008, 17:45

Можно, но с извратами:

Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
    OldCheckBox:TCheckBox;
  public
    { Public declarations }
  end;

  TMyCheckBox = class(TCustomCheckBox)
  private
    function GetMyColor:TColor;
    procedure SetMyColor(value:TColor);
  public
    procedure MyMetod;
    property MyColor:TColor read GetMyColor write SetMyColor;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  FColor:TColor;
  MyCheckBox:TMyCheckBox;

function TMyCheckBox.GetMyColor:TColor;
begin
Result:=FColor;
end;

procedure TMyCheckBox.SetMyColor(value:TColor);
begin
FColor:=value;
end;

procedure TMyCheckBox.MyMetod;
begin
MessageBox(0, 'Ok', '', MB_OK);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MyCheckBox.MyMetod;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
MyCheckBox.Checked:=True;
MyCheckBox.MyColor:=clYellow;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MyCheckBox:=TMyCheckBox(CheckBox1);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Color:=MyCheckBox.MyColor;
end;

end.

Автор: sax_ol 8:04:2008, 18:36

Вспомнив о том, что ТCheckBox - окно, а TColor тоже целочисленный тип, то можно и SetProp/GetProp заюзать.

Автор: bvn123 9:04:2008, 08:57

Спасибо всем,

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

Получил устраивающий меня ответ на delphikingdom,
теперь фрагмент моего кода выглядит так (работает):


unit Unit1;

interface

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

type
TCheckBox = class(StdCtrls.TCheckBox)
private
fChartColor : TColor;
fRowNum:integer;
public
property ChartColor : TColor read fChartColor write fChartColor;
property RowNum : integer read fRowNum write fRowNum;
end;

TForm1 = class(TForm)
cb: TCheckBox;

private
{ Private declarations }
public
{ Public declarations }
end;

Форум Invision Power Board (http://nulled.ws)
© Invision Power Services (http://nulled.ws)