Главная страница
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.009 c
8-1212481376
leonidus
2008-06-03 12:22
2011.05.22
Ошибка "JPEG error #41"


15-1297086003
oldman
2011-02-07 16:40
2011.05.22
Для тех кто хочет знать, какого пола их компьютер


2-1297684583
Den
2011-02-14 14:56
2011.05.22
Уменьшить размер памяти занимаемой приложением


15-1296654994
pavel_guzhanov
2011-02-02 16:56
2011.05.22
Конференция по FastReport. Может быть кого-нибудь заинтересует?


3-1259290992
Diplomat
2009-11-27 06:03
2011.05.22
Поиск заданного значения в БД