 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Emilio j Invitado
|
Publicado: Lun 14 Oct, 2002 11:55 am Asunto: Crear un ListBox al que se asocien colores a cada item |
|
|
Si alguien tiene por ahí un listbox al que se puedan asociar colores a cada uno de sus items, por favor, que me lo pase, porque he hecho uno pero el programa que lo utiliza se queda colgado (unas veces funciona bien, pero al rato se queda colgado a la primera ocasión).
Si, no teneis por ahí un componente de este tipo pero conoceis cómo se crean componentes para Builder, os adjunto a continuación el código fuente del componente que hemos creado (pero que como digo, no funciona correctamente). Os agradecería mucho que le echarais un vistazo y me dijerais donde puede estar el error. GRACIAS:
Si este foro no es para estas cosas, lo siento, no lo volveré a hacer
FICHERO DE CABECERA (CTlistBox.h)
----------------------------------------
#ifndef CTListBoxH
#define CTListBoxH
#define EMNumColores 80
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <StdCtrls.hpp>
AnsiString version = "version 1.0.1";
class PACKAGE CTListBox : public TListBox
{
private:
TColor colores[80]; // la estructura no maneja más de 80 elementos
void __fastcall DrawItem(int Index, const Windows::TRect &Rect,TOwnerDrawState State);
protected:
public:
TColor colores[EMNumColores]; // la estructura no maneja más de 80 elementos
__fastcall CTListBox(TComponent* Owner);
void __fastcall anadir_color(int indice,TColor color);
AnsiString& Version(void);
};
#endif
CÓDIGO C++ (CTlistBox.cpp)
----------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CTListBox.h"
#pragma package(smart_init)
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(CTListBox *)
{
new CTListBox(NULL);
}
__fastcall CTListBox::CTListBox(TComponent* Owner) : TListBox(Owner)
{
}
// --------------------------------------------------------------------------
void __fastcall CTListBox::DrawItem(int Index, const Windows::TRect &Rect, TOwnerDrawState State)
{
// Este método se ejecuta cuando Windows necesita "pintar" un item del listBox
TListBox::DrawItem(Index,Rect,State);
TCanvas *pCanvas = this->Canvas;
pCanvas->Brush->Color = this->colores[Index];
pCanvas->FillRect(Rect);
pCanvas->TextOut(Rect.Left,Rect.Top, this->Items->Strings[Index]);
}
// --------------------------------------------------------------------------
void __fastcall CTListBox::anadir_color(int indice, TColor color){
// Añade un color a un item, asociándolo al array de colores (en la posición dada por "indice")
TRect rect;
TOwnerDrawState estado;
if ((indice >= 0)&&(indice < EMNumColores)){
rect = this->ItemRect(indice);
colores[indice] = color;
DrawItem(indice, rect,estado);
}
}
// ----------------------------------------------------------------
AnsiString& CTListBox::Version(void) { // Esta función no sirve para nada
return (version);
}
// ----------------------------------------------------------------
namespace Ctlistbox
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(CTListBox)};
RegisterComponents("Samples", classes, 0);
}
} |
|
| Volver arriba |
|
 |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Lun 14 Oct, 2002 5:56 pm Asunto: |
|
|
HOLA:
Bueno dos cosillas.
Las primera, y por que no os funciona, es por que se se os ha olvidado poner en el constructor la propiedad style = lbOwnerDrawFixed;
Esto hacer que pase por DrawItem.
Y la segunda, no me gusta
TCanvas *pCanvas = this->Canvas;
Si puedes crea una variable de la clase, asi la puedes construir y destruir.
By. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|