![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прокрутка изображения [D7, Win2k]
seregka © (2005-03-30 15:07:00)У меня допустим есть изображение 2032х1524
НА форме у Image я ставлю 300х300. Как мне можно мышом прокрутить изображение исходного размера в пределах этих границ.
seregka (2005-03-31 22:38:00) [1]конечно я накосячил. Руки, знаете ли, не оттуда растут. Особенно, когда такая страшная запарка
@!!ex (2005-03-31 21:41:00) [2]1) Вообщето на OnCreate надоть в BitMap сувать рисунок.....
2) Кому как привычнее.... :)
3) Что не работало? Я накосячил или ты?
seregka (2005-03-31 16:56:00) [3]Что такое bitmap:=image1.picture.bitmap
?
Зачем ты это делаешь?
---
Просто без этого не работает. На пустой bitmap он ругается.НАконец-то заработало.
и еше
XShift:=XShift-MouseX+X;
YShift:=YShift-MouseY+Y;
лучше все же x и y отнимать. А то как-то непривычно - указатель ведешь вправо, а рисуннок едет влево.
Огромное спасибо за код
@!!ex (2005-03-31 14:05:00) [4]Что такое bitmap:=image1.picture.bitmap
?
Зачем ты это делаешь?
seregka (2005-03-31 13:51:00) [5]bitmap:=image1.picture.bitmap???
@!!ex (2005-03-31 12:39:00) [6]Извени, это уже где то у тебя баги, может изменил не правильно? Сделай, код один в один как меня, посмотри работает-ли, если все будет ОК, то ищи косяк у себя. У меня все ОК.
seregka (2005-03-31 12:10:00) [7]Извиняюсь. Накосячил с image.bitmap.
Работает, но как-то странно:
двигает не в пределах 300х300, а в левом верхнем углу сверху существующей картинки накладывает картинку где-то 100-100 и показывает движение по нормальной картинке
seregka (2005-03-31 10:22:00) [8]Я вставил этот код. Когда я вожу мышом вверх\вниз\по сторонам, то ничего не происходит. Если я кликаю Image, то вылетает ошибка
Магнитон Борыч (2005-03-31 09:26:00) [9]Всё понятно, спасибо.
@!!ex (2005-03-30 22:13:00) [10]Тьфу. еп. Убери Form1.Caption:=IntToStr(-MouseX+X);
Я его для дебага юзал.
@!!ex (2005-03-30 22:11:00) [11]Вот, короче. Рабочий код:
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 21:51:00) [12]Положим, я использую MS VC++, OpenGL, WinAPI.
Ща. Так уж и быть. Поставлю Delphi и сделаю тебе рабочий пример.
Магнитон Борыч (2005-03-30 19:55:00) [13]> @!!ex (30.03.05 18:56) [6]
Скажи, а ты тоже используешь TImage?
Магнитон Борыч (2005-03-30 19:54:00) [14]@!!ex (30.03.05 18:56) [6]
seregka (2005-03-30 19:45:00) [15]не-а, чего-то не хочет.
Плюс забыл впервый раз написать, что у Image нет onpaint
@!!ex (2005-03-30 19:04:00) [16]Ах да! Кстати, совсем забыл! В OnMouseMove в конце добавь:
MouseX:=X;
MouseY:=Y;
@!!ex (2005-03-30 18:56:00) [17]1) Тебе же сказали - МЫШКОЙ.
2) В данном случае проблема - в отрисовке, а не в принципе перемещения.
3) У меня предвзятое отношение к MFC и плохое к VCL, большой опыт работы с ним. Понял, что это - дерьмо.
4) Проблема все из-за того, что я по памяти пишу. Отсюда ошибки типа SRC_COPY вместо SRCCOPY. :) А если там не правильно задать тип перерисовки, то черный экран в результате.
Магнитон Борыч (2005-03-30 18:43:00) [18]Есть такая штука - ScrollBox
@!!ex (2005-03-30 18:29:00) [19]Ок. bitmap.canvas.handle. Это естественно. :)
SRCCOPY.
Если не будет работать, скажу еще один способ.
seregka (2005-03-30 18:08:00) [20]Спасибо за ответ, но, увы, у меня не работает.
В BitBlt ругается на SRC_COPY и нужно не bitmap, a bitmap.canvas.handle.
Если оставить с этой функцией, то image весь заполняется черным цветом. Если убрать bitblt, то все нормально, но изображение не двигается.