Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2015
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
ListBox con dos lineas por item

Quisiera saber si existe la posibilidad de poner dos o mas lineas por cada item dentro de un ListBox. De no poderse tendre que reemplazar el control o tro que si me deje como podría ser una grilla.

Quería saber esto para no tener que cambiar el código existente en lo posible.

Saludos,
EL Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #2  
Antiguo 21-04-2015
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 elrayo76.

Si, es posible.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  //...
  Listbox1.Style := lbOwnerDrawVariable;  
end;

procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
  var Height: Integer);
var
  cv: TCanvas;
  H : HWND;
  R : TRect;
begin
  cv := TCanvas.Create;
  try
    cv.Handle := GetDeviceContext(H);
    R  := ListBox1.ClientRect;
    Height := DrawText(cv.Handle,PChar(ListBox1.Items[Index]), -1, R, DT_WORDBREAK);
  finally
    cv.Free;
  end;
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  cv: TCanvas;
begin
  cv:= Listbox1.Canvas;
  cv.FillRect(Rect);
  DrawText(cv.Handle, PChar(ListBox1.Items[Index]), -1, Rect, DT_LEFT+DT_TOP+DT_WORDBREAK);
  Invalidate;
end;

Salida:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 21-04-2015 a las 19:09:03. Razón: agregar imágen
Responder Con Cita
  #3  
Antiguo 21-04-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
elrayo76,

Cita:
Empezado por elrayo76
...Quisiera saber si existe la posibilidad de poner dos o mas lineas por cada item dentro de un ListBox...


Una alternativa a N líneas por item en un TListBox, es asociar la data que se requiera a cada item dentro del mismo componente.

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SL : TStringList;
  L : TList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   L := TList.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   i,j : Integer;

begin

   Randomize;

   for i := 1 to 5 do
   begin
      SL := TStringList.Create;
      for j := 1 to 5 do
         SL.Add('Item-' + IntToStr(i) + ' Data-' + IntToStr(Random(100)));

      L.Add(SL);

      ListBox1.AddItem('Item-' + IntToStr(i),SL);
   end;

end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
   AuxSL : TStringList;
   i : Integer;

begin

   AuxSL := TStringList.Create;
   AuxSL.Assign(TStringList(ListBox1.Items.Objects[ListBox1.ItemIndex]));

   Memo1.Clear;
   for i := 0 to AuxSL.Count - 1 do
      Memo1.Lines.Add(AuxSL.Strings[i]);

   AuxSL.Free;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
   i : Integer;

begin

   Action := caFree;

   for i := 0 to L.Count - 1 do
      Dispose(L.Items[i]);

   L.Free;

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Permite asociar un TStringList a cada Item de un TListbox, como se muestra en la siguiente imagen:



Espero sea útil

Nelson.
Responder Con Cita
  #4  
Antiguo 21-04-2015
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
Muchas gracias amigo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #5  
Antiguo 21-04-2015
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
nlsgarcia, gracias por responder, pero tengo que aclarar que la opción que me dio el amigo ecfisa es lo que realmente buscaba.

Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
pasar item del combobox a un listbox exequielmatias1 Varios 1 15-06-2014 08:21:20
index de item en listbox rogger .NET 2 22-04-2009 19:06:34
listbox con item repetidos DM2005 Varios 9 07-07-2006 16:18:02
Encontrar un Item en un ListBox esocrates Varios 8 29-04-2006 00:34:12
añadir item a listbox Cosgaya Varios 1 10-06-2005 01:33:32


La franja horaria es GMT +2. Ahora son las 06:43:54.


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