Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
6 / 6 / 0
Регистрация: 02.01.2010
Сообщений: 68
1

Определение позиции формы

10.06.2010, 18:30. Показов 7743. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как можно совершенно точно определить позицию верхнего левого угла рабочей области формы на экране? Т.е. без заголовка формы. Я думал, что можно из Height вычесть ClientHeight и получить те излишки на заголовок и нижнюю рамку, но здесь могут получиться неточности, т.к. высота заголовка и нижней рамки в разных темах могут иметь разную высоту.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2010, 18:30
Ответы с готовыми решениями:

Определение позиции формы
Здравствуйте, подскажите пожалуйста как в Deldhi можно определить позиции формы Top и Left на экране после перетаскивания окна для...

определение позиции
честно, я сначало воспользовался поиском и только потом решил написать, т.к. там ничего не нашел. Как вручную определять позицию в...

Определение позиции в поисковике.
Я тут набросал себе парсер для определения позиции сайта в google . Ну так вот возник такой вопрос. Может ли googl блокировать, банить или...

16
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
10.06.2010, 19:01 2
Свойства Top и Left Формы определяют координаты верхнего левого угла
0
Фрилансер
 Аватар для Mad_Dog
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
10.06.2010, 19:09 3
leejack, ему нужны координаты не верхнего левого угла формы, а координаты левого верхнего угла рабочей области, т.е. той, что под заголовком формы (как будто бы нет заголовка у формы...).
0
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
10.06.2010, 19:30 4
Mad_Dog, сорри...
Тогда Left остается Left'ом...
А Top равен Top+34...
Короче размер верхнего заголовка равен 34
0
6 / 6 / 0
Регистрация: 02.01.2010
Сообщений: 68
10.06.2010, 19:37  [ТС] 5
А Top равен Top+34...
Это смотря в какой теме оформления. Смотрите скриншот. Как здесь видно в Aero может и +34, а в классической явно меньше. Ну конечно можно вымерить это расстояние для classic, xp и aero basic и aero, но есть и другие темы от сторонних программ, а некоторые даже меняют масштаб экрана, например 125%, тогда заголовок увеличиться на 25% и значит опять всё придётся пересчитывать, да надо ещё и знать как проверить какой масштаб и многое др......
Изображения
 
0
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
10.06.2010, 20:10 6
uh-aleks, тогда вот так
Delphi
1
2
3
4
Vremenno:=Form1.ClientHeight;
Form1.ClientHeight:=0;
s:=Form1.Height;
Form1.ClientHeight:=Vremenno
Как теперь?
0
6 / 6 / 0
Регистрация: 02.01.2010
Сообщений: 68
10.06.2010, 20:18  [ТС] 7
Что-то я не понимаю. Зачем переменная s, если она не используется? Итогом этого кода ничего не будет, только лишь форма мигнёт.
0
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
10.06.2010, 20:25 8
uh-aleks, Да ну?...проверь сам
Напиши после
Delphi
1
ShowMessage(IntToStr(s))
s просто переменная в которую запишется размер верхней части...

А если написать это все в обработчике событий при создании формы так вообще ништяк будет...И мигания никто не увидет...
Можешь даже тему по изменять...
0
6 / 6 / 0
Регистрация: 02.01.2010
Сообщений: 68
10.06.2010, 20:31  [ТС] 9
Да это понятно она не пустая, но как дальше её использовать? Ты наверно скажешь что нужно вычесть из Height ClientHeight и получить высоту заголовка это и есть s. Но получиться не только заголовок, но и + нижняя рамка, ну конечно и её вычесть. А сколько она? Если померять, то опять получится та же история - у каждой темы своя ширина.
0
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
10.06.2010, 20:32 10
Блин так тебе, для чего надо?)) Я уже не знаю прям, что и предложить
0
6 / 6 / 0
Регистрация: 02.01.2010
Сообщений: 68
10.06.2010, 20:50  [ТС] 11
Мне нужны совершенно точные координаты этой точки, для того чтобы использовать метод Popup(x, y) для PopupMenu, а эти координаты отсчитываются именно от этой точки. А погрешность даже в 2 пикселя уже заметна и недопустима.

Добавлено через 12 минут
а эти координаты отсчитываются именно от этой точки.
Исправляю. Здесь как раз другая точка, которая уже выше заголовка.
0
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
10.06.2010, 20:52 12
Так проверь а я по Y правильно координату расчитывал? Точнее верхней части формы
0
6 / 6 / 0
Регистрация: 02.01.2010
Сообщений: 68
10.06.2010, 20:59  [ТС] 13
Так как у тебя написано я в первую очередь пробовал, но я же говорю результат получается Заголовок + нижняя рамка, а нужен только заголовок.
0
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
10.06.2010, 21:04 14
Так нижняя рамка равна тем, что слева и справа?
Эврика реализуешь надеюсь сам....
В коде сначала замеряешь значение ClientWidth
Потом изменяешь BorderStyle на bsNone и потом измеряешь опять ClientWidth
Разница деленая на 2 будет ширина нижней и боковых рамок...))) Дальше сам хотя, если хочешь могу написать...Универсальную, чтобы для всех подходила...
1
6 / 6 / 0
Регистрация: 02.01.2010
Сообщений: 68
10.06.2010, 21:43  [ТС] 15
Так нижняя рамка равна тем, что слева и справа?
Ты прав. Как я сразу то про это не догадался. Код получается не сложный, я сам позже выложу. Мало ли кому понадобиться. А тебе спасибо

Добавлено через 30 минут
Вот таким образом можно получить координаты левого верхнего угла рабочей области формы на экране
Delphi
1
2
3
4
5
6
7
8
9
10
11
var HeightBorder, HeightCaption: byte;
x, y: word;
begin
// Высота рамки
HeightBorder := (Width-ClientWidth)div 2;
// Высота заголовка
HeightCaption := Height-ClientHeight-HeightBorder;
// Положение нужной точки
x := Left+HeightBorder;
y := Top+HeightCaption;
end;
0
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 7
18.01.2016, 17:07 16
Спасибо большое создателю данной темы и всем, кто принимал участие! В итоге у меня получились Отакие функции:
Delphi
1
2
3
// Универсальные функции определения координат левого верхнего угла клиентской области окна.
function FormClientLeft(aForm:TForm):Integer; begin result:=aForm.Left+(aForm.Width-aForm.ClientWidth) div 2; end;
function FormClientTop(aForm:TForm):Integer; begin result:=aForm.Top+aForm.Height-aForm.ClientHeight-(aForm.Width-aForm.ClientWidth) div 2; end;
)))
0
Житель Земли
 Аватар для DenNik
3003 / 3012 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
18.01.2016, 17:30 17
использовать функцию ClientToScreen, которая заданную точку на КЛИЕНТСКОЙ области формы переводит в абсолютные координаты экрана. Код для демонстрации и скрины с разными темами оформления. в коде форма устанавливается в координаты 0;0 и затем отображаются координаты КЛИЕНТСКОЙ точки 0;0
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
var
  p: TPoint;
begin
  Top:= 0;
  Left:= 0;
  P:= ClientToScreen(Point(0,0));
  Label1.Caption:= 'x = ' + IntToStr(P.X) + '; y = ' + IntToStr(P.Y);
end;
Определение позиции формы
Определение позиции формы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2016, 17:30
Помогаю со студенческими работами здесь

Определение позиции курсора
Скажите какие функции использовать для того чтобы получить данную позицию курсора. Например нужны координаты точки, на которую только что...

Определение номера позиции
Даны две символьные переменные, по 4 символа каждая, в которых все символы, кроме одного, в соответствующих позициях одинаковы. Определить...

Определение позиции курсора
Здравствуйте! Задание следующего характера: написать фрагмент программы, реализующий задание: определение позиции курсора. Имеется...

Определение позиции сайта
Все уже знают, а может я такой осталый... у них помечено как "new". http://www.rambler.ru/doc/position.shtml

Определение позиции на Canvas
Доброго времени суток. Приблизился к завершению курсового проекта на Delphi... Начал отлаживать. и тут то понеслось) Хотел бы узнать:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
WebAssembly в Kubernetes
stackOverflow 03.03.2025
В современной экосистеме облачных технологий WebAssembly (Wasm) становится все более значимым компонентом, предлагая уникальный подход к выполнению кода в распределенных системах. Эта технология. . .
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) изменили подход к разработке программного обеспечения, превратив его в бесшовный процесс от написания кода до развертывания в продакшн. GitHub Actions и. . .
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Масштабные проекты с использованием Kubernetes требуют надежной системы тестирования изменений перед их внедрением в продакшн-среду. Традиционный подход с ручной проверкой Pull Request не справляется. . .
Tестирование Pull Request в Kubernetes с помощью vCluster
stackOverflow 03.03.2025
При работе с микросервисной архитектурой критически важно обеспечить качественное тестирование каждого изменения перед его слиянием в основную кодовую базу. Однако тестирование Pull Request в. . .
Использование пакета Context в Golang
bytestream 03.03.2025
Управление параллельными процессами в современных приложениях - сложная задача, особенно когда речь идет о микросервисной архитектуре и распределенных системах. Пакет context в Go - это гибкое. . .
WebAssembly и Go: Работа с DOM и обработка ошибок
bytestream 03.03.2025
WebAssembly представляет собой технологию, позволяющую запускать низкоуровневый код в браузере практически на нативной скорости. Особенно интересные возможности открываются при использовании. . .
WebAssembly и Go: Создание высокопроизводи­­тельных веб-приложений
bytestream 03.03.2025
WebAssembly - это технология, изменившая подход к созданию высокопроизводительных веб-приложений. До появления WebAssembly JavaScript оставался единственным языком программирования, который понимали. . .
Контексты в Go: отмена, тайм-ауты и распространение
bytestream 03.03.2025
В многопоточном программировании существует множество ситуаций, когда необходимо прерывать выполнение горутин или ограничивать время их работы. Отсутствие грамотного управления параллельными. . .
WebSocket в Go: создание масштабируемых real-time приложений
bytestream 03.03.2025
Веб-приложения все чаще требуют обработки данных в режиме реального времени. Традиционный подход с использованием HTTP-запросов имеет существенные ограничения для таких сценариев. При каждом запросе. . .
Как дебажить в Go: Руководство по отладке
bytestream 03.03.2025
Отладка в Go имеет свои особенности, связаные с строгой типизацией, моделью конкурентности и управлением памятью. Go предоставляет богатый набор встроеных средств для отладки, которые дополняются. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru