Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прокрутка изображения [D7, Win2k]


Страницы:   1 2

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, то все нормально, но  изображение не двигается.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо