Вверх ↑
Ответов: 2200
Рейтинг: 673
#1: 2015-01-20 23:05:45 ЛС | профиль | цитата
Элемент в стадии разработки.
Нужна помощь в доработки элемента.
Элемент отображает рамку изменяющую размер при перетаскивании за края и углы. В архиве приведен пример изменения размеров интерфейсных элементов.
capture_01202015_221802.png
Проблема в "мерцании" краев (правый и нижний) при перетаскивании за края и углы изменяющие кроме размера, положение элемента (Left,Top).
Для тестирования проделайте следующее (см. схему в архиве):
1. Двойным кликом по интерфейсному элементу (к примеру PaintBox-у).
2. Зажмите (левой кнопкой мыши) левый средний квадрат рамки изменения размера.
3. Подвигайте курсором, правый край "мерцает".
4. При изменении размеров правым средним квадратом такого нет.

Пробовал разные варианты изменения размеров и положения элемента, но проблему решить не получилось. Возможно нужно как то "заморозить" компонент в момент изменения позиции и размера:
#pas
190 Control.Left := tpos.x;
191 Control.Width := Control.Width + t;
чтоб не происходила перерисовка, но вот как не знаю.
Что смотреть в pas файле:

#pas
113 procedure THIFrameSize._work_doSet; // делаем элемент видимым, устанавливаем позицию

214 function THIFrameSize.onMessage; // обработка сообщений

245 WM_LBUTTONDOWN: // при клике на квадрат начинаем изменять размер элемента resize := true

226 WM_MOUSEMOVE: // посылаем позицию курсора ChangeSize(p);

145 procedure THIFrameSize.ChangeSize; // изменяем размер

197 case iRGN of // в зависимости от того за какой квадрат тягают

203 5: change := SetLeft; // в моем примере это левый средний квадрат

184 function SetLeft: boolean; // вот тут и изменяем позицию и размер

221 WM_SIZE: // а тут подгоняем квадратики (регионы) под размер элемента

Архив с элементом и схемой для тестирования

P.S. На остальное в коде не обращайте внимание: "в стадии разработки".

карма: 11

3
файлы: 2capture_01202015_221802.png [285.7KB] [1045], framesize_2015_01_28.zip [40.3KB] [865]
Голосовали:LainX, Konst, Kazbek17