Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Масштабирование TImage на форме: Stretch/Proportional/AutoSize etc  (Прочитано 9319 раз)
0 Пользователей и 1 Гость смотрят эту тему.
malor
Опытный

ru
Offline Offline

« : 20-08-2011 07:04 » 

Если использовать вот такой вариант:
Код: (Delphi)
const pathImage    = 'D:\Image.jpg';
var OnLoad: boolean = true;

procedure TForm2.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
var
  ScaleForm: Double;
begin

  if OnLoad then
  begin
    if Assigned(Image1.Picture) then
    begin
      NewWidth := Image1.Picture.Width;
      NewHeight := Image1.Picture.Height;
    end;
    OnLoad := false;
    Exit;
  end;

  ScaleForm := NewWidth / NewHeight;
  if ScaleForm > Scale then
  begin
    NewHeight := Trunc(NewWidth / Scale);
  end
  else
  begin
    NewWidth := Trunc(Scale * NewHeight);
  end;


end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  if (FileExists(pathImage)) then
    Image1.Picture.LoadFromFile(pathImage);

  Scale := Image1.Picture.Width / Image1.Picture.Height;
end;
Свойства TImage;


То при запуске программы вид:


Если попробовать прижать мышью заголовок формы и оттащить окно (можно еще так: мышку поместить в угол формы, собираясь изменить размер и при прикосновении произойдет аналогичное), то сразу станет так:

вот это как раз то, что и хотелось бы получить - именно такой вид. Некий рефреш происходит?
Но каким образом сделать с самого начала подобное растяжение по всему пространству в форме?

Delphi XE

* ScaleProject.zip (107.38 Кб - загружено 804 раз.)
Записан
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 20-08-2011 09:19 » 

А если картинка больше формы, то что получается?
При входе в FormCanResize если OnLoad установлен (т.е. картинка только что загружена) то устанавливаются размеры по размерам картинки и происходит выход из процедуры.  Так что Exit здесь явно лишний.
Записан
malor
Опытный

ru
Offline Offline

« Ответ #2 : 20-08-2011 09:37 » new

B>>А если картинка больше формы, то что получается?

Картинка и так больше формы, если смотреть на форму как она выглядит при дизайне:


B>>При входе в FormCanResize если OnLoad установлен (т.е. картинка только что загружена) то устанавливаются
B>>размеры по размерам картинки и происходит выход из процедуры.  Так что Exit здесь явно лишний.

Почему Exit лишний? Установились размеры, зачем дальше что-то выполнять в коде процедуры FormCanResize().
Записан
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 20-08-2011 12:25 » 

1. Вид в DesignTime не всегда совпадает с видом в RealTime. Кстати достаточно посмотреть на приложенные скрины.
2. Применение конструкции с Exit - ничем не оправдано, логичнее применить следующую конструкцию:
Код: (Delphi)
If OnLoad
  then
    begin
      If Assigned...
      OnLoad:=False
    end
  else
    begin ... end
3. Кстати, что насчёт параметра Resize? Почему ему не задаётся значение? Не он ли определяет изменение?
« Последнее редактирование: 20-08-2011 13:07 от RXL » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines