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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-08-2008
Omega Omega is offline
Miembro
 
Registrado: jun 2008
Posts: 25
Poder: 0
Omega Va por buen camino
Cuadricula

Buenas, estoy tratando de hacer algo y no se me ocurre que componente usar. Les explico lo que quiero hacer y haber si me pueden recomendar algún componente, ya sea de los incluidos en Delphi 7 o externo.

Necesito mostrar un tablero de 15x20 (*) cuadrados, cada cuadrado contendrá una imagen y siempre serán del mismo tamaño 32x32 (*), y también necesito poder detectar en que cuadrado se hizo click para cambiar dicha imagen.

* Eso son valores de ejemplo, en verdad nesesito poder cambiarlo en tiempo de ejecucion.

Saludos y gracias.
Responder Con Cita
  #2  
Antiguo 22-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Podría servirte el TDrawGrid de la pestaña Additional.

// Saludos
Responder Con Cita
  #3  
Antiguo 22-08-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola,

Se me ocurre que podrías usar el TGridPanel

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 22-08-2008
Omega Omega is offline
Miembro
 
Registrado: jun 2008
Posts: 25
Poder: 0
Omega Va por buen camino
Gracias a ambos por una respuesta tan rapida.


@roman: El TDrawGrid parece interesante salvo por dos cosas:

La 1º son esos cuadros gris, que no me sirven para nada. Y la 2º es que permite seleccionar las casillas mostrando el típico fondo azul.

@egostar: El TGridPanel no lo encuentro. mmm ¿Esta para Delphi 7?

Saludos.
Responder Con Cita
  #5  
Antiguo 22-08-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Omega Ver Mensaje
Gracias a ambos por una respuesta tan rapida.


@roman: El TDrawGrid parece interesante salvo por dos cosas:

La 1º son esos cuadros gris, que no me sirven para nada. Y la 2º es que permite seleccionar las casillas mostrando el típico fondo azul.

@egostar: El TGridPanel no lo encuentro. mmm ¿Esta para Delphi 7?

Saludos.
Pues pense que si, lo he visto aquí

New VCL features since Delphi 7 - 9:38am
2 Apr 2007 ... VCL Features Since Delphi 7. VCL Applications are themed by default. ... With a grid panel, a developer can specify the number of rows and ...

Salud OS

Edito: Mea culpa, esto es después de D7, perdón.

Abstract: See many of the major new VCL features available in releases after Delphi 7
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 22-08-2008 a las 19:04:11.
Responder Con Cita
  #6  
Antiguo 22-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Omega Ver Mensaje
El TDrawGrid parece interesante salvo por dos cosas:

La 1º son esos cuadros gris, que no me sirven para nada. Y la 2º es que permite seleccionar las casillas mostrando el típico fondo azul.
Los cuadros grises corresponden a las filas y columnas fijas. Simplemente pon FixedCols y FixedRows en 0 para que no haya columnas fijas.

La selección azul la puedes quitar al momento de dibujar las celdas en el evento OnDrawCell:

Código Delphi [-]
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if gdSelected in State then
  begin
    InflateRect(Rect, 1, 1);
    DrawGrid1.Canvas.Brush.Color := DrawGrid1.Color;
    DrawGrid1.Canvas.Rectangle(Rect);
  end;
end;

// Saludos
Responder Con Cita
  #7  
Antiguo 22-08-2008
Omega Omega is offline
Miembro
 
Registrado: jun 2008
Posts: 25
Poder: 0
Omega Va por buen camino
@egostar: No pasa nada, gracias de todas formas. =)

@roman: Funciono todo perfecto, arigatō!

Ahora solo me queda ver si puedo eliminar la marca de selección y luego ya pintar las celdas al hacer click en una de ella. Creo que esto ultimo lo puedo lograr con lo siguiente, ahora lo probare:
Código Delphi [-]
ImageList1.Draw(DrawGrid1.Canvas,Rect.Left,Rect.Top,0);

Saludos.
Responder Con Cita
  #8  
Antiguo 22-08-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola

Si solo vas a usar una sola imagen para todos los "cuadros", tambien puedes hacer esto si es que quieres modificar la imagen desde fuera del programa.

Código Delphi [-]
var
  Form1: TForm1;
  imagen: TImage;

implementation

{$R *.dfm}

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  DrawGrid1.Canvas.Draw(Rect.Left,Rect.Top,Imagen.Picture.Graphic);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  imagen.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  imagen := TImage.Create(nil);
  imagen.Picture.LoadFromFile('C:\Desarrollo\Iconos\admin_32.ico');
end;

end.

Salud OS

Edito

Leyendo de nuevo, vi que quieres hacer clic en alguna celda y colocar una imagen en ella,
Código Delphi [-]
var
  Form1: TForm1;
  imagen: TImage;
  _Rect: TRect;

implementation

{$R *.dfm}

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  DrawGrid1.Canvas.Draw(_Rect.Left,_Rect.Top,Imagen.Picture.Graphic);
end;

procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  _Rect := DrawGrid1.CellRect(ACol,ARow);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  imagen.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  imagen := TImage.Create(nil);
  imagen.Picture.LoadFromFile('C:\Desarrollo\Iconos\admin_32.ico');
end;

end.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 22-08-2008 a las 23:31:10.
Responder Con Cita
  #9  
Antiguo 22-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Por cierto, olviden lo anterior para evitar la selección azul. Es más fácil poniendo

Código Delphi [-]
DrawGrid1.DefaultDrawing := false;



Eso también quita el rectángulo punteado de la selección.

// Saludos
Responder Con Cita
  #10  
Antiguo 23-08-2008
Omega Omega is offline
Miembro
 
Registrado: jun 2008
Posts: 25
Poder: 0
Omega Va por buen camino
@roman: Menos código y mejor, perfecto.

@egostar: Te pasaste en tu respuesta :O El código funciona bien, pero si minimizas la ventana lo dibujado se pierde. Así que se me ocurre ir guardando en un array las celdas que tienen imagen y luego en el DrawCell recorrer el array con un for e ir pintando las imágenes. Ahora me pondré con ello, si lo consigo lo posteo por si a alguien le sirve.

Edito: Añado el código que he hecho (basado en el de egostar) para rellenar una celda con una imagen, ahora solo me falta la parte del array y el for:
Código Delphi [-]
 Imagen:TBitmap;
begin
 Imagen := TBitmap.Create;
 ImageList.GetBitmap(0,Imagen);
 l := (Nº_FILA * ANCHO_IMG) + Nº_FILA;
 t := (Nº_COLUMNA * ALTO_IMG) + Nº_COLUMNA;
 DrawGrid.Canvas.Draw(l,t,Imagen);
 Imagen.Free;
end;

Última edición por Omega fecha: 23-08-2008 a las 21:25:07.
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dibujar Cuadricula Drake Gráficos 9 22-03-2007 15:20:35
cuadricula...que calvario!! User_baja1 Impresión 2 03-03-2005 15:37:48


La franja horaria es GMT +2. Ahora son las 21:46:02.


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