Hola, estoy creando un programa que se encarga de interconexionar bloques. Estoy intentando que en un Tpanel pueda tener los bloques que serviran para su interconexion (en el se podran mover libremente los bloques). Cada bloque tiene una imagen.
Tengo dos codigos hechos, el primero que funciona bien (con la imagen como objeto dentro de una clase) y otro que no funciona (no aparece la imagen en el Tpanel; esta hecha heredando de timage)
Funciona: la imagen se ve sobre el Tpanel
Código Delphi
[-]type TgraphBlock=class
public
image: Timage;
pIn,pOut: array of Tpoint;
Constructor Create(img:integer;parent:TWinControl;pos:Tpoint);
function isIn(p:Tpoint):integer;
function isOut(p:Tpoint):integer;
procedure imageDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure imageDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure imageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;
Type BlockA=class(TgraphBlock)
public
Constructor Create(img:integer;parent:TWinControl;pos:Tpoint);
end;
Type BlockB=class(TgraphBlock)
public
Constructor Create(img:integer;parent:TWinControl;pos:Tpoint);
end;
Constructor TgraphBlock.Create(img:integer;parent:TWinControl;pos:Tpoint);
begin
image:=TImage.Create(parent);
Form1.ImageList1.GetBitmap(img,image.Picture.bitmap);
image.Left:=pos.X;
image.Top:=pos.Y;
image.AutoSize:=true;
image.Visible:=true;
image.BringToFront;
image.Parent:=parent;
image.OnDragOver:=ImageDragOver;
image.OnDragDrop:=ImageDragDrop;
image.onMouseDown:=ImageMouseDown ;
end;
Constructor BlockA.Create(img:integer;parent:TWinControl;pos:Tpoint);
begin
Inherited Create(img,parent,pos);
setlength(pIn,2);
setlength(pOut,1);
pIn[0].X:=1 ;
pIn[0].Y:=14 ;
pIn[1].X:=1 ;
pIn[1].Y:=32 ;
pOut[0].X:=72 ;
pOut[0].Y:=22 ;
end;
Constructor BlockB.Create(img:integer;parent:TWinControl;pos:Tpoint);
begin
Inherited Create(img,parent,pos);
setlength(pIn,1);
setlength(pOut,1);
pIn[0].X:=1 ;
pIn[0].Y:=22 ;
pOut[0].X:=72 ;
pOut[0].Y:=22 ;
end;
No funciona: la imagen no se ve sobre el Tpanel
Código Delphi
[-]type TgraphBlock=class(Timage)
public
pIn,pOut: array of Tpoint;
lineaIn: array of Tlinea;
lineaOut: array of array of Tlinea;
Constructor Create(img:integer;parent:TWinControl;pos:Tpoint);
function isIn(p:Tpoint):integer;
function isOut(p:Tpoint):integer;
procedure imageDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure imageDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure imageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;
Type BlockA=class(TgraphBlock)
public
Constructor Create(img:integer;parent:TWinControl;pos:Tpoint);
end;
Type BlockB=class(TgraphBlock)
public
Constructor Create(img:integer;parent:TWinControl;pos:Tpoint);
end;
Constructor TgraphBlock.Create(img:integer;parent:TWinControl;pos:Tpoint);
begin
inherited create(parent);
Parent:=parent;
Form1.ImageList1.GetBitmap(img,Picture.bitmap);
Left:=pos.X;
Top:=pos.Y;
AutoSize:=true;
Visible:=true;
BringToFront;
OnDragOver:=ImageDragOver;
OnDragDrop:=ImageDragDrop;
onMouseDown:=ImageMouseDown ;
end;
Constructor BlockA.Create(img:integer;parent:TWinControl;pos:Tpoint);
begin
Inherited Create(img,parent,pos);
setlength(pIn,2);
setlength(pOut,1);
pIn[0].X:=1 ;
pIn[0].Y:=14 ;
pIn[1].X:=1 ;
pIn[1].Y:=32 ;
pOut[0].X:=72 ;
pOut[0].Y:=22 ;
setlength(lineaIn,2); setlength(lineaOut,1,0); end;
Constructor BlockB.Create(img:integer;parent:TWinControl;pos:Tpoint);
begin
Inherited Create(img,parent,pos);
setlength(pIn,1);
setlength(pOut,1);
pIn[0].X:=1 ;
pIn[0].Y:=22 ;
pOut[0].X:=72 ;
pOut[0].Y:=22 ;
setlength(lineaIn,1); setlength(lineaOut,1,0); end;
Si pudierais ayudarme os estaria muy agradecido.