Ver Mensaje Individual
  #1  
Antiguo 24-11-2009
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Reputación: 19
ElDioni Va por buen camino
MultiSelect con maýusculas en DBGrid

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
//se abre el query para conectar con la bbdd
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.
Responder Con Cita