Hallo!
Ich habe folgendes Problem:
Ich beschäftige mich im Moment mit Komponenten. Dazu möchte ich Propertys mit Unter-Propertys benutzen. Diese Unter-Propertys zu erstellen ist noch nicht das Problem (Dank diesem Forums). Nun möchte ich aber, dass wenn der Entwickler zur Entwicklungszeit ein Unter-Property ändert, dieses auch sofort bei der Komponente zu sehen ist.
Z.B.:
<pre>
unit GraphRas;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TRahmen=class(TPersistent)
private
FDarstellen: Boolean;
FFarbe:TColor;
published
property Darstellen:Boolean read FDarstellen write FDarstellen;
property Farbe:TColor read FFarbe write FFarbe;
end;
TGraphRas = class(TImage)
private
{ Private declarations }
FRahmen:TRahmen;
FTest:Integer;
procedure Set_Test(value:integer);
protected
{ Protected declarations }
public
{ Public declarations }
constructor create(AOwner:TComponent);override;
destructor destroy; override;
published
{ Published declarations }
procedure Graph_Zeichnen;
property Rahmen:TRahmen read FRahmen write FRahmen;
property Test:Integer read FTest write Set_Test default 0;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Rasmus', [TGraphRas]);
end;
constructor TGraphRas.create (AOwner:TComponent);
begin
inherited create(AOwner);
FRahmen:=TRahmen.Create ;
FRahmen.Darstellen :=false;
FRahmen.Farbe :=clBlack;
end;
destructor TGraphRas.destroy ;
begin
inherited destroy;
end;
procedure TGraphRas.Graph_Zeichnen ;
begin
// Rahmen zeichnen.
if FRahmen.Darstellen then
begin
With Canvas.Pen do
begin
Canvas.Pen.Style :=psSolid;
Canvas.Pen.Mode :=pmCopy;
Canvas.Pen.Width :=1;
Canvas.Pen.Color :=FRahmen.Farbe ;
Canvas.Rectangle (2,2,30,30);
end; //With Canvas.Pen do
end; //if FRahmen.Darstellen then
end;
procedure TGraphRas.Set_Test (value:integer);
begin
FTest:=value;
Graph_Zeichnen;
end;
end.
</pre>
Hier wird ein Property mit dem Namen “Rahmen“ erzeugt, das die Unter-Propertys „Darstellen“ und „Farbe“ besitzt. Nun will ich, dass bei der Änderung von „Darstellen“ oder „Farbe“ dieses zur Entwicklungszeit auch durchgeführt wird. Ich habe schon einiges versucht, komme aber nicht zum Ziel.
Erst wenn ich das Property „Test“ ändere werden auch die Einstellungen von „Darstellen“ oder „Farbe“ übernommen.
Wie bekomme ich es hin, dass beim Ändern eines der Unter-Propertys „Darstellen“ oder „Farbe“ ein ähnlicher Procedure-Aufruf durchgeführt wird, wie bei dem Property „Test“?
Ich hoffe ich mein Problem verständlich beschrieben und bedanke mich für Eure Hilfe.
Gruß
Rasmus
Ich habe folgendes Problem:
Ich beschäftige mich im Moment mit Komponenten. Dazu möchte ich Propertys mit Unter-Propertys benutzen. Diese Unter-Propertys zu erstellen ist noch nicht das Problem (Dank diesem Forums). Nun möchte ich aber, dass wenn der Entwickler zur Entwicklungszeit ein Unter-Property ändert, dieses auch sofort bei der Komponente zu sehen ist.
Z.B.:
<pre>
unit GraphRas;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TRahmen=class(TPersistent)
private
FDarstellen: Boolean;
FFarbe:TColor;
published
property Darstellen:Boolean read FDarstellen write FDarstellen;
property Farbe:TColor read FFarbe write FFarbe;
end;
TGraphRas = class(TImage)
private
{ Private declarations }
FRahmen:TRahmen;
FTest:Integer;
procedure Set_Test(value:integer);
protected
{ Protected declarations }
public
{ Public declarations }
constructor create(AOwner:TComponent);override;
destructor destroy; override;
published
{ Published declarations }
procedure Graph_Zeichnen;
property Rahmen:TRahmen read FRahmen write FRahmen;
property Test:Integer read FTest write Set_Test default 0;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Rasmus', [TGraphRas]);
end;
constructor TGraphRas.create (AOwner:TComponent);
begin
inherited create(AOwner);
FRahmen:=TRahmen.Create ;
FRahmen.Darstellen :=false;
FRahmen.Farbe :=clBlack;
end;
destructor TGraphRas.destroy ;
begin
inherited destroy;
end;
procedure TGraphRas.Graph_Zeichnen ;
begin
// Rahmen zeichnen.
if FRahmen.Darstellen then
begin
With Canvas.Pen do
begin
Canvas.Pen.Style :=psSolid;
Canvas.Pen.Mode :=pmCopy;
Canvas.Pen.Width :=1;
Canvas.Pen.Color :=FRahmen.Farbe ;
Canvas.Rectangle (2,2,30,30);
end; //With Canvas.Pen do
end; //if FRahmen.Darstellen then
end;
procedure TGraphRas.Set_Test (value:integer);
begin
FTest:=value;
Graph_Zeichnen;
end;
end.
</pre>
Hier wird ein Property mit dem Namen “Rahmen“ erzeugt, das die Unter-Propertys „Darstellen“ und „Farbe“ besitzt. Nun will ich, dass bei der Änderung von „Darstellen“ oder „Farbe“ dieses zur Entwicklungszeit auch durchgeführt wird. Ich habe schon einiges versucht, komme aber nicht zum Ziel.
Erst wenn ich das Property „Test“ ändere werden auch die Einstellungen von „Darstellen“ oder „Farbe“ übernommen.
Wie bekomme ich es hin, dass beim Ändern eines der Unter-Propertys „Darstellen“ oder „Farbe“ ein ähnlicher Procedure-Aufruf durchgeführt wird, wie bei dem Property „Test“?
Ich hoffe ich mein Problem verständlich beschrieben und bedanke mich für Eure Hilfe.
Gruß
Rasmus
Comment