Drag and Drop JvDbGrid (dbgrid) usando multselect (dbgrid).

28/02/2018

2

Há mais de dois dias pesquisando uma maneira de usar o recurso de drag & drop com JvDBGrid (DBGrid) com a opção de multselect, sem sucesso. A situação era o seguinte: Após selecionar os registros (linhas) na grade ao soltar a tecla "ctrl" ou "shift" para poder clicar e arrastar os registros (linhas) a seleção de linhas eram desmarcadas (deselecionadas). Depois de varias tentativas encontrei uma solução simples.
Estou compartilhando para que possar ajudar mais usuários em delphi.
Não vou entrar em detalhes nós eventos OnMouseMove, OnDragOver e OnDragDrop, pois, acredito que o esses eventos devem ser ralizados deacordo com a necessidade de cada situação exigida.
Recursos usado: Delphi XE10, JvDbGrid.
Responder

Posts

28/02/2018

Pascoal Castro


procedure TFrmPro.GradeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

{
Verificar se a linha que recebeu o clique, já está selecionada ... }
if (Grade.SelectedRows.CurrentRowSelected) then begin
{
Caso o usuário mantenha a tecla ctrl pressionada permite desmarcar ... }
if (GetKeyState(VK_CONTROL) < 0) then
Grade.SelectedRows.CurrentRowSelected := False;

lblNumRegistroSelecioandos.Caption := Grade.SelectedRows.Count.ToString;

{
Abort para cancelar a função SelectedRows.Clear interna do envento MouseDown
e o evento MouseUp.
Permitindo que o usuário possa navegar entre as linha selecionada sem ter
de mater a tecla ctrl ou shift pressionada ... }

Abort;
end;

end;

procedure TFrmPro.GradeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
lblNumRegistroSelecioandos.Caption := Grade.SelectedRows.Count.ToString;
end;
Responder