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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-03-2005
Elfoscuro Elfoscuro is offline
Miembro
 
Registrado: mar 2005
Posts: 59
Poder: 20
Elfoscuro Va por buen camino
ListBox diferente...

Hola. Saludos desde este, mi primer mensaje en el foro...

Vereis, tengo un problema. Necesito hacer un TListBox diferente. Quiero que cuando se meta un carácter concreto en el principio de la cadena de cada item, el resto se muestre de un color u otro. Eso lo tengo solucionado ya, cambiando la property style y cambiando el evento DrawItem. Mi problema es que no se como hacerlo "grabado a fuego" en un componente nuevo. Yo lo he hecho así, pero no funciona:

Código:
unit ZXListBox;
interface
uses
SysUtils, Classes, Controls, StdCtrls, Types, Graphics;
 
type
TZXListBox = class(TListBox)
private
	{ Private declarations }
protected
	{ Protected declarations }
public
	constructor create(AOwner : TComponent); override;
	destructor destroy; override;
	procedure DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
	{ Public declarations }
published
	{ Published declarations }
end;
 
procedure Register;
 
implementation
 
constructor TZXListBox.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
Style:=lbOwnerDrawFixed;
Font.Name:='Courier New';
Font.Size:=8;
end;
 
destructor TZXListBox.Destroy;
begin
inherited destroy;
end;
 
{------------------------------------------------------------}
procedure TZXListBox.DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
Mostrar:String;
 
begin
with (Control as TListBox) do
begin
	if Index>=0 then
		begin
		 if length(Items[Index])>0 then
			 begin
				if Items[index][1]='|' then
					begin
					 Canvas.Font.Color := clBlue;
					 Canvas.Font.Style := [fsItalic,fsBold];
					 Mostrar:=copy(Items[Index],2,length(Items[Index])-1);
					end
				 else
					if Items[index][1]='¬' then
						begin
						 Canvas.Font.Color := clRed;
						 Canvas.Font.Style := [fsBold];
						 Mostrar:=copy(Items[Index],2,length(Items[Index])-1);
						end
					 else
						begin
						 Canvas.Font.Color := clBlack;
						 Canvas.Font.Style := [];
						 Mostrar:=Items[Index];
						end;
			 end
			else
			 begin
				Mostrar:='';
			 end;
		end;
	Canvas.TextRect(Rect, Rect.Left, Rect.Top, Mostrar);
end;
end;
 
procedure Register;
begin
RegisterComponents('XP', [TZXListBox]);
end;
end.
El caso es que se comporta como un TListBox corriente y moliente. Uso Delphi 7. No soy demasiado experto en la creación de componentes, e imagino que lo que he intentado es una faltada, pero es que no se me ocurre nada. Delphi se queja cuando compilo:


[Warning] ZXListBox.pas(17): Method 'DrawItem' hides virtual method of base type 'TCustomListBox'


¿Es posible hacer esto? Yo pienso que si, pero como os he comentado, no soy muy experto en el tema de componentes. Estoy empezando ahora, pero se me escapan ciertas cosas...


Saludos y gracias por adelantado a los que contesten ;-)

El elfo oscuro

Última edición por Elfoscuro fecha: 25-03-2005 a las 12:50:18.
Responder Con Cita
 


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 03:31:48.


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