GARANTIR DESCONTO

Fórum Drag and drop em Stringgrid Será que ninguém pode me ajudar? #169633

16/07/2003

0

Galera gostaria de saber como arrasto uma linha de um stringgrid para outro stringgrid ou para um dbgrig e como arrasto uma linha de um dbgrid para um stringgrid ou para outro dbgrid usando a propriedade drag drop :?:

[]´s Lindomir

lindomir@arcosnet.com.br


Lindomir

Lindomir

Responder

Posts

16/07/2003

Jairroberto

Olá, Lindomir!

O problema é que a resposta para isso é meio complexa e está tudo no help do Delphi. Procure no help do Delphi os exemplo sobre a propriedade DragMode e sobre os eventos OnDragOver e OnDragDrop. Você verá que é bastante simples, pois os parâmetros deste eventos trazer um referência para o componente de origem (Source) do que está sendo arrastado e para o componente sobre o qual está o mouse (Sender). Os exemplos são bastante elucidativos. O mais difícil é adequar à sua necessidade específica. Veja um pequeno exemplo que inclui uma nova linha no StringGrid de destino e copia os dados da linha arrastada pelo mouse do StringGrid de origem:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure StringGrid2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure StringGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
  private
    SourceRow: Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  ACol, ARow: Integer;
begin
  with TStringGrid(Sender) do
  begin
    BeginDrag(False, 3);
    MouseToCell(X, Y, ACol, ARow);
    SourceRow := ARow;
  end;
end;

procedure TForm1.StringGrid2DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TStringGrid) and (Source <> Sender);
end;

procedure TForm1.StringGrid2DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  ACol, ARow: Integer;
begin
  TStringGrid(Sender).RowCount := TStringGrid(Sender).RowCount + 1;
  ARow := Pred(TStringGrid(Sender).RowCount);

  for ACol := 0 to Pred(TStringGrid(Source).ColCount) do
    TStringGrid(Sender).Cells[ACol, ARow] := TStringGrid(Source).Cells[ACol, SourceRow];
end;

end.


O DFM deste exemplo está assim:

object Form1: TForm1
  Left = 240
  Top = 133
  Width = 696
  Height = 480
  Caption = ´Form1´
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = ´MS Sans Serif´
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object StringGrid1: TStringGrid
    Left = 12
    Top = 16
    Width = 597
    Height = 157
    Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goTabs]
    TabOrder = 0
    OnDragDrop = StringGrid2DragDrop
    OnDragOver = StringGrid2DragOver
    OnMouseDown = StringGrid1MouseDown
  end
  object StringGrid2: TStringGrid
    Left = 12
    Top = 196
    Width = 597
    Height = 161
    TabOrder = 1
    OnDragDrop = StringGrid2DragDrop
    OnDragOver = StringGrid2DragOver
    OnMouseDown = StringGrid1MouseDown
  end
end



Um abraço,
Jair


Responder

Gostei + 0

18/07/2003

Lindomir

Muito obrigado Jair vc me ajudou bastante

[]´s Lindomir Avelar :D


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar