Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация формы под разрешение экрана 
:(
    Опции темы
PaWeLL
Дата 24.4.2010, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Есть форма с нанесенными на неё компонентами(лейблы, дбгрид, кнопки, несколько вкладок).
Проектирую на мониторе с разрешении 1280*1024 а презентовать буду на мониторе с меньшим разрешением.
Вопрос в том, как сделать так, чтобы компоненты и сама форма автоматически подстраивались под разрешение экрана.
Не хотелось бы чтоб полформы с компонентами пришлось вытаскивать полосой прокрутки.
 
PM MAIL   Вверх
DarkProg
Дата 24.4.2010, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



В DRKB есть готовое решение.

P.S. Не ленитесь юзать поиск.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Xenag
Дата 25.4.2010, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 51
Регистрация: 6.3.2010

Репутация: нет
Всего: нет



Ну вообще-то в дельфи есть уже готовое решение
И довольно простое
ScaleBy
Вот хорошее видео, демонстрируещее, как это работает:
http://codegearguru.com/video/020/ScaleBy.html
PM   Вверх
PaWeLL
Дата 25.4.2010, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Цитата(DarkProg @ 24.4.2010,  22:38)
В DRKB есть готовое решение.

P.S. Не ленитесь юзать поиск.

Я так понял, Вы имели в виду это решение

Код

procedure AdjustResolution(oForm:TForm);   
var  
  iPercentage:integer;   
begin  
  if Screen.Width > 640 then  
  begin  
    iPercentage:=Round(((Screen.Width-640)/640)*100)+100;   
    oForm.ScaleBy(iPercentage,100);   
  end;   
end;


Попробовал вставить его в свою прогу. Получилось вот так (код, не относящийся к делу опущен):

Код

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Buttons, XPMan, ExtCtrls, Grids, DBGrids,
  Mask, DB, DBTables, DBCtrls, Menus;

type


    procedure FormCreate(Sender: TObject);
    procedure AdjustResolution(oForm:TForm);
    
    

  private
    { Private declarations }
  public
    { Public declarations }
  end;



var
  Form3: TForm3;
  wid:string;

implementation


{$R *.dfm}


procedure TForm3.FormCreate(Sender: TObject);
begin
AdjustResolution(oForm:TForm);
end;

procedure AdjustResolution(oForm:TForm);
var
  iPercentage:integer;
begin  
  if Screen.Width > 1280 then
  begin  
    iPercentage:=Round(((Screen.Width-1280)/1280)*100)+100;   
    oForm.ScaleBy(iPercentage,100);   
  end;   
end;


end.


В итоге получаю следующие сообщения:
[Error] Unit3.pas(383): Undeclared identifier: 'oForm'
[Error] Unit3.pas(383): Statement expected, but expression of type 'Class reference' found
[Error] Unit3.pas(141): Unsatisfied forward or external declaration: 'TForm3.AdjustResolution'
[Fatal Error] Project1.dpr(8): Could not compile used unit 'Unit3.pas'

Прошу помочь разобраться.  smile 


Это сообщение отредактировал(а) PaWeLL - 25.4.2010, 00:53
PM MAIL   Вверх
kuzyara
Дата 25.4.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 13.11.2006

Репутация: нет
Всего: 1



компилятор тебе подсказал сказал заявил , что не знает "oForm".
объясни ему что ты имел ввиду, когда ты это писал копировал.

может быть ОФорм - это текущая форма у автора кода?

найди взаимопонимание с компилятором, почувствуй его... станьте единым целым... (с)Сенсей
--------------------
подпись
PM MAIL   Вверх
Alexeis
Дата 25.4.2010, 12:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Код

procedure TForm3.FormCreate(Sender: TObject);
begin
AdjustResolution(oForm:TForm);
end;

Код

procedure TForm3.FormCreate(Sender: TObject);
begin
AdjustResolution(Self);
end;




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
PaWeLL
Дата 25.4.2010, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Alexeis, не получается. :(

[Error] Unit3.pas(145): Unsatisfied forward or external declaration: 'TForm3.AdjustResolution'
PM MAIL   Вверх
Alexeis
Дата 25.4.2010, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



PaWeLL, функция AdjustResolution(oForm:TForm); определена ниже чем вызывается. Поменять местами реализацию AdjustResolution и FormCreate



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
PaWeLL
Дата 11.5.2010, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Запустил все-таки. Правда ничего не происходит. При запуске проги в меньшем разрешении форма не масштабируется. :(

Это сообщение отредактировал(а) PaWeLL - 11.5.2010, 22:33
PM MAIL   Вверх
Keeper89
Дата 12.5.2010, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Я обычно использую для этого TGridPanel smile


--------------------
PM MAIL WWW   Вверх
bems
Дата 12.5.2010, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



PaWeLL, у тебя еще и метод объявлен, но не реализован (реализация стоит отдельной процедурой, а не методом формы)


--------------------
Обижено школьников: 8
PM MAIL   Вверх
PaWeLL
Дата 27.5.2010, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Вопрос все еще в силе.
Нужно как-то отмасштабировать форму с компонентами, созданную в 1280*1024 по меньшее разрешение - 1024*768
Ничего не помогает. smile 

Это сообщение отредактировал(а) PaWeLL - 27.5.2010, 16:44
PM MAIL   Вверх
Piroksen
Дата 31.5.2010, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.5.2010

Репутация: нет
Всего: нет



Код

implementation

const
  ScreenWidth: LongInt = 800; {Я разрабатывал мою форму в режиме 800x600.}
  ScreenHeight: LongInt = 600;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  scaled := true;
  if (screen.width <> ScreenWidth) then
  begin
    height := longint(height) * longint(screen.height) div ScreenHeight;
    width := longint(width) * longint(screen.width) div ScreenWidth;
    scaleBy(screen.width, ScreenWidth);
  end;
end;



Попробуй этот код,  мне помогло. авторство не мое нашел когда то в гугле 
PM MAIL   Вверх
Akella
Дата 1.6.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Цитата(PaWeLL @  24.4.2010,  21:49 Найти цитируемый пост)
Проектирую на мониторе с разрешении 1280*1024 а презентовать буду на мониторе с меньшим разрешением.

не хочешь изучать язык, читать смотреть, понимать, так просто напросто укажи размер формы при разработке 800х600 и всё.
PM MAIL   Вверх
БелАмор
Дата 10.6.2010, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Мой подход к решению этого вопроса:

1. Масштабируются только формы, имеющие элементы вроде гридов, мемо и т.д., которые, собственно, и меняют размер при растягивании формы. На форме обычно только один такой элемент, чаще всего - какой-нибудь грид. 
2. Форма разрабатывается исходя из минимально возможных размеров, при которых элементы ещё не налезают друг на друга, а грид имеет размер, ещё позволяющий работать.
3. В конструкторе форме устанавливаются ограничения на минимальные размеры по текущим размерам (т.е. заданным в дизайнере), т.е. форму можно увеличивать по своему усмотрению, но уменьшать меньше, чем она была в дизайнере - нельзя.
4. Для того, чтобы элементы правильно разъезжались, используются Anchors и выравнивание.
5. Настройки формы сохраняются и восстанавливаются для каждого разрешения экрана индивидуально. Т.е. при первом запуске программы на конкретном разрешении форма показывается с минимальными размерами, пользователь её растягивает под себя, и при последующих запусках с этим разрешением уже используются сохранённые настройки.

Посмотрите ещё ссылку: http://www.delphikingdom.com/asp/answer.asp?IDAnswer=56561
В частности, сообщение от 01-11-2007 14:29
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1819 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.