Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

Как "отцепить" мышь от контрола ?   Найти похожие ветки 

 
Ice   (2005-12-27 13:01) [0]

На форме два стринг грида, хочу перетащить строку из одного в другой...
В OnMouseMove первого грида пишу
 if ssLeft in Shift then
 begin
   ReleaseCapture;
   SetCapture(self.Handle);
 end;CODE>
после чего управление переходит в OnMouseMove самой формы. С этим все хорошо... НО ! При этом, когда мышь двигается, в первом гриде продолжается отслеживание выделенной строки...

Как от этого избавиться ? Чтоб выделенной остовалась только та строка, которую я начал тащить ?


 
Ice   (2005-12-27 17:34) [1]

Я, конечно, понимаю, вопрс архисложный... Но может, кто то все же знает...

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 самой формы, в первом гриде продолжается отслеживание и выделение строки под курсором...

Как бороться ? Что бы в гриде выделенной оставалась та строка, которую я начал перетаскивать ???


 
Leonid Troyanovsky ©   (2005-12-27 19:30) [2]


> 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-28 09:46) [3]


> Leonid Troyanovsky ©   (27.12.05 19:30) [2]


> Есть такое понятие как drag"n"drop.
> Т.е., ставим гридам dragmode = dmAutomatic и в OnDragOver
> второго пишем:


Все б хорошо... Только когда у обоих гридов dragmode = dmAutomatic я не могу выбрать строку ни в одном из них... Сразу появляется значек драга...


 
Leonid Troyanovsky ©   (2005-12-28 19:12) [4]


> Ice   (28.12.05 09:46) [3]

> Все б хорошо... Только когда у обоих гридов dragmode = dmAutomatic
> я не могу выбрать строку ни в одном из них... Сразу появляется
> значек драга...


Значит, DragMode первого (и второго) надо вернуть dmManual.
В OnMouseDown первого надо проверить выделена ли строка
и сделать Stringgrid1.BeginDrag( False, 5 {например}).

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
14-1135949217
ANB
2005-12-30 16:26
2006.01.22
Какое расстояние от Туркмении до Украины по суше ?


2-1135879817
ezorcist
2005-12-29 21:10
2006.01.22
Параметры ShellExecute


2-1136301078
frEE)styler
2006-01-03 18:11
2006.01.22
Не получается вызвать процедуру!


1-1134561283
Antonn
2005-12-14 14:54
2006.01.22
Оконная тень


6-1129122090
Piero
2005-10-12 17:01
2006.01.22
ClientSocket