Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.012 c
1-20530
Иван Михалев
2003-07-23 15:09
2003.08.07
Как в tmemo выделенный текст загнать в тэги?


7-20833
Artur
2003-05-26 08:09
2003.08.07
Работа с системой и железом


3-20457
AlexWeb
2003-07-17 12:18
2003.08.07
Помогите с Клиент-Сервером


14-20735
Nickola2
2003-07-18 12:08
2003.08.07
Как вычислить


14-20760
Beglec
2003-07-20 23:37
2003.08.07
Интересен компонет, который прост как TMediaPlayr, но...




   Наверх