четверг, 23 января 2014 г.

Перемещение компонентов runtime

Я уже писал как-то о том как создавалась диспетчерская программа. Для мобильности в ней предусмотрена механизмы для перемещения компонентов во время работы программы.

Сначала я сделал так:

Создал процедуры MouseMoveMain, MouseUpMain и MouseDownMain отвечающие за перемещение. После добавления нового компонента я в object inspector-е выбираю нужные мне события.


Время шло, программа ширилась и ручная правка мне надоела...
Во общем сегодня сел и переделал я все вот так (пример привожу для всех компонентов StaticText расположенных на форме):

var i : Integer;
begin
for i := 0 to ControlCount - 1 do
if Controls[i] is TStaticText
then
  begin
    (Controls[i] as TStaticText).OnMouseDown :=  StaticTextMainDown;
    (Controls[i] as TStaticText).OnMouseMove :=  StaticTextMainMove;
    (Controls[i] as TStaticText).OnMouseUp     :=  StaticTextMainUp;
  end;
end;
И опять, как вы видите, ничего сложного нет.
Перемещение работает с зажатой клавишей Ctrl.

Вот пример с исходным кодом.

http://dfiles.ru/files/y1swlrt9g

Комментариев нет:

Отправить комментарий