![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
"Las propiedades no publicadas no pueden ser fácilmente guardadas en el dfm." Es decir, me parece que de cualquier forma estas propiedades no podrán aparecer en la sección published y por ende no pueden ser almacenadas con este mecanismo facilmente, a menos que se proceda como indicas. // Saludos |
|
#2
|
|||
|
|||
|
Cuando declaré la propiedad así
property MatImage:Array of TPoint read FMatImage write SetMatImage;salió un error pero cuando la declaro así Type TPointArray=Array of TPoint; property MatImage:TPointArray read FMatImage write SetMatImage; no sale error al compilar. Sino sale error porque no se puede hacer. Mi gran problema es que no es la única propiedad de tipo array dinamico que necesito manejar, hay otras que incluso son del tipo "array of variant", que me permite manejar números complejos. Entonces la pregunta es ¿Como almaceno componentes con propiedades del tipo array dinamicos en el disco duro para luego cargarlos con los cambios que el usuario haya hecho? |
|
#3
|
||||
|
||||
|
Cita:
Les recomindo ver el código del TStringGrid como ejemplo. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Última edición por delphi.com.ar fecha: 17-02-2004 a las 17:54:30. |
|
#4
|
|||
|
|||
|
¿donde esta el código del TStringGrid?. ¿Está en la carpeta Fuentes de Borland o acá en el club delphi?
|
|
#5
|
||||
|
||||
|
En la unit Grids, de los fuentes de Delphi. Si pegas TStringGrid en un form, vas a la declaración del mismo, y haces Ctrl+Click sobre el nombre de la clase, el IDE te llevará a la definición de la clase.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#6
|
|||
|
|||
|
Hola amigos,
Ya descubrí porque no guarda ciertas propiedades del objeto, Resulta que cuando el objeto se está cargando de un archivo del disco duro, inmediatamente se ejecuta el metodo Create de dicho objeto, y es allí donde yo asigno ciertas propiedades por defecto, lo que quiere decir que así se hayan guardado éstas propiedades, igual se van a sobreescribir con los valores por defecto. Y no solo se ejecuta el método create, también se ejecuta los procedimientos de escritura de las propiedades. Si alguien puede sacarme del apuro se lo agradecería enormemente, que hago para que esto no suceda? Gracias... |
|
#7
|
||||
|
||||
|
Cuando se crea el componente, en el cosntructor se cargan las porpiedades por defecto, pero inmediatamente despues, se tienen que asignar los valores que tenías guardados en el archivo.
¿Porqué no nos muestras el código que estas utilizando?
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#8
|
|||
|
|||
|
Este es el código, le quite gran cantidad de las lineas pero deje lo que me parece mas relevante.
Este no es propiamente el objeto hay unos objetos que se llaman así TGenerador,TCarga,TTransformador.... Todos ellos heredan las propiedades de TElemento y le agregan otras como voltajes, corrientes, Potencias y otras que son vectores dinámicos y que los necesito guardar en disco para que el usuario pueda cargar un circuito que haya diseñado. El programa que estoy haciendo se llama "Simulación de flujos de carga" es para mi trabajo de grado de "Ingenieria eléctrica" y estoy realmente necesitado de la ayuda, gracias por colaborarme Código:
unit Elemento;
type
TKeyEvent = procedure (Sender: TObject; var Key: Word; Shift: TShiftState) of object;
TElemento = class(TGraphicControl)
private
{ Private declarations }
//*************************************************
FMatImage:TPointArray;
procedure SetMatImage(const Valor:TPointArray);
//Arrastrar Imagen
procedure ElementoClick(Sender:TObject);
protected
{ Protected declarations }
procedure Paint; override;
public
{ Public declarations }
FormDeDibujo:TComponent; //padre de todos los componentes
FImage:TImage; //imagen virtual para poder leer su matriz correspondiente
property MatImage:TPointArray read FMatImage write SetMatImage;
procedure GetMatImage(Elemento:TImage); //Guardar la matriz de la imagen
procedure Rotar;
constructor Create(AOwner: TComponent); override;
destructor Destroy;override;
published
{ Published declarations }
property PermisoMover:Boolean read FPermisoMover write SetPermisoMover;// default True;
end;
//**********************************************
implementation
{TElemento}
constructor TElemento.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
{Se crea una imagen Virtual
Para poder llenar la matriz}
FImage:=TImage.Create(Self);
FImage.Picture.LoadFromFile('C:\FlujoDePotencia\BMP\Generador.bmp');
FImage.AutoSize:=True;
Width:=FImage.Width; //Para hacer un AutoSize manual
Height:=FImage.Height;
GetMatImage(FImage); // GetMatImage(FImage);
FImage.Destroy;
//Propiedades por defecto del elemento
ControlStyle := ControlStyle + [csReplicatable];
FLineColor:=clBlack;
FSeleccionado:=True;
FPermisoMover:=True;
FColorSelect:=clRed;
FDireccion:=0;
FSizeVectorId:=0;
//Eventos del elemento
OnClick:=ElementoClick;
FormDeDibujo:=AOwner;
end;
procedure TElemento.SetMatImage(const Valor:TPointArray);
var i:Integer;
begin
// if Valor<>FMatImage then
SetLength(FMatImage,Length(Valor));
for i:=0 to Length(FMatImage)-1 do
begin
FMatImage[i].X:=Valor[i].X;
FMatImage[i].Y:=Valor[i].Y;
end;
end;
procedure TElemento.SetDireccion(const valor:Integer);
begin
if FDireccion<>valor then
FDireccion:=valor;
end;
procedure TElemento.GetMatImage(Elemento:TImage);
var i,j,k:Integer;
// var FMatImageTemp:TPointArray;
begin
k:=0;
for j:=0 to Elemento.Height-1 do
begin
for i:=0 to Elemento.Width-1 do
begin
if Elemento.Canvas.Pixels[i,j]=clBlack then
begin
k:=k+1;
SetLength(FMatImage,k);
FMatImage[k-1].X:=i; //Columna
FMatImage[k-1].Y:=j; //Fila
end;
end;
end;
MatImage:=FMatImage;
end;
procedure TElemento.Rotar;
var i,temporal:Integer;
h,k:Integer;
Ancho:Integer;
// FMatImageTemp:TPointArray;
begin
if PermisoMover then
if Seleccionado=True then
begin
//Eje sobre el que va a rotar la imagen
h:=Round(Width/2);
k:=Round(Height/2);
//Cambiamos propiedades de elemento
Left:=(Left+h) - k;
Top:= (Top+k) - h;
Ancho:=Width;
Width:=Height;
Height:=Ancho;
for i:=0 to Length(FMatImage)-1 do
begin
temporal:=FMatImage[i].X; //Columna
FMatImage[i].X:=FMatImage[i].Y; //Columna lleve fila
FMatImage[i].Y:=(Height-1)-Temporal;
end;
MatImage:=FMatImage;
FDireccion:=FDireccion+90;
if FDireccion=360 then FDireccion:=0;
Invalidate;
end;
end;
procedure TElemento.Paint;
var i,j,k:Integer;
begin
//Colocar Imagen
for i:=0 to Length(MatImage)-1 do
begin
if FSeleccionado=False then
Canvas.Pixels[MatImage[i].X,MatImage[i].Y]:=FLineColor
else
Canvas.Pixels[MatImage[i].X,MatImage[i].Y]:=FColorSelect;
end;
end;
//**********************************************************//
// Esta propiedad bloquea la propiedad de arrastrar y rotar*//
// de un Elemento *//
//**********************************************************//
procedure TElemento.SetPermisoMover(const valor:Boolean);
begin
if FPermisoMover<>valor then
FPermisoMover:=valor;
end;
//**********************************************************//
procedure TElemento.ElementoClick(Sender:TObject);
var Edit:TEdit;
begin
//if not ConstruyendoLine then
DesSeleccionar(Form2);//lo selecciona a él y le quita la seleccion
//al resto
end;
end.
Última edición por Majo fecha: 18-02-2004 a las 16:50:37. |
|
#9
|
||||
|
||||
|
A simple vista te faltaría el definir la forma para guardar la propiedad MatImage, si es que quieres que se guarde.
¿Por otro ládo, cuál es el código que usas para generar el archivo?
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#10
|
||||
|
||||
|
Cita:
Sólo una pregunta: ¿es necesario usar DefineProperties o ésto sólo es necesario si la propiedad no está publicada? // Saludos |
![]() |
|
|
|