Конференция "Основная" » перемещение содержимого ScrollBox
 
  • San1 (13.03.08 14:05) [0]
    Здравствуйте! Буду признателен за помощь.
    Мне необходимо прокручивать содержимое скролбокса перетаскиванием содержимого зажатой клавишой мышки (пример такой реализации - программа InfarView).

    Есть два варианта решения  (которые я нашел):

    1 вариант. Программное изменение свойства тор и left у вложенного в скролбокс компонента:
    procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    SX := X;  // X start co-ordinate
    SY := Y;  // Y start co-ordinate
    end;

    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);

    var NX: Integer;
      NY: Integer;
    begin

    if not (ssLeft in Shift) then
    Exit;

    NX := Image1.Left + X - SX;
    NY := Image1.Top + Y - SY;

    if (NX < 0) and (NX > LX) then
    Image1.Left := NX;

    if (NY < 0) and (NY > LY) then
    Image1.Top := NY;

    end;

    Но в результате этого автоматичечки изменяются диапазоны полос прокруток(range), что в моем случае неприемлемо.

    2 вариант. Программного изменения свойства positions у скролбаров, как раз то что мне нужно:

    procedure TMineScrollPole.MouseDownInPole(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
    if Button<>mbMiddle then Exit;
    FOldX:=X; FOldY:=Y;

    end;

    procedure TMineScrollPole.MouseMoveInPole(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin

    if not (ssMiddle in Shift) then Exit;

    HorzScrollBar.Position:=HorzScrollBar.Position+(FOldX-X); FOldX:=X;
    VertScrollBar.Position:=VertScrollBar.Position+(FOldY-Y); FOldY:=Y;

    end;

    Все работает, но возникает проблемма с тем, что скролы при перетаскивании начинают дико дрожать. Подскажите пожалуйста как от этого избавиться.
  • {RASkov} © (13.03.08 14:53) [1]
  • San1 (13.03.08 15:00) [2]
    Спамить больше не буду.
    Спасибо за пример, буду разбираться.

    Путь решения примерно ясен. Т.е., собрать новый компонент из ТPaintBox и два TScrollControls, получиться некое подобие TScrollBox, только меньше ресурсов ест.
 
Конференция "Основная" » перемещение содержимого ScrollBox
Есть новые Нет новых   [134484   +45][b:0][p:0]