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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Exclamation Secuencia de colores con Labels

Hola gente de la comunidad clubdelphi, tengo problemas con los label

Lo que estoy haciendo es una secuencia de colores:

- En el form tengo 3 label con estos colores por defecto:

Label1 // Color Verde
Label2 // Color Amarillo
Label3 // Color Amarillo

- Lo que quiero es que al presionar la tecla flecha abajo (VK_DOWN) el color Verde del Label1 se pase al Label2 y el Label1 cambie al color a Amarillo.

Label1 // Color Amarillo
Label2 // Color Verde
Label3 // Color Amarillo

- Preciono nuevamente la misma tecla flecha abajo (VK_DOWN) por segunda ves, se pase el color Verde que esta en el Label2 al Label3 y el label2 se cambie a Amarillo.

Label1 // Color Amarillo
Label2 // Color Amarillo
Label3 // Color Verde

Lo que estoy haciendo es asi en un Timer con Intervalo 1
Código:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (GetKeyState(VK_DOWN)<0) then
begin
if Label1.Font.Color = clLime then
begin
Label1.font.color := clYellow;
Label2.font.color := clLime;
end;
end;
begin
if (GetKeyState(VK_DOWN)<0) then
begin
if Label2.font.Color = clLime then
begin
Label2.font.color := clYellow;
Label3.font.color := clLime;
end;
end;
end;
end;
end.
Mi problema es que al presionar la tecla flecha abajo (VK_DOWN) el Label3 automaticamente se pasa a color Verde y el Label1 y Label2 a amarillo, al presionar la tecla queda asi

Label1 // Color Amarillo
Label2 // Color Amarillo
Label3 // Color Verde

El problema es que no sigue la secuencia deseada

Espero que me ayuden porfavor, gracias por adelantado

Última edición por Milworm99 fecha: 17-11-2017 a las 05:27:48.
Responder Con Cita
  #2  
Antiguo 17-11-2017
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
No entiendo porque usas un Timer... ¿Es una exigencia de la prueba?

Yo haría la captura justo en el evento de presionar la tecla de flecha abajo en el formulario (onKeyDown) y le pasaría este código:

Código Delphi [-]
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  // Cambios de color
  if (GetKeyState(VK_DOWN)<0) then
  begin
    if Label1.Font.Color = clLime then
    begin
      Label1.font.color := clYellow;
      Label2.font.color := clLime;
      Label3.font.color := clYellow;
    end
    else
    if Label2.font.Color = clLime then
    begin
      Label1.font.color := clYellow;
      Label2.font.color := clYellow;
      Label3.font.color := clLime;
    end
    else
    if Label3.font.Color = clLime then
    begin
      Label1.font.color := clLime;
      Label2.font.color := clYellow;
      Label3.font.color := clYellow;
    end
  end;
end;
Espero que te sirva

Saludos
Responder Con Cita
  #3  
Antiguo 17-11-2017
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Yo lo haría de forma ligeramente diferente, para que fuera mas sencillo agregar un label nuevo.

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
// Tecla abajo
if (GetKeyState(VK_DOWN)<0) then
begin
// Si el ultimo laber no es verde muevo el color.
if Label3.Font.Color <> clLime then
begin
Label3.font.color := Label2.font.color;
Label2.font.color := Label1.font.color;
Label1.font.color := clYellow;
end
end;
end;
Responder Con Cita
  #4  
Antiguo 17-11-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por duilioisola Ver Mensaje
..
Estos novatos, que olvidan siempre poner las etiquetas al código
Responder Con Cita
  #5  
Antiguo 17-11-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Yo lo haría de forma ligeramente diferente, para que fuera mas sencillo agregar un label nuevo.

Código:
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  // Tecla abajo
  if (GetKeyState(VK_DOWN)<0) then
  begin
    // Si el ultimo laber no es verde muevo el color.
    if Label3.Font.Color <> clLime then
    begin
      Label3.font.color := Label2.font.color;
      Label2.font.color := Label1.font.color;
      Label1.font.color := clYellow;
    end
  end;
end;
Muchas Gracias duilioisola

Pero quisiera saber si se puede regresar el color en forma desendente al precionar el boton flecha arriba (VK_UP)
Ejemplo los colores de los Labels quedan asi:

Label1//Color Amarillo
Label2 //Color Amarillo
Label3 // Color Verde

Presiono boton flecha arriba

Label1//Color Amarillo
Label2 //Color Verde
Label3 // Color Amarillo

Presiono otra ves flecha arriba
Label1//Color Verde
Label2 // Color Amarillo
Label3 // Color Amarillo

Y por cada cambio de color verde en el label, me salga un mensaje Ejemplo: Label2 Color verde, tecla arriba: Color Label1 verde

Y regrese como estaba

Última edición por Milworm99 fecha: 17-11-2017 a las 16:38:36.
Responder Con Cita
  #6  
Antiguo 17-11-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Este ejemplo cambia la leyenda y color del Label actualmente seleccionado como pides:
Código Delphi [-]
...
implementation {$R *.dfm}

var
  vLbs: array of TLabel;
  inx : Integer = 0;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  // buscar labels y agregarlos al arreglo
  for i := 0 to Self.ComponentCount-1 do
    if Self.Components[i] is TLabel then
    begin
      SetLength(vLbs, Length(vLbs)+1);
      vLbs[High(vLbs)] := TLabel(Components[i]);
    end;
  // leyenda y color del primer item
  TLabel(vLbs[Low(vLbs)]).Font.Color := clLime;
  TLabel(vLbs[Low(vLbs)]).Caption := TLabel(vLbs[Low(vLbs)]).Caption + ' Color verde';
  // leyenda y color de los items siguientes
  for i := Low(vLbs)+1 to High(vLbs) do
  begin
    TLabel(vLbs[i]).Font.Color := clYellow;
    TLabel(vLbs[i]).Caption := TLabel(vLbs[i]).Caption + ' Color amarillo';
  end;
  // el form recibe los eventos de teclado primero
  Self.KeyPreview := True;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  // cambiar leyenda y color del item previamente seleccionado
  TLabel(vLbs[inx]).Caption := Copy( TLabel(vLbs[inx]).Caption,1,
    Pos(' Color', TLabel(vLbs[inx]).Caption) ) + 'Color amarillo';
  TLabel(vLbs[inx]).Font.Color := clYellow;

  case Key of
    VK_DOWN: if inx < High(vLbs) then
               Inc(inx)
             else
               Inx := Low(vLbs);
    VK_UP  : if inx > Low(vLbs) then
               Dec(inx)
             else
               Inx := High(vLbs);
  end;

  // cambiar leyenda y color del item actualmente seleccionado
  TLabel(vLbs[inx]).Caption := Copy( TLabel(vLbs[inx]).Caption,1,
    Pos(' Color', TLabel(vLbs[inx]).Caption) ) + 'Color verde';
  TLabel(vLbs[inx]).Font.Color := clLime;
end;
El comportamiento es cíclico, es decir que si estas en el Label inferior y continuas presionando la tecla Down regresa al superior y viceversa con la tecla Up.

Muestra:



Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 17-11-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Muchas Gracias, me sirvió

Última edición por Casimiro Notevi fecha: 17-11-2017 a las 22:24:27.
Responder Con Cita
  #8  
Antiguo 18-11-2017
Milworm99 Milworm99 is offline
Miembro
NULL
 
Registrado: nov 2017
Posts: 31
Poder: 0
Milworm99 Va por buen camino
Exclamation

Bueno gracias a todos, pero lo que quería era algo así, perdón por no especificar bien con lo que deseaba hacer, yo ya lo hise todo, pero quisiera que me ayuden a resumir el código por favor para que no quede tan largo.

Cambio de colores de los Labels con las Teclas Arriba,Abajo, Derecha y Izquierda.


Archivos Adjuntos
Tipo de Archivo: rar Secuencia de Colores.rar (167,5 KB, 4 visitas)

Última edición por Milworm99 fecha: 18-11-2017 a las 02:04:11.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Modificar Labels emme_juegos OOP 1 13-12-2010 01:02:28
Restar dos labels stynpy29 Varios 2 01-06-2010 17:44:00
labels y campos josi Varios 1 15-05-2008 12:44:51
Transparencia en labels .NET edalmasso .NET 0 11-04-2006 22:18:16
Labels Verticales KAISSER Impresión 3 11-06-2003 11:07:02


La franja horaria es GMT +2. Ahora son las 12:39:18.


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