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 11-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
shape en tabla

Bueno, perdonadme si sigo preguntando cosas elementales.

Ya voy resolviendo cosillas del programa, mirando aqui y alla, pero todavia hay cosas que me fallan.
He tenido que hacer un monton de cuadritos que representan habitaciones, cuando se pulsa una tiene que salir un procedimiento. El problema es que hice todos los cuadritos a mano con sus labels, pero como cada uno genera un eventoclick, son demasiados para hacerlos a mano, preguntaba si era posible meterlos en una tabla pero no se como puesto que todos estan creados manualmente.

son del tipo form1.label1click......se podria meter el labelx en la tabla y en funcion del label que se pulse sacar algo asi como label[1]click?

gracias
Responder Con Cita
  #2  
Antiguo 11-04-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No hace falta que crees un procedimiento para cada label, sino que puedes usar para todos los labels el mismo procedimiento. Por ejemplo haz que todos los labels apunten a label1click.
Dentro de este procedimiento tienes el parámetro Sender que te indica cual de los labels se ha pulsado realmente.

Código Delphi [-]
var
  lbl:TLabel;
begin
  // Es un label?
  if (Sender is TLabel) then begin
    lbl := TLabel(Sender);

    // aquí ya puedes trabajar con lbl
    (1)

  end;

En el punto (1) la variable lbl apunta al label sobre el que se ha pulsado el Click, label1, label2,.....
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 11-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias. Tengo una duda respecto a eso, uno de los cuadros es este
Código Delphi [-]
procedure Tfentrada.Lh101Click(Sender: TObject);

     var habita:integer;
 begin

 habita:= h101.Brush.Color;

 if habita = clYellow  then
      begin
      habita:=clRed;
      h101.Brush.color:=habita;
      Lh101.Font.Color:=clYellow
      end
  else
      begin
      habita:=clYellow;
      Lh101.Font.Color:=clBlack;
      h101.Brush.color:=habita
      end
end;
el procedimiento que me mencionas donde debe de ir, ademas los labels estan renombrados asi lh101 y cambiara en funcion de la habitacion lh102...

la verdad es que con vuestra ayuda estoy aprendiendo mucho, a ver si tambien puedo ayudar a otros.
Responder Con Cita
  #4  
Antiguo 11-04-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Ese procedimiento es el OnClick que estás programando. En tu ejemplo, si todos los OnClick de los Labels te apuntan a este prodecimiento podrías usarlo de esta forma:

Código Delphi [-]
procedure Tfentrada.Lh101Click(Sender: TObject);
  var habita:integer;
begin

 habita:= h101.Brush.Color;

 if habita = clYellow  then
      begin
      habita:=clRed;
      h101.Brush.color:=habita;
      TLabel(Sender).Font.Color:=clYellow
      end
  else
      begin
      habita:=clYellow;
      TLabel(Sender).Font.Color:=clBlack;
      h101.Brush.color:=habita
      end
end;


Ahora queda el tema del control h101 que habría que hacer algo similar. Supongo que es un control que está relacionado con la etiqueta que se llama igual (o casi igual). Para ese caso se puede utilizar un FindComponent.

¿De qué tipo es este control?

Código Delphi [-]
var
  comp:Tcomponent;
begin
  comp := FindComponent('L' + Sender.Name);
  // esto te daría que la variable comp está apuntando al compoenente Lh101, Lh102,...
  // dependiendo si has pulsado sobre la label h101, h102,...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 11-04-2007 a las 19:32:59.
Responder Con Cita
  #5  
Antiguo 11-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias me estas ayudando mucho.

este control donde lo pongo, lo he puesto en initialization pero me da error en el componente FindComponent
la verdad es que tambien me puede servir para cambiar el shape que he puesto al poner h101 se puede poner en vez de h101.brush.color tshape.brush.color?

gracias de nuevo asi da gusto aprender.

Código Delphi [-]
var
  comp:Tcomponent;
begin
  comp := FindComponent('L' + Sender.Name);
  // esto te daría que la variable comp está apuntando al compoenente Lh101, Lh102,...
  // dependiendo si has pulsado sobre la label h101, h102,...
Responder Con Cita
  #6  
Antiguo 12-04-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
El h101, h101 son Shapes...
Entonces quedaría así:

Código Delphi [-]
procedure Tfentrada.Lh101Click(Sender: TObject);
var 
  habita:integer;
  comp:TShape
  lbl:TLabel;
  nom:String;
begin

  // Acceder al label
  lbl := TLabel(Sender);
  // Acceder al pabel relacionado con ese label
  nom := copy(lbl.Name, 2, Length(lbl.Name));
  // Con esto si el label es el lh101 nom valdrá h101, 
  // buscamos el shape con ese nombre
  comp := TShape(FindComponent(nom));



  habita:= comp.Brush.Color;

  if habita = clYellow  then begin
      habita:=clRed;
      comp.Brush.color:=habita;
      lbl.Font.Color:=clYellow
      end
  else
      begin
      habita:=clYellow;
     lbl.Font.Color:=clBlack;
      comp.Brush.color:=habita
      end
end;

Te he puesto el código de memoria, pero debe funcionar, salvo que haya cometido algun error de sintaxis. Lo más importante es que lo entiendas.
Ahora puedes hacer que todos los labels apunten a este OnClick; Si pulsas sobre lh101 funcionará con esa label y con el shape h101, si pulsas lh102 y el shape h102, y así sucesivamente...

AÑADO: Una vez que funcione, faltarían las comprobaciones de posibles errores en el FindComponent, y el los CAST.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 12-04-2007 a las 12:42:43.
Responder Con Cita
  #7  
Antiguo 12-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias de nuevo. Error no da, pero sigue funcinando solo para el lh101, no habria que poner algo en algun otro sitio para que capturara el evento de cualquier label? porque solo ejecuta la procedure solo si se pulsa la lh101 para otras no entra.
Responder Con Cita
  #8  
Antiguo 13-04-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por anubis
gracias de nuevo. Error no da, pero sigue funcinando solo para el lh101, no habria que poner algo en algun otro sitio para que capturara el evento de cualquier label? porque solo ejecuta la procedure solo si se pulsa la lh101 para otras no entra.
En el OnClick del resto de label debes apuntar a este mismo evento.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 13-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
si, gracias, ya seleccione todos los label y les apunte para esa procedure, muchas gracias, funciono.
Una ultima cosa rapida, si quiero que el nom resultante de la procedure lo pueda visualizar con el dato almacenado en el form que aparece al pulsar el label, como se puede hacer, porque lo intente declarar como public y no me deja.

gracias de nuevo
Responder Con Cita
  #10  
Antiguo 13-04-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En ese mismo procedimiento puedes acceder a todo el form:

Código Delphi [-]
  ...
  // esto debería modificar el título del form, por ejemplo...
  Self.Caption := nom;
  ...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 13-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
perdon, me referia a visualizarlo en otro form, poder usar las variables y su contenido en otros forms.

gracias por las molestias
Responder Con Cita
  #12  
Antiguo 16-04-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Crea una propiedad en la parte pública de ese form. Desde el evento le asignas el valor y desde fuera (otros formularios) podrás consultar esa propiedad sin probblemas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #13  
Antiguo 16-04-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Muchas gracias, me ha funcionado.

cada vez aprendo mas...con vuestra ayuda y se me hace menos frustrante.

gracias de nuevo

yo sigo preguntando...
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
Crear un Shape en Runtime David78 Gráficos 4 28-04-2010 22:03:54
mover linea en delphi (move shape) Migueltdf Gráficos 0 23-08-2006 02:50:10
Rotar Shape dicatek Gráficos 3 18-07-2006 23:33:37
Shape en DetailBand TONIAM Impresión 1 25-10-2005 17:59:24
Se puede pintar en un Shape? k2k2k2 Gráficos 4 13-01-2005 11:56:49


La franja horaria es GMT +2. Ahora son las 02:54:44.


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