Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.22;
Скачать: CL | DM;

Вниз

drag&drop в stringgrid   Найти похожие ветки 

 
Stringgrid   (2011-02-14 17:01) [0]

Здравствуйте.
Подскажите как сделать drag&drop между ячейками stringgrid, если можно с примером. В интернете куча примеров с drag&drop но между разными компонентами, а между ячейками одного компонента нет.


 
sniknik ©   (2011-02-14 17:11) [1]

так между ячейками и не делается... имхо (не работаю с stringgrid-ом), делается из компонента в компонет (сам в себя если для одного), все остальное рассчитывается  - ячейка источник это текущая, ячейка приемник это та над которой мышь в момент "дропа".


 
Palladin ©   (2011-02-14 17:14) [2]

ну почему не делается, все делается


>  интернете куча примеров с drag&drop но между разными компонентами

ну и что же там написано про свойство DragMode ?


 
И. Павел ©   (2011-02-14 19:12) [3]

А можно обойтись просто методами OnMouseUp/Down:
Delphi под рукой нет, так что пишу на C++Builder, чтобы не наделать ошибок. Но отличия минимальные:

int Col, Row;

void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
     TMouseButton Button, TShiftState Shift, int X, int Y)
{
 StringGrid1->MouseToCell(X, Y, Col, Row);
}

void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender,
     TMouseButton Button, TShiftState Shift, int X, int Y)
{
 int NewCol, NewRow;
 StringGrid1->MouseToCell(X, Y, NewCol, NewRow);
 StringGrid1->Cells[NewCol][NewRow] = StringGrid1->Cells[Col][Row];
}


 
И. Павел ©   (2011-02-14 19:14) [4]


> И. Павел ©   (14.02.11 19:12) [3]

И еще нужно проверять, не произошел ли MouseUp вне StringGrid-а


 
sniknik ©   (2011-02-14 21:53) [5]

> ну почему не делается, все делается
на инплейседитор событие начала "драга" вешается?

т.е. как именно между ячейками, самому хотелось бы знать. (не из stringgrid-а в себя, с последующим расчетом ячейки, как в [1] написано, а именно из ячейки в ячейку)


 
sniknik ©   (2011-02-14 22:22) [6]

DragMode у StringGrid1 ставишь dmAutomatic
пишешь код (без учета выхода за ячейки, сделай проверки сам)
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   procedure StringGrid1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
   procedure StringGrid1DragDrop(Sender, Source: TObject; X, Y: Integer);
   procedure StringGrid1StartDrag(Sender: TObject; var DragObject: TDragObject);
 private
   XX, YY: integer;
 public
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
 Accept:= (Source = StringGrid1) and (Sender = StringGrid1);
end;

procedure TForm1.StringGrid1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
 st: string;
 P: TPoint;
 ACol, ARow: integer;
begin
 with TStringGrid(Source) do begin
   P:= ScreenToClient(Point(XX, YY));
   MouseToCell(P.X, P.Y, ACol, ARow);
   st:= Cells[ACol, ARow];
   MouseToCell(X, Y, ACol, ARow);
   Cells[ACol, ARow]:= st;
 end;
end;

procedure TForm1.StringGrid1StartDrag(Sender: TObject; var DragObject: TDragObject);
begin
 XX:= Mouse.CursorPos.X;
 YY:= Mouse.CursorPos.Y;
end;

end.

простейший пример drag&drop-а, по просьбам трудящихся в stringgrid...


 
Stringgrid   (2011-02-14 22:22) [7]

Спасибо. Код из [3] то, что мне надо.



Страницы: 1 вся ветка

Текущий архив: 2011.05.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
2-1297808037
TempUser142
2011-02-16 01:13
2011.05.22
Вызов InternetSetStatusCallback из TThread


1-1254906944
Aleks
2009-10-07 13:15
2011.05.22
Как вычислить матем.значение в Edit?


6-1237262725
alshtam
2009-03-17 07:05
2011.05.22
вопрос по Indy


1-1245744723
dmitry_12_08_73
2009-06-23 12:12
2011.05.22
Как выделить нужный файл в открываемой папке?


2-1296906585
AlexIdx
2011-02-05 14:49
2011.05.22
Биты