Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1297027776
Юрий
2011-02-07 00:29
2011.05.22
С днем рождения ! 7 февраля 2011 понедельник


15-1297078540
Bat-an
2011-02-07 14:35
2011.05.22
Надо вызвать из батника две программы одновременно


15-1296849834
Baks
2011-02-04 23:03
2011.05.22
Variants unit в Delphi 5


1-1254725450
Aleks
2009-10-05 10:50
2011.05.22
Как вывести а потом стереть текст на канве Image?


2-1297852832
thandle2
2011-02-16 13:40
2011.05.22
exceptions





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский