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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2013, 18:13   #1
danka123
Пользователь
 
Регистрация: 26.09.2012
Сообщений: 29
По умолчанию Контейнер для Image

Всем Привет!
Есть мыслишка одна, но как это реализовать мыслишек скорее нет)
К примеру есть изображение высокого разрешения, которое прогружается в Image, но не умещается в экран.
Цель - сделать фон формы этой картинкой, что-то вроде карты, и в определенный момент зажав клавишу Mouse1 картинка сьезжала вверх-вниз-вправо-влево.

Может есть компонент, в который можно закинуть изображение и уже этим компонентом как-то рулить... или что-нибудь более простое

Заранее спасибо за мудрые советы
danka123 вне форума Ответить с цитированием
Старый 20.08.2013, 20:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ScrollBox - самое оно. В него помещай Image, и задавай ему реальный размер изображения. В Скроллбоксе появятся полосы прокрутки. Ну и собственно потом можно будет описать движения картинки при движении мышкой внутри подавая скроллбоксу сообщения о прокрутке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2013, 21:59   #3
danka123
Пользователь
 
Регистрация: 26.09.2012
Сообщений: 29
По умолчанию

Stilet, спасибо, все устраивает, только есть одно но...

если Horiz и Vert ScrollBars поставить visible = false, свойство Position просто напросто не работает. Если же они стоят в true. тогда можно через Position обращаться. Наверное такова жизнь ScrollBar


ах да, еще момент.. при пролистывании изображение дергается, но я еще с этим бьюсь, не могу до конца подогнать все.
Позже скину результат

Последний раз редактировалось danka123; 20.08.2013 в 22:01.
danka123 вне форума Ответить с цитированием
Старый 20.08.2013, 22:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Наверное такова жизнь ScrollBar
А че скроллеры так сильно мешают?
Хм... Ну задай ширину скроллбара на ширину и высоту скроллов больше, чтоб они за пределы формы вылезли раз глаз мозолят.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2013, 22:36   #5
danka123
Пользователь
 
Регистрация: 26.09.2012
Сообщений: 29
По умолчанию

Да глаз мозолят скроллы. без них и вид эстетичнее, особенно в данном случае, когда только картинка на экране, и когда их нет, за них не потянешь.

а с подергиванием ничего вроде не сделать, это убогость стандартного Image.
поставил sImage (из AlphaControls) еще более убогим оказался.

Вложением кинуть не получается, картинка большая, поэтому вот ссылка
http://www.sendspace.com/file/0m3xp1
danka123 вне форума Ответить с цитированием
Старый 20.08.2013, 23:36   #6
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

А зачем TImage нужен, если есть стандартный TBitmap. Загрузили в него картинку и отрисовывайте нужные части в нужных местах. При нажатой мышке пересчитываете регион извлечения части картинки. И мерцания нет, если не будете перерисовывать слишком часто и без необходимости.
ReportCube вне форума Ответить с цитированием
Старый 21.08.2013, 00:06   #7
danka123
Пользователь
 
Регистрация: 26.09.2012
Сообщений: 29
По умолчанию

скачайте, посмотрите мой пример, поидее он не должен ведь дергаться, он ведь загружен уже, просто вне зоны ScrollBox'a
Код:
var
  Form1: TForm1;
  bb:boolean;

  StartX, startY:integer;

  EndX, EndY:Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
    Image1.Picture.LoadFromFile('earth.jpg');
    bb := false;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
     if bb then
     begin
     EndX := StartX - x;
     EndY := startY - y;

     if EndX > 0 then
     ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Position+3 else
     ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Position-3;

     if EndY > 0 then
     ScrollBox1.VertScrollBar.Position :=  ScrollBox1.VertScrollBar.Position+3 else
     ScrollBox1.VertScrollBar.Position :=  ScrollBox1.VertScrollBar.Position-3;
    end;

end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    bb :=True;
    StartX := x;
    startY := y;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    StartX := x;
    startY := y;
    bb:=false;
end;

end.
danka123 вне форума Ответить с цитированием
Старый 21.08.2013, 08:28   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отойду от темы с предложением компонента, заменяющего Имедж: http://www.programmersforum.ru/showthread.php?t=104883
Делал когда-то для себя. Там и прокрутка, и масштабирование без дерганья.
Да и форматов понимает чуть больше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прозрачный фон для Image Randy.Mandy Компоненты Delphi 1 21.02.2012 00:49
для Image назначить функции MediaPlayer SashaKrugliak Общие вопросы Delphi 3 13.10.2011 16:45
Контейнер для картинок Rebel123 Общие вопросы Delphi 3 19.06.2009 13:56
Alpha Blend для Image, возможно? Лукманов Александр Мультимедиа в Delphi 5 24.05.2009 20:59
Возможно ли сделать рабочий Transparent для Image, созданной на динамической форме2, для формы1. Лукманов Александр Мультимедиа в Delphi 3 27.04.2009 14:12