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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2009, 15:58   #1
Fataller
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 62
По умолчанию Координаты формы при различном разрешении экрана

Здравствуйте. Необходима помощь в Delphi. Суть проблемы: я пишу приложение, и мне нужно сделать так, чтобы при разных режимах разрешения форма не меняла своего расположения на экране, т.е. находилась все время в одном и том же месте. Помогите хотя бы с горизонтальным расположением. Я задал координаты/размер в режиме 1280*800. (Left=1001 и Width= 317). Теперь для какого то произвольного режима я считаю
Код:
Form3.Left:=Round((Screen.Width)*1001/1280);
Form3.Width:=Round((Screen.Width)*317/1280);
Но при таких вычислениях форма смещается и вылезает за пределы. Где ошибка? Заранее спасибо

Последний раз редактировалось mihali4; 18.11.2010 в 11:41.
Fataller вне форума Ответить с цитированием
Старый 26.03.2009, 16:27   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Что-то вы уже "наколбасили"...
Left=1001 и Width= 317 при ширине экрана 1280...
Это где правый край формы будет? За экраном - 1001+317=1318...
Цитата:
находилась все время в одном и том же месте
В каком "одном и том же"? В центре экрана? На позиции с определенным заданным пропорциональным смещением, например, ближе к левому верхнему углу?
Сформулируйте исходное положение формы при первоначальном, конкретном разрешении экрана...

Последний раз редактировалось mihali4; 26.03.2009 в 16:31.
mihali4 вне форума Ответить с цитированием
Старый 26.03.2009, 16:41   #3
Fataller
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 62
По умолчанию

Ошибся, не ту цифру вписал в посте. Left=963. Но по видимому суть не в том. В общем я делаю программу, которая в форме над треем в Label пишет некоторую строку из массива. При помощи компонента таймер эти строки меняются случайным образом. И, соответственно, из-за того, что эти строки имеют различную длинну, меняются и габариты формы. Я попытался это реализовать так.
Код:
procedure TForm4.Timer1Timer(Sender: TObject);
begin
Form3.Left:=Round((Screen.Width)*963/1280); Form3.Width:=Round((Screen.Width)*317/1280);
Rand_of_str(mass_of_dates,numb_of_str);
end;

procedure Rand_of_str(mass_of_dates:array of string; numb_of_str:integer);
var
i:integer;
length_str:integer;
begin
Randomize();
i:=Random(numb_of_str);
length_str:=length(mass_of_dates[i]);
length_str:=Round((length_str)*1024/(Screen.Width));
Form3.Left:=Form3.Left-(length_str);
Form3.Width:=Form3.Width+(length_str);
Form3.Label1.Caption:=mass_of_dates[i];
end;
Я не умею программировать в Win API, поэтому приходится использовать стандартную форму. Так вот, при этом коде возникают проблемы, описанные выше. Может быть, что-то со шрифтом связанно? Вычисления координат по моему правильные. Помогите пожалуйста, необходимо

Последний раз редактировалось mihali4; 18.11.2010 в 11:42.
Fataller вне форума Ответить с цитированием
Старый 27.03.2009, 12:05   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

При создании формы указывайте процент от разрешения экрана для левого края и верхнего края формы
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 form1.Left:=round(0.3*screen.Width);
 form1.Top:=round(0.5*screen.Height);
end;
SERG1980 вне форума Ответить с цитированием
Старый 27.03.2009, 12:44   #5
Fataller
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 62
По умолчанию

Что-то я не совсем понял вашу мысль. Поясните пожалуйста зачем, и где править остальной код?
Fataller вне форума Ответить с цитированием
Старый 27.03.2009, 13:02   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Вот юнит который делает масштабиорвание формы в зависимости от разрешения экрана
Добавляете его в ваш проект в раздел Uses
а вызываете процедуру ScaleForm в событии OnCreate вашей формы

Код:
Uses Scale;
........
procedure TForm1.FormCreate(Sender: TObject);
begin
  ScaleForm(Form1);
Вложения
Тип файла: zip scale.zip (729 байт, 18 просмотров)
SERG1980 вне форума Ответить с цитированием
Старый 27.03.2009, 13:36   #7
Fataller
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 62
По умолчанию

Отредактировал координаты в юните, чуть чуть смещается все равно. Код где-нибудь нужно править? Может дадите мне ICQ, я вам там напишу (простите за оффтоп)

Последний раз редактировалось Fataller; 27.03.2009 в 13:51.
Fataller вне форума Ответить с цитированием
Старый 27.03.2009, 14:35   #8
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Fataller Посмотреть сообщение
Отредактировал координаты в юните, чуть чуть смещается все равно. Код где-нибудь нужно править? Может дадите мне ICQ, я вам там напишу (простите за оффтоп)
У меня нет аськи (инет на работе и такие вещи нам запрещают ставить) Если хотите пишите в личные сообщения
SERG1980 вне форума Ответить с цитированием
Старый 27.03.2009, 16:20   #9
Fataller
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 62
По умолчанию

Вот архив с юнитами. Там только, те которые имеют отношение к моей проблеме. Если нужно могу скинуть остальные
Вложения
Тип файла: rar Units.rar (1.4 Кб, 21 просмотров)
Fataller вне форума Ответить с цитированием
Старый 27.03.2009, 20:38   #10
Niarb
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 38
По умолчанию

...дело не в шрифтах в грубейшей ошибке, как я понял,
Цитата:
length_str:=length(mass_of_dates[i]);
length_str:=Round((length_str)*1024/(Screen.Width));
Form3.Left:=Form3.Left-(length_str);
...Length(s: string) - определяет количество символов в строке, но никак не её длинну...
...нужно использовать
Код:
length_str:=Form3.Canvas.TextWidth(mass_of_dates[i])
- что и является длинной строки в пикселах

а потом уже и Left:=Screen.Width-length_str;
Чем меньше вы знаете, тем больше я ценен как специалист...
Niarb вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TСhart, клик мыши и координаты XY, Определение координат оси при клике мыши Aravild Компоненты Delphi 1 31.01.2009 16:28
при запуске Internet Explorer внизу на пол-экрана выскакивает панель irenaspb Безопасность, Шифрование 3 09.11.2008 20:48
Обновление заданной области экрана при нажатии клавиши Jack Torrance Win Api 3 26.05.2008 10:57
как сделать так что при изменении разрешения экрана программа работала... Victor[famas] Общие вопросы Delphi 7 13.02.2008 12:48
Координаты мышки НЕ относительно формы Nowichok Общие вопросы Delphi 2 27.02.2007 17:03