Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-09-2008
Nebli
 
Posts: n/a
Como saber cuando se hace click sobre uno de los 120 Tpanel

Hola a tod@s.

La pregunta es sencilla, pero despues de estar probando lo poco que sé no he encontrado la respuesta, por eso pido ayuda.

Tengo un total de 120 Tpanel en una Form, y necesito saber cuando se hace 'click' sobre uno en concreto de ello. No es sentato poner 120 eventos OnClick, uno para cada Tpanel, por lo que he tratado de capturar el TPanel utilizando la matriz de componentes y comprobando cual de ellos tenía el foco, pero parece ser que como los Tpanel no admiten el foco, no lo puedo detectar.

Agradecería la ayuda de quien me pueda decir una forma de saber sobre cual de ellos se hace 'click' con el ratón.

Me he propuesto hacer un programa que llevo intentando hacer hacer varios años, y que como no hay tiempo ni para rascarse aún no lo había empezado. Ahora me he propuesto dedicarle unas horas los fines de semana y con los años espero terminarlo, porque creo que no va a ser nada sencillo.

A quien me pueda ayudar, le doy las gracias anticipadamente.

Gracias anticipadas
Responder Con Cita
  #2  
Antiguo 23-09-2008
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
puedes asignar un mismo evento a todos los paneles y usar la propiedad tag para saber que panel fue el que pulsaste algo así:
Código Delphi [-]
procedure TPanel_Click(sender : TObject);
var
  nro : integer;
begin
  nro := TPanel(sender).tag;
end;
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 23-09-2008
Avatar de DarkMan
DarkMan DarkMan is offline
Miembro
 
Registrado: jul 2006
Posts: 102
Poder: 18
DarkMan Va por buen camino
Puedes usar el parámetro sender para acceder al panel sobre el que se hace el click. Todos los paneles pueden tener asociado el mismo evento:
Código Delphi [-]
 
Procedure TPanelclick( Sender: TObject );
begin
 (Sender as TPanel).Caption := 'Seleccionado';
end;
__________________
"La recompensa de una buena acción está en haberla hecho"
Responder Con Cita
  #4  
Antiguo 24-09-2008
Nebli
 
Posts: n/a
Os agradezco a los dos vuestra ayuda, gracias a ello he podido continuar con lo que estoy programando.

Un saludo y muchas gracias de nuevo.
Responder Con Cita
  #5  
Antiguo 24-09-2008
Nebli
 
Posts: n/a
Lo que voy a hacer es lo siguiente:

// con esto se el nombre del Tpanel sobre el que se ha hecho click
textop := (Sender As Tpanel).Name;

Le quito al contenido de 'textop' la palabra 'Panel' ya que cada Tpanel se llama Panel1, Panel2, ect. con lo que sólo me quedará el número del Tpanel seleccionado, que irá desde el 1 al 120.

Una vez tengo el número del Tpanel selccionado, podré saber la columna y la fila en la que está en la ficha, ya que he puesto 12 Tpanel por fila y tengo 10 filas.

Gracias.

- por si hay curiosidad por saber de qué va la historia:
Hace varios años me propuse crear un programa para jugar a las 4 en raya contra el ordenador, con la salvedad de que el ordenador no sabrá casi nada cuando haga la primera partida y tendrá que ir aprendiendo conforme vaya juando. La idea creo que es demasiado ambiciosa, sobre todo porque no tengo tiempo ni de rascarme, pero me he propuesto los fines de semana dedicarle unas horas, y así hasta que lo termine. No tiene fecha de término de momento.
Responder Con Cita
  #6  
Antiguo 24-09-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ya que te has explicado mejor, te recomiendo usar Frames, es como si crearas un panel pero con las propiedades que tu quieras, en este caso, puedes añadirle dos propiedades Fila y columna, de esa forma no tienes que hacer virguerías para averiguarlo, solo tienes que consultar esas 2 propiedades (que obviamente habrás asignado cuando creas el frame).

Como ejemplo didáctico, este calendario con frames dinámico

En lugar de 120 paneles, tendrás 120 frames.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 24-09-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Cita:
Empezado por Nebli Ver Mensaje
Lo que voy a hacer es lo siguiente:

// con esto se el nombre del Tpanel sobre el que se ha hecho click
textop := (Sender As Tpanel).Name;

Le quito al contenido de 'textop' la palabra 'Panel' ya que cada Tpanel se llama Panel1, Panel2, ect. con lo que sólo me quedará el número del Tpanel seleccionado, que irá desde el 1 al 120.
¿para que tanto relajo con editar el nombre, quitarle el inicio, convertir el final a entero, etc, etc, cuando puedes utilizar la propiedad TAG como te recomendaron al principio?

Número := (Sender As Tpanel).Tag;
__________________

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
Simple: TPanel heredado que cambia de color con click. kwanbis Varios 8 26-09-2007 13:39:19
Saber cuando un Form hace un Paint José Luis Garcí OOP 13 17-09-2007 21:54:59
Como saber cuando BD fue desconectada? Luis Alberto Conexión con bases de datos 2 24-01-2006 11:16:46
Como Saber cuando Reinician la PC???? AGAG4 Varios 2 15-05-2005 08:07:31
Al dar doble click a mi aplicacion de delphi con paradox no hace nada gaescoto Tablas planas 3 23-05-2003 09:44:35


La franja horaria es GMT +2. Ahora son las 17:09:43.


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