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

Вниз

Drag&Drop with my Image   Найти похожие ветки 

 
Fiend ©   (2003-07-23 15:24) [0]

Здрасте Уважаемые!

понадобилось мне сделать перетаскивание элеменотов окна способом Drag&Drop. Сделалось. Но вот потом у пользователя появилась мечта видеть во время перетаскивания объекта евоенное изображение. Нашёл пример - сделал. Но есть казус: изображение показывается только над теми контролами, у которых в стиле присутствует csDisplayDragImage.

У всех контролов его нет, потому надо программно устанавливать. И как то мне не очень нравится технология. у меня просто очень много окон в программе и над любым из них может происходить перетаскивание. Это что же в каждом окне, например при его создании, всем контролам менять стиль? как то некрасиво.
Может есть что то более изящьное?

Подскажите пожалуйста!!!


 
Набережных С. ©   (2003-07-23 19:24) [1]

На вскидку:

TImgDragObject = class(TDragObjectEx)
private
function GetControlAtMousePos: TControl;
protected
procedure WndProc(var Msg: TMessage); override;
end;

function TImgDragObject.GetControlAtMousePos: TControl;
var
P: TPoint;
Wnd: HWND;
WinControl: TWinControl;
begin
Result:=nil;
GetCursorPos(P);
Wnd:=WindowFromPoint(P);
if Wnd <> 0 then
begin
WinControl:=FindControl(Wnd);
if WinControl <> nil then
begin
P:=WinControl.ScreenToClient(P);
Result:=WinControl.ControlAtPos(P, true, false);
if Result = nil then Result:=WinControl;
end;
end;
end;

procedure TImgDragObject.WndProc(var Msg: TMessage);
var
Control: TControl;
Stl: TControlStyle;
begin
Control:=GetControlAtMousePos;
try
if Control <> nil then
begin
Stl:=Control.ControlStyle;
Control.ControlStyle:=Stl + [csDisplayDragImage];
end;
inherited;
finally
if Control <> nil then Control.ControlStyle:=Stl;
end;
end;

Тестируй и дорабатывай сам.


 
Набережных С. ©   (2003-07-23 19:30) [2]

Да, и в WndProc можно , пожалуй, добавить провеку на WM_MOUSEMOVE и если не оно, то просто inherited



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

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

Наверх




Память: 0.47 MB
Время: 0.017 c
14-20806
alxx
2003-07-21 17:25
2003.08.07
Относительно авторских прав...


14-20677
DeScriptor
2003-07-21 03:41
2003.08.07
Изобилие ресурсов в откомпилированном exe шнике


3-20458
abc
2003-07-15 18:03
2003.08.07
как Вы синхронизируете данные принескольких клиентах?


7-20830
Insider
2003-05-25 08:37
2003.08.07
Свой пункт в меню в таскбаре.


1-20620
clim
2003-07-24 16:58
2003.08.07
timer