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.