Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2011, 20:08   #1
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию Скроллинг ScrollBox. Интересная идея.

Идея такая: как сделать скроллинг в Scrollboxe но с таким условием: чтобы скроллировать при удержании левой кнопки мыши, т.е. двигаем мышью горизонтально - едет горизонтальный скроллер, вертикальный - значит соответствующий ему. А если диагональное направление, то одновременно оба скроллера в соответствии с движениями мыши, т.е. движение мышью от одного края ScrollBoxa до другого прокручивает скроллер (или скроллеры) полностью. И так в любых направлениях. Движения нужны гладкие без рывков.

P.S.-> В Scroolboxe лежит Image.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 31.05.2011, 16:47   #2
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Image1: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    press: boolean;
    sx,sy: integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
press := true;
sx := x;
sy := y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if press then
 begin
  ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Position + sx - x;
  ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position + sy - y;
  sx := x;
  sy := y;
 end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
press := false;
end;

end.
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 31.05.2011, 18:41   #3
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Спасибо Swarog! Как раз то, что мне и нужно!
Только две маленькие проблемы:
1) Как инвертировать направление скроллинга?
2) Как уменьшить мерцание изображения при скроллинге?
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 31.05.2011, 19:16   #4
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

С дрожанием скроллеров сам разобрался, но проблема мерцания изображения остается:
Код:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg;

type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Image1: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
press: boolean;
sx,sy: integer;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
press := true;
sx := x;
sy := y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if press then
begin
ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Position + sx - x;
ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position + sy - y;
//sx := x; - эти две строки убрал ))
//sy := y;

end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
press := false;
end;

end.
даешь высокое напряжение

Последний раз редактировалось Vova777; 31.05.2011 в 19:34.
Vova777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
есть интересная идея, нужен художник Gigabit Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 01.07.2009 17:19
скроллинг Chief Паскаль, Turbo Pascal, PascalABC.NET 1 09.06.2009 19:13
Есть интересная идея. Помогите создать игру для мобильника Romez Общие вопросы по Java, Java SE, Kotlin 3 14.05.2008 12:14
скроллинг kl45gp JavaScript, Ajax 0 24.03.2008 23:29
ScrollBox Mickle Помощь студентам 1 31.03.2007 14:10