Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2007, 16:05   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Drag'n'drop в Гридах

Всем привет. Что-то не получается реализовать следующую фишку.
Допустим, есть две таблицы Table1 и Table2. В них по одному полю Name.
Задача: как реализовать перетаскивание мышью записей из одной таблицы в другую? Т.е. запись добавилась во вторую таблицу и удалилась из первой.
Проблема первая: при установки в свойстве Грида DragMode = dmAutomatic - Грид вообще перестает функционировать.
В общем, с ListBox-ами такая штука у меня все получается, с Гридами - ну, никак...
Может кто-нибудь уже писал что-то подобное....
_SERGEYX_ вне форума Ответить с цитированием
Старый 05.09.2007, 16:56   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ура, получилось. Если кому интересно, вот код.. (Писал для GridEh)
Код:
var
   Form1: TForm1;
   SGC: TGridCoord;
   Znachenie: string; //это значение поля, которое перетаскиваем

implementation

{$R *.dfm}

procedure TForm1.Grid1MouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
var DG: TDBGridEh;
begin
   DG := Sender as TDBGridEh;
   SGC := DG.MouseCoord(X, Y);
   if (SGC.X > 0) and (SGC.Y > 0) then
      (Sender as TDBGridEh).BeginDrag(False);
   Znachenie := Table1NAME_KONTR.Value;
end;

procedure TForm1.Grid1DragOver(Sender, Source: TObject; X, Y: Integer;
   State: TDragState; var Accept: Boolean);
var GC: TGridCoord;
begin
   GC := (Sender as TDBGridEh).MouseCoord(X, Y);
   Accept := Source is TDBGridEh and (GC.X > 0) and (GC.Y > 0);
end;

procedure TForm1.Grid1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
   DG: TDBGridEh;
   GC: TGridCoord;
   CurRow: Integer;
begin
   DG := Sender as TDBGridEh;
   GC := DG.MouseCoord(X, Y);
   with DG.DataSource.DataSet do
   begin
      with (Source as TDBGridEh).DataSource.DataSet do
         Caption := 'Вы перетащили "' + Fields[SGC.X - 1].AsString + '"';
      DisableControls;
      CurRow := DG.Row;
      MoveBy(GC.Y - CurRow);
      Caption := Caption + ' в "' + Fields[GC.X - 1].AsString + '"';
      MoveBy(CurRow - GC.Y);
      EnableControls;
   end;
end; 

procedure TForm1.Grid2DragOver(Sender, Source: TObject; X, Y: Integer;
   State: TDragState; var Accept: Boolean);
begin
   if Znachenie <> '' then Accept := True else Accept := False;
end;

procedure TForm1.Grid2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
   Table2.Insert;
   Table2.FieldByName('name_kontr').AsString := Znachenie;
   Table2.Post;
   Table1.Delete;
   Znachenie:='';
end;

end.
Тему можно закрывать.
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag'n'Drop файла в ListBox D-Snaker Компоненты Delphi 2 07.08.2008 15:51