![]() |
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.! |
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. |
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.! |
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 |
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:
EDITO Oops! Que me ha salido una suerte de bandera española :D // Saludos |
Je, je, éste también es un bonito pintado:
:D // Saludos |
... 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>
|
Una forma práctica si solo lo usas en una simple forma es usar clases sobrepuestas... prueba con esta implementación:
|
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? |
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 |
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 |
Una disculpa, en lo sucesivo asi lo haré.
|
Cita:
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 |
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 |
La franja horaria es GMT +2. Ahora son las 22:03:27. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi