![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как "отцепить" мышь от контрола ? [D7, 2000]
Ice © (2005-12-27 13:01:00)На форме два стринг грида, хочу перетащить строку из одного в другой...
В OnMouseMove первого грида пишу
if ssLeft in Shift then
begin
ReleaseCapture;
SetCapture(self.Handle);
end;CODE>
после чего управление переходит в OnMouseMove самой формы. С этим все хорошо... НО ! При этом, когда мышь двигается, в первом гриде продолжается отслеживание выделенной строки...
Как от этого избавиться ? Чтоб выделенной остовалась только та строка, которую я начал тащить ?
Leonid Troyanovsky (2005-12-28 19:12:00) [1]
> Ice (28.12.05 09:46) [3]
> Все б хорошо... Только когда у обоих гридов dragmode = dmAutomatic
> я не могу выбрать строку ни в одном из них... Сразу появляется
> значек драга...
Значит, DragMode первого (и второго) надо вернуть dmManual.
В OnMouseDown первого надо проверить выделена ли строка
и сделать Stringgrid1.BeginDrag( False, 5 {например}).
--
Regards, LVT.
Ice (2005-12-28 09:46:00) [2]
> Leonid Troyanovsky © (27.12.05 19:30) [2]
> Есть такое понятие как drag'n'drop.
> Т.е., ставим гридам dragmode = dmAutomatic и в OnDragOver
> второго пишем:
Все б хорошо... Только когда у обоих гридов dragmode = dmAutomatic я не могу выбрать строку ни в одном из них... Сразу появляется значек драга...
Leonid Troyanovsky (2005-12-27 19:30:00) [3]
> Ice (27.12.05 17:34) [1]
> Я, конечно, понимаю, вопрс архисложный... Но может, кто
> то все же знает...
Есть такое понятие как drag'n'drop.
Т.е., ставим гридам dragmode = dmAutomatic и в OnDragOver второго пишем:
procedure TForm1.StringGrid2DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Source = StringGrid1;
end;
Т.е., половина работы выполнена.
Далее осталось написать второму OnDragDrop, в котором по X, Y
определить строку, куда вставлять (MouseToCell), что вставлять
(TStringrid(Source).Row) и удалять.
Кста, у предка TStringGrid есть protected DeleteRow & MoveRow.
--
Regards, LVT.
Ice (2005-12-27 17:34:00) [4]Я, конечно, понимаю, вопрс архисложный... Но может, кто то все же знает...
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
self.Caption := inttostr(Y)
end;
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
begin
ReleaseCapture;
SetCapture(self.Handle);
end;
end;
после перехода управления в OnMouseMove самой формы, в первом гриде продолжается отслеживание и выделение строки под курсором...
Как бороться ? Что бы в гриде выделенной оставалась та строка, которую я начал перетаскивать ???