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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2011, 12:52   #1
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию Масштабирование

В компоненте Image нарисован некий рисунок с помощью метода Canvas, как можно сделать, чтобы при вращении колесика изменялся масштаб рисунка, а не размеры Image. И как сделать чтобы при нажатой кнопке мыши можно было перетаскивать рисунок в компоненте, а не сам компонент Image?
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 20.02.2011, 13:05   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А почему бы не перетаскивать и не масштабировать сам компонент?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.02.2011, 13:06   #3
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

помести имадже на панел, у панел отключи скролы, и увиличиваи именно едо размер
ефект будит как маштабирование

вес код вложи врушную, потом заиди в инспектор -> события
и выбери у каждого имаиджа по 3 аналогичных события
Код:
type
  TForm1 = class(TForm)
...
procedure ImagesMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
procedure ImagesMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
procedure ImagesMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
...
procedure TForm1.ImagesMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  PresIm:=True;
  x2:=x;
  y2:=y;
end;

procedure TForm1.ImagesMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
    TImage(Sender).Parent.Left := TImage(Sender).Parent.Left - (x2 - x);
    TImage(Sender).Parent.Top := TImage(Sender).Parent.Top - (y2 - y);
end;

procedure TForm1.ImagesMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  PresIm:=False;
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 20.02.2011, 14:50   #4
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Просто если изменять размер Image это не влияет на рисунок (рисунок не BitMap а с помощью Canvas). AutoSize и Strech не изменяют его размеров вообще.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 20.02.2011, 18:13   #5
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Информация к размышлению:
Код:
procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
Image1.Width:=Round(Image1.Width*1.1);
Image1.Height:=Round(Image1.Height*1.1);
end;

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
Image1.Width:=Round(Image1.Width/1.1);
Image1.Height:=Round(Image1.Height/1.1);
end;
Вам осталась ерунда - ввести корректировку Image1.Left, Image1.Top...
asmodey1 вне форума Ответить с цитированием
Старый 20.02.2011, 19:17   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Strech не изменяют его размеров вообще.
На экране??? Да ну... Прям уж так и не изменяют?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.02.2011, 20:52   #7
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
На экране??? Да ну... Прям уж так и не изменяют?
Рисунок выведен канвой, это не битмап, чтобы его размеры менялись. )))
Колесиком менять свойства длины-ширины (масштабировать) почему-то не получается (даже когда загружен TBitMap в Image.Picture), а если поставить две кнопки ("+" и "-") то все отлично.

Ну я в целом задачу решил:
1)сохраняю область канвы в битмап-файл,
2)далее Image1.Pictire:= nil,
3)а потом в Image1.Picture загружаю этот битмап.
Только теперь можно применять свойства AutoSize и Strech.
Может это и не очень грамотно, но пока что я пришел только к такому решению. )))

-Что можно сделать, чтобы свойство Strech так сильно не искажало рисунок при масштабировании? Или можно использовать другие варианы вместо Strech?

-Как сделать перемещение обоих скроллеров в ScrollBoxe, когда нажата и удерживается кнопка мыши? (похоже на команду из автокада: "панорамирование"). Вроде навигации по рисунку.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 21.02.2011, 00:50   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

ScrollBox отключаеш оба скрола
Image1.Stretch := True;
ет увеличение
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Width := Image1.Width + 30;
Image1.Left := (ScrollBox1.Width - Image1.Width) div 2;
Image1.Height := Image1.Height + 30;
Image1.Top := (ScrollBox1.Height - Image1.Height) div 2;
end;
движение я писал выше
еффект маштабирования есть проверял

Цитата:
asmodey1 Информация к размышлению:
хорошая идея
не просто читаи посты, попробуи, а еффект на практике увидиш
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 21.02.2011, 07:35   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Вот, выдрал из старого проекта: Масштабирование Image.zip
То же самое без ScrollBox'а: Масштабирование Image (без ScrollBox).zip

Последний раз редактировалось Sibedir; 21.02.2011 в 08:23.
Sibedir вне форума Ответить с цитированием
Старый 26.02.2011, 19:46   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

вам придложили 2 варианта на словах, 2 варианта готовых залили,
а вам даже лень подставить код и проверить ефект и посмотреть что не так в проекте что б исправить
SCAD, ColorUnit,
в вариантах Sibedir надо убрать ети 2 модуля, не знаю если они нужны для чего то еще но просто увидеть ефект вы сможете
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WebBrowser - Масштабирование MyIE Общие вопросы Delphi 3 04.04.2010 19:17
Масштабирование Град Microsoft Office Excel 6 24.10.2008 09:23
масштабирование Alex_Pro Общие вопросы .NET 0 21.05.2008 18:21
масштабирование lenivec Общие вопросы Delphi 1 23.02.2008 07:07
Масштабирование Формы SERG1980 Общие вопросы Delphi 1 28.03.2007 12:28