Buscando por el foro una solución que me gustase para poder seleccionar varios registros en el dbgrid con la tecla shift, todo lo que he encontrado se refería a hacer un stringgrid para tener una copia paralela y poder ir pintando, o cosas por el estilo, asi que he hecho el siguiente código que público por si a alguien le sirve. no está pulido ni se si tendrá otras consecuencias pero de momento me funciona y me hace el apaño.
bueno primero tres variables globales de tipo integer que llamo pulsada, PrimerReg y UltiReg. entones en el metodo onkeydown del formulario hago lo siguiente:
Código Delphi
[-]
procedure TFrmListadoArt.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=16 then pulsada:=16;
end;
En el de keyUp lo que sigue:
Código Delphi
[-]
procedure TFrmListadoArt.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
pulsada:=0;
end;
en el FormCreate:
Código Delphi
[-]
procedure TFrmListadoArt.FormCreate(Sender: TObject);
begin
queryproduc.Active:=true;
PrimerReg:=QueryProduc.RecNo;
end;
y entonces en el onmouseup (ya que el onmousedown del dbgrid no hace nada cuando está puesto en multiselect) del dbgrid lo que sigue:
Código Delphi
[-]
procedure TFrmListadoArt.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
w:integer;
begin
if pulsada=16 then
begin
UltiReg:=queryproduc.RecNo;
DbGrid1.SelectedRows.Clear;
for w:=primerReg to ultireg do
begin
DbGrid1.DataSource.DataSet.RecNo:=w;
DbGrid1.SelectedRows.CurrentRowSelected:=true;
end;
end
else
begin
primerreg:=QueryProduc.RecNo;
end;
end;
Seguramente se podría hacer mejor o esta forma de conseguirlo no gusta porque es una chapuza, pero ahí la dejo por si a alguien le sirve.
Un saludo.