![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Drag and Drop в DBGrid
9899100 © (2008-09-16 13:36:00)как в обработчике события OnDragDrop в DBGrid приемнике
определить над какой записью был курсор мыши
копался в методах грида
есть такой метод
MouseCoord(X,Y) возвращает строку и столбец под курсором мыши
но чего дальше то делать с этими данными немогу понять
всмысле как номер строки в гриде преобразовать в собственно запись таблицы :(
ибо он возвращает просто номер строки и столбца из тех что отображаются в данный момент но не номер записи и столбца таблицы
9899100 (2008-09-17 12:16:00) [1]Получилось вот таким вот образом
Конечно не ахти но тем неменее :)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
gd:TGridCoord;
implementation
{$R *.dfm}
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var tt:TGridCoord;
begin
tt:=TDBGrid(sender).MouseCoord(X,Y);
If (tt.X<>gd.X) or (tt.Y<>gd.Y) Then
Begin
gd.X:=tt.X;
gd.Y:=tt.Y;
TDBGRid(Sender).Repaint;
End;
end;
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
Var gg:TGridCoord;
begin
gg:=TDBGrid(Sender).MouseCoord(Rect.Left+1,Rect.Top+1);
if (gg.X=gd.X) and (gg.Y=gd.Y) Then
TDBGrid(sender).Canvas.Font.Color:=clRed;
TDBGrid(sender).DefaultDrawDataCell(Rect,Field,State);
end;
Jeer (2008-09-16 16:18:00) [2]
> где какие :(
Прямоугольные.
За проекцией Гаусса-Крюгера прошу на ГИС-форумы.
9899100 (2008-09-16 15:41:00) [3]Черт теперь напрочь запутался в координатах
где какие :(
жуть
9899100 (2008-09-16 14:57:00) [4]>>Vlad Oshin
Хорошая идея :)
надо попробовать
Ega23 (2008-09-16 14:54:00) [5]
> в том то и дело, что клика при EndDrag не происходит..
MouseUp происходит... :)
Vlad Oshin (2008-09-16 14:49:00) [6]в том то и дело, что клика при EndDrag не происходит..
если на EndDrag поставить закладку где сейчас стоим,
кликнуть программно где закончился драг,
запомнить чего надо,
вернуться на закладку..
Ega23 (2008-09-16 14:41:00) [7]Любой клик мыши на гриде приводит к тому, что курсор набора данных перемещается на "кликнутую" запись. Вот её ID и запоминай.
А потом на EndDrag (вроде так, делал такое лет 6-7 назад, сейчас точно не помню) уже смотри, откуда StartDrag был вызван.
9899100 (2008-09-16 14:37:00) [8]лююдиии ну подскажите что нить :)
хоть мысль какую
уже со стен штукатурка сыпеться
9899100 (2008-09-16 14:06:00) [9]или подскажите как узнать номер записи
DBGrid1.DataSource.DataSet.RecNo
расположенной в первой строке грида??
можно сделать примерно так
gd:=DBGrid2.MouseCoord(X,Y);
Dbgrid2.DataSource.DataSet.MoveBy(TDBGrid(Sender).DataSource.DataSet.RecNo+(gd.Y-1));
но вот тут надо вместо TDBGrid(Sender).DataSource.DataSet.RecNo
поставить номер записи в первой строке грида
а вот как его узнать ?? :(