PDA

Ver la Versión Completa : Crear Imagenes en ejecución


Drake
01-07-2007, 17:01:10
Buenas a todos, estoy creando un programilla de mapeo y necesito que me echeis una mano, se trato de los siguiente:

Tengo un TImage con su acciones, quiero coger en un componente añadir el numero de TImagenes que quiero hacer, todos con las mismas acciones que tenga el TImage del cual voy a crear los demas y cuando se vayan a crear que cada uno se ponga uno al lado del otro. Todo esto cuando el programa esta en ejecución.

Espero que me entiendan sino les adjunto una imagen.


http://img252.imageshack.us/my.php?image=samplegr6.jpg (http://img252.imageshack.us/my.php?image=samplegr6.jpg)

eduarcol
01-07-2007, 17:22:01
Segun te entendi, lo que debes haces es crear un nuevo componente, y en este modificar las acciones que quieras, de esta manera el comopnente no seria un tImage sino un TMiImagen

Con respecto de uno al lado de otro cuadra que el area de dibujo sea un panel y le colocas la propiedad Align del TMiImagen como alLeft, asi deberia funcionarte, ahora no se si te entendi bien

Drake
01-07-2007, 17:40:53
nop sorry algunas veces me explico mal >.<
lo que quiero hacer es que cuando el programa este en ejecucion se puedan crear la cantidad que yo quiera de un TImage, y que tengan las mismas caracteristicas del TImage que quiero copiar osea, crear clones de ese TImage.

eduarcol
01-07-2007, 18:14:13
pero esas cofiguraciones especiales se hacen en diseño o ejecucion?? si es en ejecucion lo que debes es antes de asignarlas guardarlas en una variable y antes de crear el nuevo lo configuras desde esas variables, ahora si es en diseño sigue estando la idea de crear el componente.

y para crearlo en ejecucion

MiImagen := TMIImagen.Create;

no se si sigo sin entender

Drake
01-07-2007, 18:32:29
si, tan simple y mira XD thanks eduarcol sabrias como hacer que cada imagen al hacerle click asigne un valor en una array, osea dependiendo de la imagen creada al hacer click selecciona una posicion en la array y le guarda un valor. thanks

eduarcol
01-07-2007, 18:48:01
pero por fin como solucionastes??
configura el tag de cada tImagen la posicion del array luego lo que haces es

MiArrray[TMIImagen(Sender).Tag] := cualqueir cosa

Drake
01-07-2007, 19:17:37
De la siguiente forma:

Definir la variable la cual sera un componente TImage

var
Tiles: TImage;


Creacion dela imagen

//Crear la imagen y darle las propiedades
Tiles:= TImage.Create(Tile1); //Imagen de la cual crearemos las demas.
Tiles.Top:= 0;
Tiles.Left:= 32;
Tiles.Width:= 32;
Tiles.Height:= 32;
Tiles.Name:= 'Tile'+IntToStr(2); //Nombre de la nueva imagen
Tiles.Parent:= MapTiles; //Componente que contendra dicha imagen
Tiles.Canvas.Draw(0,0,tileset1.Picture.Graphic); //por si queremos diujar algo en la imagen


Si queremos crear varios hacemos un bucle y cambiamos:

Tiles.Name:= 'Tile'+IntToStr(N_imagen); //Donde N_Imagen le ponemos la variable que ira incrementando la cual cada vez que se crea una nueva sera diferente sino nos daria fallo al intentar crear un componentecon el mismo nombre


Pos todo listo un saludo y gracias.

gabrielkc
01-07-2007, 20:50:23
procedure TForm1.CreaImgenes(n:Integer);
var Image:TImage;
begin
for x:=1 to n do
begin
image:=TImage.Create(Self);
image.Top:=0;
image.Left:=x*32;
image.Width:=32;
image.Height:=32;
Image.AutoSize:=False;{Para que no cambie el tamaño del componente}
Image.Stretch:=True;{Para que se ajuste al tamaño que asignamos}
Image.OnClick:=ClickImage;
image.Parent:=Self;
image.Tag:=x;
Image.Name:= 'Imagen'+IntToStr(n); //El nombre de la imagen quedaba fija
image.Picture.LoadFromFile('C:\images\Powered5.jpg');//imagen a cargar
image.Show;
end
end;

y clickimage se define en la parte privada de la forma como :


procedure ClickImage(Sender:TObject);


y la implementacion:

procedure TForm1.ClickImage(Sender: TObject);
begin
showmessage('hiciste click en la imagen'+inttostr(tcomponent(sender).Tag));
end;