Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Item selecionado en un Tlistbox (https://www.clubdelphi.com/foros/showthread.php?t=18289)

llonigualker 08-02-2005 13:37:08

Item selecionado en un Tlistbox
 
Hola a todos:

Utilizo un listbox para mostrar unos textos y el usuario final pueda elegir el que le apetezca.

Tengo una tecla habilitada (la barra espaiadora) para que el usuario al pulsarla se vaya seleccionando el siguiente y asi hasta llegar al final (tambien puede utilizar el raton)

Hasta ahí, fenomenal. Funcionaba.

Se me ocurrió cambiar el color de las filas (pares e impares) para darle mejor aparienia y el texto de los items de un color u otro segun cumplen determinadas condiciones. Cojonudo. Funcionaba.

Ahora el problema es que al pulsar la barra espaciadora no se queda nada selecionado (graficamente) pero al pulsar el raton si me remarca toda la linea del item.

Como puedo hacer para que con la tecla se quede seleccionado igual que el pinchar con el raton?

Os mando el codigo que he utilizado en la funcion drawitem:

Código:

procedure TForm1.LibrosDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
 begin

  with (Control as TListBox) do
  begin
    if Odd(Index) then
                begin
                        if libroencontra[index+1]=0 then
                        begin
                        //Canvas.Font.Style:=fsbold;
                        Canvas.Font.Color:=clblack;
                        end;
                        if (libroencontra[index+1]=1) and (librocomple[index+1]=0) then
                                begin
                                        //Canvas.Font.Style:=fsbold;
                                        Canvas.Font.Color:=clblue;
                                end
                        else
                                if (libroencontra[index+1]=1) and (librosi[index+1]=1) then
                                        begin
                                                //Canvas.Font.Style:=fsbold;
                                                Canvas.Font.Color:=clred;
                                        end
                                else
                                        if (libroencontra[index+1]=1) and (librosi[index+1]=0) then
                                                begin
                                                        //Canvas.Font.Style:=fsbold;
                                                        Canvas.Font.Color:=clgreen;
                                                end;
                        Canvas.Brush.Color:=$00EDD8C9;
                end
    else
                begin
                        if libroencontra[index+1]=0 then
                        begin
                        //Canvas.Font.Style:=fsbold;
                        Canvas.Font.Color:=clblack;
                        end;
                        if (libroencontra[index+1]=1) and (librocomple[index+1]=0) then
                                begin
                                        //Canvas.Font.Style:=fsbold;
                                        Canvas.Font.Color:=clblue;
                                end
                        else
                                if (libroencontra[index+1]=1) and (librosi[index+1]=1) then
                                        begin
                                                //Canvas.Font.Style:=fsbold;
                                                Canvas.Font.Color:=clred;
                                        end
                                else
                                        if (libroencontra[index+1]=1) and (librosi[index+1]=0) then
                                                begin
                                                        //Canvas.Font.Style:=fsbold;
                                                        Canvas.Font.Color:=clgreen;
                                                end;
                Canvas.Brush.Color:=$00F4E8DD;
                //Canvas.Brush.Color:=$00DB9175;
                end;

    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left,Rect.Top,Items[Index]);
  end;
 end;

y el codigo que antes funcionaba (graficamente) y me seleccionaba con la tecla el item

Código:

if key:=vk_space then
    begin   
        libros.itemindex:=Libros.itemindex+1;
        libros.selected[libros.itemindex]:=true;
    end;

Saludos y espero respuestas.

marcoszorrilla 08-02-2005 15:26:00

Para empezar, me puedes confirmar que realmente te funciona este parte del código:
Código Delphi [-]
 procedure TForm1.LibrosKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
 begin
 ShowMessage(IntToStr(Libros.ItemIndex));
   if key = vk_space then
     begin
         libros.itemindex:=Libros.itemindex+1;
         //libros.selected[libros.itemindex]:=true;
 {Esta propiedad es de consulta y me da error}
     end;
 end;
El código pegado tiene un error:

f key := vk_space then //aquí le sobran los :

Un Saludo.

llonigualker 08-02-2005 17:28:32

Cierto, los dos puntos sobran (error de imprenta)

Utilizo delphi 6 y lo del selected si que te lo admite.

marcoszorrilla 09-02-2005 15:30:21

Comprobado que con D7 funciona, ahora bien, no puedo compilar porque me falta LibroEncontra, puedes poner todo el código para hacer una prueba?

Un Saludo.


La franja horaria es GMT +2. Ahora son las 04:45:10.

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