Delphi 3. Библиотека программиста


Отображение перетаскиваемого объекта в Delphi2 и 3


При перетаскивании объекта из элемента TreeView или ListView вместе с курсором мыши перемещается полупрозрачное изображение объекта. Этот замечательный визуальный признак существует до тех пор, пока изображение не выйдет за пределы элемента. В этот момент — раз! — изображение исчезает и не появляется до тех пор, пока мышь снова не вернется в исходный элемент или не попадет в другой элемент ListView или TreeView.

Почему это происходит? В число факторов, определяющих поведение элемента, входит свойство ControlStyle. В Delphi версий 2 и 3 появился новый стандартный флаг csDisplayDragImage. Если csDisplayDragImage входит в ControlStyle, перетаскиваемое изображение выводится над элементом. В противном случае оно исчезает до тех пор, пока курсор не доберется до более «дружественной» территории. К сожалению, для большинства элементов значение ControlStyle, принятое по умолчанию, не включает флага csDisplayDragImage. Следовательно, если вы хотите, чтобы изображение не пропадало при перемещении, придется настроить все формы вашего проекта и все элементы, находящиеся на них, чтобы в их свойстве ControlStyle присутствовал флаг csDisplayDragImage.

В листинге 9.18 приведена процедура EnableDisplayDragImage, исправляющая значение ControlStyle самого элемента, его дочерних элементов, «внуков» и т. д.

Чтобы каждый элемент формы поддерживал отображение перетаскиваемого объекта, включите в обработчик FormCreate формы следующую строку:

EnableDisplayDragImage( Self, True );

Если ваша программа создает элементы динамически, не забудьте вызвать EnableDisplayDragImage и для них.

Листинг 9.18. Модуль ENABDISP.PAS

unit EnabDisp; interface uses Controls; procedure EnableDisplayDragImage( Control: TControl; ChildrenToo: Boolean ); implementation procedure EnableDisplayDragImage( Control: TControl; ChildrenToo: Boolean ); var Index: Integer; begin with Control do ControlStyle := ControlStyle + [ csDisplayDragImage ]; if ChildrenToo and ( Control is TWinControl ) then with TWinControl( Control ) do for Index := 0 to ControlCount - 1 do begin EnableDisplayDragImage( Controls[ Index ], ChildrenToo ); end; end; end.

Предыдущая
Содержание
Следующая




Начало  Назад  Вперед



Книжный магазин