Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #20  
Antiguo 18-02-2004
Majo Majo is offline
Miembro
 
Registrado: jun 2003
Posts: 43
Poder: 0
Majo Va por buen camino
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.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:52:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi