Главная страница
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.019 c
1-20545
nevalex
2003-07-23 13:32
2003.08.07
Параметр с несколькими файлами в названии которых есть пробелы


4-20852
Игорь
2003-06-06 00:09
2003.08.07
Изменить имя окна в панели задач?


4-20851
Andrey02
2003-06-06 09:44
2003.08.07
Функция SendMessage - посылка, принятие сообщений


1-20572
yozch_
2003-07-23 21:50
2003.08.07
String-> float с DecimalSeparator


3-20427
Spawn
2003-07-17 10:17
2003.08.07
DBGrid