Форум: "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.039 c