Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

Прокрутка изображения   Найти похожие ветки 

 
seregka   (2005-03-30 15:07) [0]

У меня допустим есть изображение 2032х1524
НА форме у Image я ставлю 300х300. Как мне можно мышом прокрутить изображение исходного размера в пределах этих границ.


 
@!!ex   (2005-03-30 17:36) [1]

Значица так. Объясняю. Может чего не правильно будет, не обусудь, с компонентами уже давно не работал.
И так:
Делаешь TBitMap размером 2032х1524.
Грузишь в него свою картинку.
Создаешь переменные:
BitMap:TBitMap;
XShift:integer = 0;
YShift:integer = 0;
MouseX,MouseY:integer;
На OnPaint Imag"a следующий код:
BitBlt(Image.Canvas.Handle,0,0,300,300,BitMap,XShift,YShift,SRC_COPY);
На MouseDown:
MouseX:=X;
MouseY:=Y;
На MouseUp:
MouseX:=0;
MouseY:=0;
На MouseMove:
XShift:=XShift+MouseX-X;
YShift:=YShift+MouseY-Y;
if XShift<0 then XShift:=0;
if XShift>2032-300 then XShift:=1732;
if YShift<0 then YShift:=0;
if YShift>1524-300 then YShift:=1224;
Image.Refresh;
За рабочесть кода не отвечаю, писал его без компилятора поблизости, но суть такая.


 
@!!ex   (2005-03-30 17:39) [2]

P.S. Все сообщения, естественно, относительно Image.
Если ты хочешь, чтобы мышой по картинке двигали.


 
seregka   (2005-03-30 18:08) [3]

Спасибо за ответ, но, увы, у меня не работает.
В BitBlt ругается на SRC_COPY и нужно не bitmap, a bitmap.canvas.handle.
Если оставить с этой функцией, то image весь заполняется черным цветом. Если убрать bitblt, то все нормально, но  изображение не двигается.


 
@!!ex   (2005-03-30 18:29) [4]

Ок. bitmap.canvas.handle. Это естественно. :)
SRCCOPY.
Если не будет работать, скажу еще один способ.


 
Магнитон Борыч   (2005-03-30 18:43) [5]

Есть такая штука - ScrollBox


 
@!!ex   (2005-03-30 18:56) [6]

1) Тебе же сказали - МЫШКОЙ.
2) В данном случае проблема - в отрисовке, а не в принципе перемещения.
3) У меня предвзятое отношение к MFC и плохое к VCL, большой опыт работы с ним. Понял, что это - дерьмо.
4) Проблема все из-за того, что я по памяти пишу. Отсюда ошибки типа SRC_COPY вместо SRCCOPY. :) А если там не правильно задать тип перерисовки, то черный экран в результате.


 
@!!ex   (2005-03-30 19:04) [7]

Ах да! Кстати, совсем забыл! В OnMouseMove в конце добавь:
MouseX:=X;
MouseY:=Y;


 
seregka   (2005-03-30 19:45) [8]

не-а, чего-то не хочет.
Плюс забыл впервый раз написать, что у Image нет onpaint


 
Магнитон Борыч   (2005-03-30 19:54) [9]

@!!ex  (30.03.05 18:56) [6]


 
Магнитон Борыч   (2005-03-30 19:55) [10]

> @!!ex  (30.03.05 18:56) [6]

Скажи, а ты тоже используешь TImage?


 
@!!ex   (2005-03-30 21:51) [11]

Положим, я использую MS VC++, OpenGL, WinAPI.
Ща. Так уж и быть. Поставлю Delphi и сделаю тебе рабочий пример.


 
@!!ex   (2005-03-30 22:11) [12]

Вот, короче. Рабочий код:
var
 BitMap:TBitMap;
 XShift:integer = 0;
 YShift:integer = 0;
 MouseX,MouseY:integer;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
if (MouseX<>0) and (MouseY<>0) then
 begin
  Form1.Caption:=IntToStr(-MouseX+X);
  XShift:=XShift-MouseX+X;
  YShift:=YShift-MouseY+Y;
  if XShift<0 then XShift:=0;
  if XShift>2032-300 then XShift:=1732;
  if YShift<0 then YShift:=0;
  if YShift>1524-300 then YShift:=1224;
  BitBlt(Image1.Canvas.Handle,0,0,300,300,BitMap.Canvas.Handle,XShift,YShift,SRCCOPY);
  Image1.Refresh;
  MouseX:=X;
  MouseY:=Y;
 end;
end;

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

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
MouseX:=X;
MouseY:=Y;
end;


 
@!!ex   (2005-03-30 22:13) [13]

Тьфу. еп. Убери Form1.Caption:=IntToStr(-MouseX+X);
Я его для дебага юзал.


 
Магнитон Борыч   (2005-03-31 09:26) [14]

Всё понятно, спасибо.


 
seregka   (2005-03-31 10:22) [15]

Я вставил этот код. Когда я вожу  мышом вверх\вниз\по сторонам, то ничего не происходит. Если я кликаю Image, то вылетает ошибка


 
seregka   (2005-03-31 12:10) [16]

Извиняюсь. Накосячил с image.bitmap.

Работает, но как-то странно:

двигает не в пределах 300х300, а в левом верхнем углу сверху существующей картинки накладывает картинку где-то 100-100 и показывает движение по нормальной картинке


 
@!!ex   (2005-03-31 12:39) [17]

Извени, это уже где то у тебя баги, может изменил не правильно? Сделай, код один в один как меня, посмотри работает-ли, если все будет ОК, то ищи косяк у себя. У меня все ОК.


 
seregka   (2005-03-31 13:51) [18]

bitmap:=image1.picture.bitmap???


 
@!!ex   (2005-03-31 14:05) [19]

Что такое bitmap:=image1.picture.bitmap
?
Зачем ты это делаешь?


 
seregka   (2005-03-31 16:56) [20]

Что такое bitmap:=image1.picture.bitmap
?
Зачем ты это делаешь?

---
Просто без этого не работает. На пустой bitmap он ругается.НАконец-то заработало.

и еше
XShift:=XShift-MouseX+X;
YShift:=YShift-MouseY+Y;

лучше все же x и y отнимать. А то как-то непривычно - указатель ведешь вправо, а рисуннок едет влево.

Огромное спасибо за код


 
@!!ex   (2005-03-31 21:41) [21]

1) Вообщето на OnCreate надоть в BitMap сувать рисунок.....
2) Кому как привычнее.... :)
3) Что не работало? Я накосячил или ты?


 
seregka   (2005-03-31 22:38) [22]

конечно я накосячил. Руки, знаете ли, не оттуда растут. Особенно, когда такая страшная запарка



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.036 c
6-1114857049
VVV-First
2005-04-30 14:30
2005.08.07
TClientSocket or TIdTCPClient


14-1121750288
БарЛог
2005-07-19 09:18
2005.08.07
Помогите перевести порошок =)


1-1121769566
Destroyer
2005-07-19 14:39
2005.08.07
Как вывести текст вертикально?


14-1121683826
boriskb
2005-07-18 14:50
2005.08.07
Что это?


14-1121702601
Mike Kouzmine
2005-07-18 20:03
2005.08.07
Вставай проклятьем...............





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский