Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema curioso con listview (https://www.clubdelphi.com/foros/showthread.php?t=76441)

Choclito 01-11-2011 18:48:12

Problema curioso con listview
 
Buenas tardes amigos del foro, como siempre el foro una gran fuente de informacion
Antes comentarles que trabajo con delpgi 7,mdo y firebird 2.1 ,
Mi intencion es llenar un listbox con un query que muestra datos de los ambientes de una una institucion, con nro asignado entonces lo lleno en un listview en su propiedad viewstyle selecciono vslist para que me muestre como una lista, si los datos exceden las dimensiones del listview entonces los datos restantes lo registra en otra columna, lo que no puedo cambiar es el ancho de las columnas pues algunos datos se ven incompletos pues ya se tiene un ancho determinado , pero no se como cambiarlo
Como siempre espero que se haya entendido el problema y estare atento a sus respuestas amigos del foro

Casimiro Noteví 01-11-2011 18:57:11

¿Pero cual es la pregunta? y ¿cual es el problema curioso? :confused:

Choclito 01-11-2011 19:08:12

gracias por responder
 
el problema es que no se como aumentar el ancho de la lista en el listview cuando su propiedad viewstyle es vslist, pues tengo datos del query que se muestran cortados osea si deberia mostrarse:
CONTABILIDAD -->1245 ,
se muestra CONTABILIDAD --
y el resto no muestra pues tiene un ancho definido que no se como cambiar
Espero ahora se haya entendido querido amigo Casimiro

Casimiro Noteví 01-11-2011 19:15:27

Ahora sí lo he entendido :)
Voy a probar con vslist, no recuerdo haberlo usado antes.

Casimiro Noteví 01-11-2011 19:22:32

Creo que no lo he comprendido por completo, ya que he hecho una prueba y no se corta el contenido de ningún elemento.


Choclito 01-11-2011 19:41:13

continuando
 
Claro no hay problema pero si aumentas el ancho y reduces el alto del listview el tercer item tendria que formar una segunda columna,como hago pa[ra que ne muestre ademas , aumento el tamaño del font y me muestra cortada las columnas,
Seguire intentando amigo , gracias por tu comentario

Casimiro Noteví 01-11-2011 19:46:32

Cita:

Empezado por Choclito (Mensaje 417296)
... si aumentas el ancho y reduces el alto del listview el tercer item tendria que formar una segunda columna...

¿Quiéres decir que automáticamente crea una segunda columna?, ¿que no la crea, y debería crear una segunda columna?, ¿que tú quieres crear una segunda columna?...

Creo que hoy ando algo espeso, voy a descansar de ordenador un rato...

Choclito 01-11-2011 20:25:22

Nuevamente
 
bueno lo que hice es lo siguiente tengo un listview entonces le puse su propiedad aling en button , luego en su propiedad font le aumente a 16 , y reduje su alto mas o menos para que ingrese tres filas de datos ,
ahora cargo el listview con los datos de la consulta que son 6 registros, entonces al cargar en el listview los primeros 3 los registra pero con un ancho que no se como cambiar y los otros 3 registros los muestra como si hubiera generado otra columna dentro del listview.
Lo que no se es como cambiar el ancho de las columnas que se generar pues los datos los muestra cortados
Lo que quiero que se muestre es
CONTABILIDAD ===> 124545 ESTADISTICA ====>12145
GERENCIA ====>121215454 ADMINISTRACION===>454545
lo que me muestra es:
CONTABILIDAD ==.... ESTADISTICA ==.....
GERENCIA ===>....... ADMINISTRACION.....
Gracias por los comentarios

escafandra 01-11-2011 20:44:52

No veo el problema :confused:

Pon en un formulario un TListView y esto:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  ListView1.Align:= alClient;
  ListView1.ViewStyle:= vsList;
  ListView1.AddItem('CONTABILIDAD ===> 124545', nil);
  ListView1.AddItem('ESTADISTICA ====>12145', nil);
  ListView1.AddItem('GERENCIA ====>121215454', nil);
  ListView1.AddItem('ADMINISTRACION===>454545', nil);
end;

Al cambiar el tamaño del formulario cambia el ListView. En ningún momento se amputan los textos salvo cuando es mas pequeño que ellos, en cuyo caso aparece un ScrollBar.

Saludos.

Casimiro Noteví 01-11-2011 20:54:18

Pensé que era yo el que no entendía, si le pones letras grandes y lo haces estrecho... pues no cabe.
Tendrás que ponerlo más ancho o ponerle letras más pequeñas.

Choclito 01-11-2011 23:00:16

gracias por responder
 
MIl gracias por responder
la verdad que esta linea no la considere
ListView1.ViewStyle:= vsList;
lo tenia ya cambiado, gracias ya encontre como solucionarlo
Ahora bien realizar cambios me ocaciono cambios al pintar el listview
tengo el siguinte codigo para cargar al listview:
Código Delphi [-]
procedure TF_Principal.Button1Click(Sender: TObject);
var
AItem: TListItem;
begin
mdoq_listado.Close;
mdoq_listado.ParamByName('f1').AsDate:=now;
mdoq_listado.ParamByName('f2').AsDate:=now;
mdoq_listado.Open;
ListView1.Clear;
mdoq_listado.First;
while not mdoq_listado.Eof do
begin
  AItem := ListView1.Items.Add;
  aitem.Caption:=mdoq_listado.Fields[3].AsString;
  aitem.SubItems.Add(mdoq_listado.Fields[2].AsString);
 mdoq_listado.Next;
end;
//listview1.ViewStyle:=vsicon;
//ListView1.ViewStyle:=vslist;
end;
tengo la propiedad ownerdrag en true;
tengo el siguiente codigo en uno de los eventos
Código Delphi [-]
procedure TF_Principal.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
if item.SubItems[0]='C2' then
sender.Canvas.Brush.Color:=clred
else
sender.Canvas.Brush.Color:=clWindow;
end;
antes de hacer los cambios con esto del ancho de las columnas daba pues el item que tenia subiten igual a C2 me mostraba de rojo ahora no da
prove con lo siguiente:
Código Delphi [-]
procedure TF_Principal.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if item.Caption='RAYOS X--->58620' then
sender.Canvas.Brush.Color:=clred
else
sender.Canvas.Brush.Color:=clWindow;
end;
y da pero no entiendo porque no da cuando comparo con el subitem ,prove mostrando el subitem en el evento onclick y me muestra el dato
Cual seria el problema o que me falta para que cuando compare con el subitem me cambie de color al item
LO curioso es que daba y ahora noooo, en que me puedo estar equivocando????? , comentarles tambien que inclui otro listview pero aun eso no da
Gracias por las ayudas

ecfisa 02-11-2011 00:15:39

Hola Choclito.

Creo entender que buscas que el valor de la propiedad Caption del Item aparezca pintado cuando el valor del SubItem cumpla determinada condición.
Si te entendí bien, entonces creo que tendrías que hacer la evaluación en el evento OnCustomDrawItem, por ejemplo:

Código Delphi [-]
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Item.SubItems[0] = 'C2' then
  begin
    Sender.Canvas.Brush.Color:= clRed;
    Sender.Canvas.Font.Color:= clWhite;
  end;
end;


Un saludo.

Choclito 02-11-2011 00:43:22

Gracias
 
muchas gracias amigo por el post, lo probare pero cuan desesperado estaba lo cambie con un dbgrid
Mi intencion es hacer un sistema de colas y es por eso que queria mostrar los datos en un tlistview en la parte inferior del formulario, lo cambie con un dbgrid que lo puse al extremo derecho del formulario
NUevamente preguntando a los amigos de foro:
MI pregunta es: puedo cambiar los colores de las celdas de un dbgird desde un boton ?? que codigo tendria que colocar
Bueno tengo lo siguiente::
Código Delphi [-]
procedure TF_Egreso_Med_Q.DBGrid2DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
if column.Index=2 then
begin
    if gdFocused in State then begin
    DBGrid2.Canvas.Brush.Color := clyellow;    // Color que quieras que tenga el fondo si la línea tiene foco;
      DBGrid2.Canvas.Font.Color  := clblue;   // Color del Font que quieras que tenga si la línea tiene foco
        dbgrid2.Canvas.Font.Size := 10;
        dbgrid2.Canvas.Font.Style := [fsBold]

    end;
    end;
      if MDOQ_Med_Q.FieldByName('valor').AsString='N' then
  begin
  dbgrid2.Canvas.Brush.Color:=clred;
  dbgrid2.Canvas.Font.Color:=clblack;
  end;
     if MDOQ_Med_Q.FieldByName('valor').AsString='F' then
  begin
  dbgrid2.Canvas.Brush.Color:=clyellow;
  dbgrid2.Canvas.Font.Color:=clblack;
  end;
  dbgrid2.DefaultDrawColumnCell(Rect,Datacol,Column,State);

end;
pero esto es un evento del dbgrid
lo que quisiera es desde un boton o un event en el form
Espero haber sido entendido y estare atento a sus comentarios amigos del foro
PD:era necesario abrir otro post???

ecfisa 02-11-2011 00:57:43

Hola Choclito.

Cita:

PD:era necesario abrir otro post???
Si no te incomoda hacerlo, te lo agradecería. De ese modo es más fácil que otros compañeros encuentren respuesta a un problema similar cuando realizen las búsquedas.

Un saludo. :)

Choclito 02-11-2011 01:25:25

mil disculpas
 
Disculpas por la torpeza, lo hare inmediatamente


La franja horaria es GMT +2. Ahora son las 03:31:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi