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 08-11-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
cambiar diseño de filelistbox

Hola, como estan ! gracias por los apoyos brindados.

Tengo la sigueinte duda.

Como puedo cambiar ( en este caso alternar) el color de seleccion en un filelistbox, es decir alternar 2 colores de seleccion de los ITems cuando me desplazo con teclado ( arriba y abajo), y un tercer color para cuando selecciono uno de los elementos.


En breve: mientras me desplazo por el filelistbox se alternan 2 colores, y cuando selecciono un item por mouse o por teclado, el color de seleccion cambia por un segundo y se reestablece.

Esto es solo un efecto para indicarle al usuario cual item selecciono.


Gracias de verdad por la ayuda que puedan brindarme

Saludos.!
Responder Con Cita
  #2  
Antiguo 09-11-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
DE hecho solo quiero poder cambiar un instante el color del cuadro de seleccion sobre el item "seleccionado".

Para que que se vea como un efecto al usuario de seleccion.
Responder Con Cita
  #3  
Antiguo 10-11-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
diseño de un filelistbox

-Este mensaje lo tenia en "varios", disculpen mi insistencia, quizas este puede ser el area donde mejor se pueda colocar._


Hola, como estan ! gracias por los apoyos brindados.

Tengo la sigueinte duda.

Como puedo cambiar ( en este caso alternar) el color de seleccion en un filelistbox, es decir alternar 2 colores de seleccion de los ITems cuando me desplazo con teclado ( arriba y abajo), y un tercer color para cuando selecciono uno de los elementos.


En breve: mientras me desplazo por el filelistbox se alternan 2 colores, y cuando selecciono un item por mouse o por teclado, el color de seleccion cambia por un segundo y se reestablece.

Esto es solo un efecto para indicarle al usuario cual item selecciono.


Gracias de verdad por la ayuda que puedan brindarme

Saludos.!
Responder Con Cita
  #4  
Antiguo 10-11-2005
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
Mezclé tu nuevo hilo en el original y lo moví al foro OOP donde pienso que sería más correcto. En caso de duda pide a un moderador que cambie de foro el hilo en lugar de abrir uno nuevo.

// Saludos

Última edición por roman fecha: 10-11-2005 a las 07:14:47.
Responder Con Cita
  #5  
Antiguo 10-11-2005
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
En cuanto a tu duda, la parte que no entiendo es lo del tercer color. Ya el sistema usa un color distinto para la selección.

Pero bueno, indepedientemente de porqué quieres hacerlo así te comento que TFileListBox desciende de TCustomListBox. Esta componente está diseñada para un pintado personalizado mediante su propiedad Style y su evento OnDrawItem.

De hecho, TFileListBox usa el estilo lbOwnerFixedDraw y el método DrawItem para poder dibujar los iconos de los archivos si estableces su propiedad ShowGlyphs.

Ahora bien, el problema es que tanto Style como OnDrawItem son propiedades protegidas en TCustomListBox y TFileListBox no las publica.

Entonces, la solución sería derivar una nueva clase de TFileListBox y redefinir su método DrawItem:

Código Delphi [-]
type
  TBicolorFileListBox = class(TFileListBox)
  protected
    procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
  end;

implementation

procedure TBicolorFileListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  if odSelected in State then
    Canvas.Brush.Color := clGray // color para la selección
  else if Odd(Index) then
    Canvas.Brush.Color := clRed // color para ítems impares
  else
    Canvas.Brush.Color := clYellow; // color para ítems pares

  inherited;
end;

EDITO

Oops! Que me ha salido una suerte de bandera española

// Saludos

Última edición por roman fecha: 10-11-2005 a las 07:17:36.
Responder Con Cita
  #6  
Antiguo 10-11-2005
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
Je, je, éste también es un bonito pintado:

Código Delphi [-]
procedure TFileListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  if odSelected in State then
    Canvas.Brush.Color := clGray
  else
    case Index mod 4 of
      0: Canvas.Brush.Color := clGreen;
      2: Canvas.Brush.Color := clRed;
      1, 3: Canvas.Brush.Color := clWhite;
    end;

  inherited;
end;



// Saludos
Responder Con Cita
  #7  
Antiguo 10-11-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
... el que sabe, sabe!

Gracias por tomarte el tiempo para contestar, ciertamente se ve un tanto extraño , com tu dices , quizas no me habia explicado bien.

corrigiendo, lo que quiero que se vea con colores alternados es el "fondo" del filelistbox por asi decirlo, la intecion es que no se vea el cuadro "plano" con solo el color que se le puede cambiar.

O quizas hasta al guna imagen ( no se si se pueda?).

en mi caso el color de seleccion de los items es azul. Entonces lo que requiero es:

1._ Tener la posibilidad de cambiar el color de seleccion ( de manera que pueda combinar con los colores de fondo). Seria parecido a lo que me mostraste supongo.

2.- al momento de selccionar un item ( es este caso seleccionar me refiero a que el usuario teclea <enter> ) el color de seleccion cambie por un instante a otro color. es decir para el usuario un efecto de que selecciono ese item.

alguna sugerencia?


-- ahora bien lo que me respondiste, como lo utilizo?, entiendo que hace , pero no, como lo utilizo ? (perdona mi ignorancia)

se usa dentro del programa principal? por aparte o como?

lo intente utilizar asi pero me mando varios errores !

gracias por tu pasciencia!
--------------------------------

<En la forma tengo el filellistbox>
Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
type
  TForm1 = class(TForm)
    FileListBox1: TFileListBox;
    TBicolorFileListBox = class(TFileListBox)
  protected
    procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
  end;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
procedure TBicolorFileListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  if odSelected in State then
    Canvas.Brush.Color := clGray // color para la selección
  else if Odd(Index) then
    Canvas.Brush.Color := clRed // color para ítems impares
  else
    Canvas.Brush.Color := clYellow; // color para ítems pares
  inherited;
end;
{$R *.dfm}
end.

Última edición por vtdeleon fecha: 10-11-2005 a las 20:18:15. Razón: Etiqueta Delphi
Responder Con Cita
  #8  
Antiguo 10-11-2005
Avatar de lpmlpm
lpmlpm lpmlpm is offline
Miembro
 
Registrado: ago 2005
Posts: 136
Poder: 19
lpmlpm Va por buen camino
Una forma práctica si solo lo usas en una simple forma es usar clases sobrepuestas... prueba con esta implementación:

Código Delphi [-]
 unit Unit1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, FileCtrl;
 
 type
 
   TFileListBox = class(FileCtrl.TFileListBox)
   protected
     procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
   end;
 
   TForm1 = class(TForm)
     FileListBox1: TFileListBox;
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.dfm}
 
 procedure TFileListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
 begin
  if odSelected in State then
     Canvas.Brush.Color := clGray
   else
     case Index mod 4 of
       0: Canvas.Brush.Color := clGreen;
       2: Canvas.Brush.Color := clRed;
       1, 3: Canvas.Brush.Color := clWhite;
     end;
   inherited;
 end;
 
 end.
__________________
"Lo mejor de no saber hacer nada es que se tiene mucho tiempo libre."
Responder Con Cita
  #9  
Antiguo 10-11-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
Gracias, de esa forma ya puede modificar los colores.

Pero tengo la siguiente inquietud:

.- Como puedo hacer para que en el momento en que yo pulso un boton o tecleo < Enter> la seleccion actual cambie de color digamos por 1 segundo y despues regrese al color previo. ( es para indicar que dicha opcion fue aceptada).
------------------------------
Ahora, creo que el codigo que puse estaba yo un poco confundido, lo que me estaban sugiriendo era algo como crear un componente, es asi?

Estuve leyendo algo e inicie un nuevo "componente" , seleccione Tfilelistbox como "ancestor", luego "classname" puse un nombre como el TbicolorFilelistbox, seleccione una paleta, luego un "nombre" para la unit.pas, en "search path" deje lo que me aparece:

$(BDS)\LIB;C:\ARCHIVOS DE PROGRAMA\BORLAND\BDS\3.0\IMPORTS;$(BDS)\LIB\INDY10;C:\Archivos de programa\Borland\BDS\3.0\RaveReports\Lib$(BDS)\LIB;$(BDS)\LIB\INDY10;C:\Archivos de programa\Borland\BDS\3.0\RaveReports\Lib;c:\archivos de programa\borland\bds\3.0\gifimaged7c;c:\documents and settings\usuario\mis documentos\borland studio projects\bpl

y luego coloque lo que me habian sugerido (hablando de derivar un componente) .

pero despues ya no supe que hacer.
lo guardo? como lo guardo? donde lo guardo? como hago que aparezca en la paleta, etc?

conocen alguna guia para hacer todo esto?
Responder Con Cita
  #10  
Antiguo 10-11-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
help !

siguiendo con esto

creo un componente como lo explico previamente, y lo guardo como
colorFileListBox.pas que contiene lo siguiente:


unit colorFileListBox;
interface
uses
SysUtils, Classes;

type
TcolorFileListBox1 = class(TFileListBox)
private
{ Private declarations }
protected
procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

procedure TBicolorFileListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
if odSelected in State then
Canvas.Brush.Color := clGray // color para la selección
else if Odd(Index) then
Canvas.Brush.Color := clRed // color para ítems impares
else
Canvas.Brush.Color := clYellow; // color para ítems pares

inherited;
end;


procedure Register;
begin
RegisterComponents('Samples', [TcolorFileListBox1]);
end;

end.

------------
segun me indicaron.
luego creo un "new package" le digo "add " selecciono la unit.pas
y posteriormente le digo instalar, pero me manda error en Tfilelistbox que no esta declarado.

que estoy haciendo mal?, ando muy perdido?

saludos
Responder Con Cita
  #11  
Antiguo 11-11-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Jorghino reyes , el post 7 de este hilo lo habia modificado para agregar las etiquetas pertinentes a tu codigo, para hacerlo mas legible. Creí que si le dabas una miradita a tu propio mensaje, y percatandote del cambio que este tiene, habrias captado el mensaje.

Aun asi te invito a leer: (Not) Guía de Estilo, Etiquetas vB:=Delphi-SQL
Muy interesantes
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #12  
Antiguo 11-11-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
Una disculpa, en lo sucesivo asi lo haré.
Responder Con Cita
  #13  
Antiguo 11-11-2005
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 Jorghino reyes
pero me manda error en Tfilelistbox que no esta declarado.

que estoy haciendo mal?, ando muy perdido?
No. No andas muy perdido, sólo un poco despistado. Siempre que Delphi te marque un error de esos al compilar es por que no encuentra el identificador que te indica en el mensaje. Recuerda que Delphi sólo puede compilar lo que ve en el archivo actual y lo que esté en los archivos listados en la cláusula uses.

Debes entonces agregar al uses la unidad donde se declare TFileListBox. ¿Que cómo sabes cuál es ésta? Muy fácil, pasa el cursor del ratón sobre el icono de la componente en la paleta de componentes y el hint amarillo te dirá el nombre de la unidad. ¿Que porqué antes no fue necesario? Porque Delphi, cuando insertas una componente al un formulario, automáticamente agreaga la unidad.

// Saludos
Responder Con Cita
  #14  
Antiguo 11-11-2005
Jorghino reyes Jorghino reyes is offline
Miembro
 
Registrado: ago 2005
Ubicación: Jalisco Mexico
Posts: 41
Poder: 0
Jorghino reyes Va por buen camino
Parece que ya lo logre. gracias.

Por último, exsite alguna manera de que en determinado momento ( un click de boton) el color de la seleccion cambie por 2 segundos ?

ya sea útilizando la clase derivada o la sobrepuesta,

gracias
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


La franja horaria es GMT +2. Ahora son las 08:35:39.


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