Ver Mensaje Individual
  #4  
Antiguo 16-05-2011
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
Buenas tardes,

hace unos días deje este hilo para ver que podría hacerse para solucionar el problema que planteé y ecfisa me direccionó a un hilo en donde gluglu había comentado algo (de forma bastante completa) que podría ayudarme, como soy un poco cepa me lié bastante con la solución propuesta por gluglu, así que me puse a crear una solución alternativa, la pongo por si a alguien le viene bien y aparte por si se podría producir algún error que yo no he tenido en cuenta y alguien me lo quiere corregir, de todas formas gracias a todos por vuestro tiempo.
Aquí está lo que he hecho:

-He creado dos variables, una que se llama QueFilas y otra
FilasSelecionadas.

En el evento OnCellClick del DbGrid pongo lo siguiente:
Código Delphi [-]
procedure TFrmMenuArt.DbGridOrdenesCellClick(Column: TColumn);
begin
FilasSeleccionadas:=DBGridOrdenes.SelectedRows.Count;
QueFilas:=QueFilas+DbGridOrdenes.DataSource.DataSet.FieldByName('NOrden').AsString+';';
end;
Tengo un botón de seleccionar todos los registros del DbGrid que hace lo siguiente:
Código Delphi [-]
procedure TFrmMenuArt.Seleccionartodo1Click(Sender: TObject);
begin
DBGridOrdenes.SelectedRows.Clear;
with DBGridOrdenes.DataSource.DataSet do
  begin
    First;
    DisableControls;
    try
      while not EOF do
      begin
        DBGridOrdenes.SelectedRows.CurrentRowSelected := True;
        Next;
      end;
      filasseleccionadas:=DbGridOrdenes.DataSource.DataSet.RecordCount;
    finally
      EnableControls;
    end;
  end;
end;
En el evento On MouseDown:
Código Delphi [-]
procedure TFrmMenuArt.DbGridOrdenesMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
temp:string;
w:integer;
gc: TGridCoord;
begin
if button=MBLeft then
  begin
    if FilasSeleccionadas>1 then
      begin
        if DbGridOrdenes.SelectedRows.CurrentRowSelected then
          begin
            gc:= DbGridOrdenes.MouseCoord(x, y);
            if FilasSeleccionadas=queryordenes.RecordCount then
              begin
                seleccionartodo1click(nil);
              end
            else
              begin
                temp:='';
                for w:=1 to length(QueFilas) do
                  begin
                    if QueFilas[w]=';' then
                      begin
                        DBGridOrdenes.DataSource.DataSet.Locate('NOrden',temp,[lopartialkey]);
                        DbGridOrdenes.SelectedRows.CurrentRowSelected := True;
                        temp:='';
                      end
                    else
                      begin
                        temp:=temp+QueFilas[w];
                      end;
                  end;
              end;
            if (gc.X > 0) AND (gc.Y > 0) then
              begin
                DbGridOrdenes.DataSource.DataSet.MoveBy(gc.Y - THackDBGrid(DbGridOrdenes).Row);
              end;
          end;
        end;
    DbGridOrdenes.BeginDrag(false,10);
  end;
end;
Y por último en el evento OnMouseUp tengo controlada mediante la variable pulsada, en el keypreview del form, si hay alguna tecla pulsada, para este caso controlo que sea 17 que es la tecla control.
Código Delphi [-]
procedure TFrmMenuArt.DbGridOrdenesMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if pulsada<>17 then QueFilas:='';
end;

Eso es todo, como siempre espero que alguno de los maestros me diga que lo que he hecho es una aberración, pero bueno, la intención es lo que cuenta.

Saludos y gracias de nuevo.
Responder Con Cita