Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.112 c