На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Компонент ATImageBox (TScrollBox+TImage)
    Хочу использовать ваш компонент (уж больно мне понравилось то, что я увидел в демке), однако есть проблемка. Начну с начала.
    Я пишу программу, подобную на графический редактор. Подобную, потому что она для узких целей - с ней можно рисовать схемы оригами.
    Вобщем появилась у меня идея реализовать инструмент "Рука", как во многих редакторах.
    Обрабатывал события мыши у Image, размещённым в ScrollBox.
    Привожу часть кода, т.к. кода много.
    ExpandedWrap disabled
      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:
    ExpandedWrap disabled
        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, чтобы получилось так, как у вас, без "передрагиваний", так чтобы изображение чётко останавливалось при достижении границ?

    Пытался искать на форуме решение этой проблемы, и нашёл только эту тему, как более актуальную. Прошу прощение за поднятие старой темы.
    Буду признателен даже за совет или намёк...
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0705 ]   [ 15 queries used ]   [ Generated: 24.09.17, 01:28 GMT ]