Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: Sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 16
gluglu Va por buen camino
"Macros" como en Clipper ?

Hola Amigos,

Es posible la utilización en Delphi de lo que antes en Clipper se denominaba "Macros" ?

Algo así como:
Código:
For I := 1 to 40 do begin
  Aux_Macro := 'RadioButton'+Trim(IntToStr(I));
  &Aux_Macro.Caption := ' ..... (lo que sea)';
end;
Saludos a todos !
Responder Con Cita
  #2  
Antiguo 17-11-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: May 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
La macrosustitución es algo que no puede hacerse con Delphi, aunque el ejemplo que muestras en el que se supone que quieres poner un mismo caption a varios botones, sería posible recorriendo la colección de componentes y detectando los que sean Tbutton.....


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 17-11-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: Sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 16
gluglu Va por buen camino
Muchas gracias Marcos,

Lo que pasa es que no me vale esa solución ya que el ejemplo que he puesto verdaderamente no es así como lo necesito.

En concreto: Tengo un Form que representa el Rack de Habitaciones de un hotel, y en el cual voy a tener 75 "Fichas", una para cada habitación, y dependiendo de si está ocupada, libre, pendiente de salida, ... (etc), cada habitación, su "ficha" debe de adquirir un color diferente.

Para cada Ficha tengo en mi Form un grupo de componentes, tales como Shape's, Label's, etcétera, que entre otras cosas muestran los números de habitación, nombre del cliente, ...

Por supuesto, dentro del form tengo otros Shape's, Label's ...

Lo que quería era poder campiar los atributos de cada "Ficha" sin tener que hacer siempre referencia al nombre del componente en concreto.

Por ejemplo : "Ficha1".Color := ...., "Ficha2".Color := ...., y así sucesivamente.

Si me creo un procedimiento que me busque el estado de cada habitación (de la 1 a la 75 ...), una vez que he detectado el estado de cada habitación en concreto quería poner entonces ("Ficha"+NºHab).Color := ... ya que dicho proceso lo voy a realizar 75 veces ! y no tener que escribir 75 líneas de código.

Teniendo en cuenta encima que cada "Ficha" tiene algo así como 5 "componentes", tendría que utilizar 75*5 = 375 líneas de código, en vez de utilizar un bucle con 5 líneas, una para cada uno de los componentes que quiero cambiar.

A lo mejor me podeis dar una idea mejor para este tema.

Una vez más, muchas gracias a todos !
Responder Con Cita
  #4  
Antiguo 17-11-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: May 2003
Ubicación: Campeche, México
Posts: 2.727
Poder: 18
maeyanes Va por buen camino
Puedes usar la propiedad Components de TForm.

Código Delphi [-]
for I := 0 to ComponentCount - 1 do
  // Aquí TTipoDeComponenteAModificar puede ser TButton, TPanel, TEdit, etc...
  if Components[i] is TTipoDeComponenteAModificar then
    TTipoDeComponenteAModificar(Components[i]).Color := clRed

Otra opción sería usar RTTI, y para eso puedes hacer una búsqueda en los foros, ya que el tema se ha tratado en más de una ocasión...



Saludos...
Responder Con Cita
  #5  
Antiguo 17-11-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: May 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 22
jachguate Va por buen camino
Para hacer algo como:

Cita:
Empezado por gluglu
Por ejemplo : "Ficha1".Color := ...., "Ficha2".Color := ...., y así sucesivamente.
Podes hacer:

Código Delphi [-]
var
  i : integer;

begin
  for i := 1 to 75 do
  begin
    TWinControl(FindComponent('Label' + intToStr(i))).Color := ColorHabitacion(i);
    TWinControl(FindComponent('Shape' + intToStr(i))).Color := ColorHabitacion(i);
    //etc.
  end;
end;

Aunque yo prefiero otras implementaciones... esto si que es posible en delphi.

Hasta luego.



pd. He casteado de memoria a TWinControl, supongo que la propiedad Color nace alli... si me equivoco, ya será tu tarea buscar de donde viene o castear a la clase final de cada componente.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 17-11-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: Sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 16
gluglu Va por buen camino
Gracias tanto a maeyanes como a jachguate.

He investigado un poco en ese tema (absolutamente nuevo para mi) de RTTI. Uff ! hay muchísima información. Así que me llevará un "cierto" ratito investigar este campo nuevo e ir aprendiendo cada vez más cosas !

Gracias de nuevo por la versión "simplificada" de jachguate que seguramente es lo más inmediato que vengo buscando, pero no obstante lo de RTTI hay que mirarlo !

Saludos
Responder Con Cita
  #7  
Antiguo 17-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.183
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por jachguate
Aunque yo prefiero otras implementaciones
Yo también. Leyendo por encima lo que se requiere yo optaría como una primera idea por usar un TFrame para las fichas. En él se colocan las componentes con el número de habitación, nombre del cliente, etc.

En la clase del frame se implementa un método para establecer el color:

Código Delphi [-]
case Estado of
  UnEstado: Color := clGreen;
  OtroEstado: Color := clBlue;
  AunOtroEstado: Color := clRed;

  etc.
end;

Incluso, la idea de maeyanes me parece más que suficiente. En su código, TTipoDeComponenteAModificar sería la clase del TFrame.

Desaconsejaría el uso de FindComponent pues, como ya he dicho en otras ocasiones, FindComponent es de por sí un ciclo que recorre las componentes del formulario hasta encontrar la del nombre indicado, de manera que se estaría haciendo este ciclo setentaicinco veces.

EDITO

Y, en resumen, desaconsejaría también RTTI. Tanto con éste como con FindComponent, basas tu código en los elementos de la interfaz de usuario y cualquier cambio que quieras hacerle a ésta te dará dolores de cabeza por los cambios que tendrás que hacer en otras partes del código.

// Saludos

Última edición por roman fecha: 17-11-2005 a las 20:24:06.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 08:51:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi