Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
Выделил из своего компонента код, содержащий TScrollBox + TImage + обвязку.
Получился компонент ATImageBox: http://atorg.net.ru/files/ATImageBox.zip (290 Кб) Набор фич виден по демо. В общем-то, почти те же фичи, что и в компоненте "Image Controls" который обсуждают тут, только без "наворотов" вроде OpenGL, resampling и т.д. Только самое нужное. Зато код маленький. Позже выложу на torry.net. Прикреплённый файлATImageBox.zip (73 Кбайт, скачиваний: 1591) |
Сообщ.
#2
,
|
|
|
Без исходников компонент не относится к тематике раздела по программированию.
|
Сообщ.
#3
,
|
|
|
Smike
OK, сейчас выложу исходники. Update: выложил. |
Сообщ.
#4
,
|
|
|
Посмотрел. При использовании масштабирования такой симбиоз не годится... Изображение перемасштабируются каждый раз при скроллинге, что приводит к чудовищным тормозам на больших изображениях.
Я тоже начинал с Image + ScrollBox, но пришел к выводу, что это громоздко, неудобно и неуниверсально. Кроме этого в коде видел обработку колеса мыши и клавиатуры. Только это все не работает, если перевести фокус например на кнопку и даже если потом кликнуть на компоненте. Вывод – нет обработки получения фокуса. Если выставить флаг "сохранять позицию при масштабировании", наблюдается большое мерцание, когда появляются скроллбары. |
Сообщ.
#5
,
|
|
|
Smike
Цитата Smike @ Посмотрел. При использовании масштабирования такой симбиоз не годится... Изображение перемасштабируются каждый раз при скроллинге, что приводит к чудовищным тормозам на больших изображениях. На больших - это на каких? У меня есть 1600*1200 - вроде масштабируется мгновенно. Вот есть 7200*7200 - на нем да, тормозит. Цитата Smike @ Кроме этого в коде видел обработку колеса мыши и клавиатуры. Только это все не работает, если перевести фокус например на кнопку и даже если потом кликнуть на компоненте. Вывод – нет обработки получения фокуса. Да, надо обрабатывать OnClick. Поправил. Теперь фокусируется, клавиши/колесо работают. Цитата Smike @ Если выставить флаг "сохранять позицию при масштабировании", наблюдается большое мерцание, когда появляются скроллбары. Это надо будет поправить. |
Сообщ.
#6
,
|
|
|
Цитата AlexeyT @ На больших - это на каких? У меня есть 1600*1200 - вроде масштабируется мгновенно. Вот есть 7200*7200 - на нем да, тормозит. 2976*1952 |
Сообщ.
#7
,
|
|
|
Smike
А что предлагаете делать для такого случая? Как масштабировать. |
Сообщ.
#8
,
|
|
|
Цитата AlexeyT @ А что предлагаете делать для такого случая? Как масштабировать. В таком гибридном компоненте трудно что-то сделать. Разве что придумать какую-то хитрую отрисовку TImage. А именно отрисовывать в TImage только видимую на данный момент область компонента. Тему перенес в специальный раздел. В соответствии с правилами данного раздела прошу прикрепить исходники компонента в первом сообщении. Если не помещается, можно без исполняемого файла. |
Сообщ.
#9
,
|
|
|
интересует след вопрос а куда убралась канва как теперь рисовать на компоненте ?
|
Сообщ.
#10
,
|
|
|
Цитата AlexeyT @ Да, надо обрабатывать OnClick. Поправил. Теперь фокусируется, клавиши/колесо работают. А исправленный код есть? |
Сообщ.
#11
,
|
|
|
psp посмотри этот вариант, помоему в нем работает то что нужно тебе ...
Прикреплённый файлATImageBox_2007.10.21.zip (77.92 Кбайт, скачиваний: 2268) |
Сообщ.
#12
,
|
|
|
Цитата andrew.virus @ psp посмотри этот вариант, помоему в нем работает то что нужно тебе ... Что то этот файл не скачивается ..хотел опять скачать.. |
Сообщ.
#13
,
|
|
|
psp все нормально работает, а какая у тебя проблема возникла ...
|
Сообщ.
#14
,
|
|
|
Цитата andrew.virus @ psp все нормально работает, а какая у тебя проблема возникла ... Не распаковывается нормально... |
Сообщ.
#15
,
|
|
|
psp пишет, что внутри файл ... просмотри ее как папку и будет чудо ...
|
Сообщ.
#16
,
|
|
|
Хочу использовать ваш компонент (уж больно мне понравилось то, что я увидел в демке), однако есть проблемка. Начну с начала.
Я пишу программу, подобную на графический редактор. Подобную, потому что она для узких целей - с ней можно рисовать схемы оригами. Вобщем появилась у меня идея реализовать инструмент "Рука", как во многих редакторах. Обрабатывал события мыши у Image, размещённым в ScrollBox. Привожу часть кода, т.к. кода много. procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftstate; X, Y: integer); begin last_x := x; last_y := y; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftstate; X, Y: integer); begin ScrollBox1.ScrollBy(X-Last_x,Y-Last_y); end; Однако это приводит к тому, что изображение можно переместить как угодно, мне же нужно, чтобы оно "закреплялось" на границах, чтобы его нельзя было дальше перемещать. Пробовал добавлять в обработчик MouseMove: if ((Image1.Left>=0) and (X>Last_X)) then begin Image1.Left := 0; Last_X := X; exit; end; if ((Image1.Top>=0) and (Y>Last_Y)) then begin Image1.Top := 0; Last_Y := Y; exit; end; Проблема решилась (слева и сверху, снизу и справа похожее сделал), но при перемещении, если достигнуты края, изображение стало "подрагивать". Нашёл эту тему как решение. Установил компонент, но теперь другая проблема: изображение не перемещается после установки ImageDrag в true (по умолчанию отключено, т.к. я рисую на изображении и перемещение мне без выбранного инструмента ни к чему). Компоненту Box.Image присваиваю события мыши (Down, Move, Up). При создании формы устанавливаю значения box.Image.Width, box.Image.Height, box.Image.Picture.Bitmap.Width, box.Image.Picture.Bitmap.Height, и произвожу заливку. В принципе больше ничего такого страшного не произвожу, как мне кажется. Но после выбора инструмента перемещения само перемещение не происходит. Даже курсор не изменяется. Помогите мне, пожалуйста, как сладить с этой проблемой. Или может быть, получится обойтись без компонента? Быть может вы подскажете мне, неопытному, что следует писать в MouseDown, Move и Up, чтобы получилось так, как у вас, без "передрагиваний", так чтобы изображение чётко останавливалось при достижении границ? Пытался искать на форуме решение этой проблемы, и нашёл только эту тему, как более актуальную. Прошу прощение за поднятие старой темы. Буду признателен даже за совет или намёк... |