Hola,
Yendo al tema que nos ocupa, y aunque estoy muy espeso (y no sé si se me entenderá) diré que no parece ser posible asignar la variable del "record" que nos ocupa tal como lo quieres hacer. Claro, mira tú, ¡si fuera posible no estaríamos aquí hablando de ello! Si es que... cuando digo que estoy espeso...
Lo siguiente sí que es posible:
Código Delphi
[-]
unit Unit1;
interface
uses
Forms, Classes, Controls, StdCtrls, Graphics;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
type
TTipoGrafico = record
Tipo : Integer;
Trazo : byte;
ColorSerie: TColor;
end;
TPGSeries = class
private
FGrafico: TTipoGrafico;
FItem: Integer;
procedure SetTipoGrafico(value: TTipoGrafico);
public
property Grafico: TTipoGrafico read FGrafico write SetTipoGrafico;
property Item: Integer read FItem write FItem;
constructor Create;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
SysUtils, Dialogs;
constructor TPGSeries.Create;
begin
inherited;
end;
procedure TPGSeries.SetTipoGrafico(value: TTipoGrafico);
begin
FGrafico := value;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
tg: TTipoGrafico;
PGSeries: TPGSeries;
begin
PGSeries := TPGSeries.Create;
try
tg.Tipo := 1;
tg.Trazo := 1;
tg.ColorSerie := 0;
PGSeries.Grafico := tg;
ShowMessage( IntToStr ( PGSeries.Grafico.ColorSerie ) );
finally
PGSeries.Free;
end;
end;
end.
Pero, claro, tú lo que quieres dar un valor a un elemento en concreto del "record" "TTipoGrafico", y no tener que dar valor a todas las variables. Está bien.
Entonces esta línea de tu código tiene conlleva una contradicción, causa el problema, o yo estoy equivocado:
Código Delphi
[-]
property Grafico: TTipoGrafico read FGrafico write FGrafico;
¿Ahí no se está diciendo, "la propiedad Grafico es de tipo "TTipoGrafico" y para leerla puede accederse a la variable privada "FGrafico", y para escribirla ha de escribirse la variable "FGrafico"...?
Es decir, "para escribirla hay que escribir la variable "FGrafico", de tipo "TTipoGrafico". No sé exactamente porqué, pero, por lo que se ve no puedes acceder a los elementos de la variable "FGrafico" por separado. O eso, o alguien que sepa más nos lo explica.
¿Y entonces? ¿Qué pasa si quieres dar la posibilidad de cambiar el valor de un elemento de la variable "FGrafico"? Pues a mí a bote pronto se me ocurre algo que añado al código que puse anteriormente:
Código Delphi
[-]
unit Unit1;
interface
uses
Forms, Classes, Controls, StdCtrls, Graphics;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
type
TTipoGrafico = record
Tipo : Integer;
Trazo : byte;
ColorSerie: TColor;
end;
TPGSeries = class
private
FGrafico: TTipoGrafico;
FItem: Integer;
procedure SetGrafico(value: TTipoGrafico);
procedure SetTipoGrafico(value: Integer);
function GetTipoGrafico: Integer;
public
property TipoGrafico: Integer read GetTipoGrafico write SetTipoGrafico;
property Grafico: TTipoGrafico read FGrafico write SetGrafico;
property Item: Integer read FItem write FItem;
constructor Create;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
SysUtils, Dialogs;
constructor TPGSeries.Create;
begin
inherited;
end;
function TPGSeries.GetTipoGrafico: Integer;
begin
Result := FGrafico.Tipo;
end;
procedure TPGSeries.SetTipoGrafico(value: Integer);
begin
if FGrafico.Tipo <> value then
FGrafico.Tipo := value;
end;
procedure TPGSeries.SetGrafico(value: TTipoGrafico);
begin
FGrafico := value;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
tg: TTipoGrafico;
PGSeries: TPGSeries;
begin
PGSeries := TPGSeries.Create;
try
PGSeries.TipoGrafico := 1;
ShowMessage( IntToStr ( PGSeries.Grafico.Tipo ) );
finally
PGSeries.Free;
end;
end;
end.