Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769

Как отцентрировать своё окно/форму, точно так же, как центрируется стандартный инпутбокс в VB6?

30.01.2024, 13:04. Показов 2646. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как "отцентрировать" своё собственное окно или форму, точно так же, как центрируется стандартный инпутбокс в VB6?

Помогите пожалуйста, решить эту непосильную задачу для меня, бьюсь уже ни один месяц и всё никак не могу решить эту наисложнейшую задачу. Так и не смог разгадать этот алгоритм центровки стандартного инпутбокса.

Как я лично это вижу тут есть два пути решения этой сложной задачи:

1. Вскрыть программный код майкрософта инициализации диалогового окна инпутбокса и найти нужный код центровки (это оказалось для меня сложно так и не смог)
2. Придумать самому этот код, эту формулу, чтобы было точно так же как и у майкрософта, чтобы окно "центрировалось" как надо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2024, 13:04
Ответы с готовыми решениями:

Как отцентрировать созданное окно?
Загружается одно окно и создает небольшое второе. Как сделать так, чтобы оно было по центру монитора? Я выравниваю его с помощью left и...

Как создать в WPF точно такое же окно?
Нужно создать окно вот такой формы. Нужен XAML код, с Arcsegment-ом слишком круглая получается, а с помощью Border.CornerRadius...

SefSharp. Как закрыть свое окно?
Всем привет. C# SefSharp. Вот так я ищу на странице нужную мне ссылку и кликаю по ней: chrome.ExecuteScriptAsync( ...

29
sleep
 Аватар для I can
4930 / 4590 / 840
Регистрация: 13.04.2015
Сообщений: 9,741
30.01.2024, 18:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от HackerVlad Посмотреть сообщение
лучше Top посмотри
Это и есть топ.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
30.01.2024, 18:42  [ТС]
I can, у тебя при разрешении 1366х768 топ идёт 193 пикселя???????????
А у меня 197 и в чём логика тогда...

Добавлено через 1 минуту
I can, высоту заголовка окна тогда надо проверять. Сколько пикселей у тебя высота заголовка окна?

Добавлено через 1 минуту
У меня высота заголовка окна инпутбокса 23 пикселя

Добавлено через 1 минуту
Или 28 пикселей в зависимости от стиля окна, пока я ничего не понимаю вообще толком тут

Добавлено через 1 минуту
Хрен пойми как там у этих майкров этот код написан вообще, вот что значит скрытый код - это зло, лучше когда весь код открыт для программистов конечно
0
sleep
 Аватар для I can
4930 / 4590 / 840
Регистрация: 13.04.2015
Сообщений: 9,741
30.01.2024, 18:42
Цитата Сообщение от HackerVlad Посмотреть сообщение
У меня высота заголовка окна инпутбокса 23 пикселя
26.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
30.01.2024, 18:51  [ТС]
I can, пришли, пожалуйста, скриншот, а я свой покажу
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
30.01.2024, 18:53  [ТС]
Разрешение поставил 1366х768
Миниатюры
Как отцентрировать своё окно/форму, точно так же, как центрируется стандартный инпутбокс в VB6?  
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
30.01.2024, 19:02  [ТС]
У меня получается тут отступ по топу 197 при хеите самого окна 146

Добавлено через 49 секунд
Это родной InputBox встроенный в VB6 (это важно) так как другие инпутбоксы имеют какие-то отклонения по пикселям уже

Добавлено через 6 минут
Цитата Сообщение от HackerVlad Посмотреть сообщение
при хеите самого окна 146
146 это я имею ввиду вместе с заголовком конечно и с нижней границей окна которая тоже там пару пикселей
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
30.01.2024, 21:07
Лучший ответ Сообщение было отмечено HackerVlad как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
    Dim tWorkArea   As RECT
    Dim tWndRect    As RECT
    Dim lLeft       As Long
    Dim lTop        As Long
    
    SystemParametersInfo SPI_GETWORKAREA, 0, tWorkArea, 0
    GetWindowRect hwnd, tWndRect
    
    lLeft = tWorkArea.iLeft + (tWorkArea.iRight - tWorkArea.iLeft - (tWndRect.iRight - tWndRect.iLeft)) \ 2
    lTop = tWorkArea.iTop + (tWorkArea.iBottom - tWorkArea.iTop - (tWndRect.iBottom - tWndRect.iTop)) \ 3
    
    MoveWindow hwnd, lLeft, lTop, tWndRect.iRight - tWndRect.iLeft, tWndRect.iBottom - tWndRect.iTop, 0
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
30.01.2024, 21:39  [ТС]
The trick, тестирую твой код сейчас, очень глючит графика при перемещении окна, не пойму почему пока

Добавлено через 7 минут
The trick, рекомендую использовать SetWindoPos лучше

Добавлено через 36 секунд
но причину сильного глючиния графики ещё нужно выяснять
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
30.01.2024, 21:39
Цитата Сообщение от HackerVlad Посмотреть сообщение
при перемещении окна
Зачем его перемещать, он устанавливается 1 раз при показе.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
31.01.2024, 00:16  [ТС]
The trick, ну я прописал это в событии кнопки, для тестирования, может в событии загрузки формы и не глючила бы графика, не знаю, не пробовал

Добавлено через 28 секунд
но по сути если делать то так чтобы работало хорошо и при событии нажати на кнопку без глючения графики

Добавлено через 2 минуты
SetWindowPos лучше тем что там не обязательно задавать Width и Height окна , достаточно просто Top и Left поэтому для перемещения окон мне больше нравится SetWindowPos

Добавлено через 28 минут
The trick, поместил код в событие Form_Load графика перестала глючить вроде

Добавлено через 26 секунд
Сейчас буду тестировать другие разрешения экрана

Добавлено через 3 минуты
Да, проверил, работает во всех разрешениях экрана как и надо! Ура! Как тебе это удалось? Я два месяца не мог найти решения

Добавлено через 1 минуту
Осталось только доработать этот код, что перемещалось и по кнопке без глюков.

Добавлено через 16 минут
Итак у нас есть победитель The Trick он награждается супер-призом, только он смог разгадать эту формулу. Ура! Слава трюкачу)

Добавлено через 1 час 29 минут
Либо вот моё решение через SetWindowPos

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Option Explicit
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal CX As Long, ByVal CY As Long, ByVal wFlags As Long) As Long
 
Private Const SPI_GETWORKAREA = 48
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
 
Private Type RECT
    iLeft As Long
    iTop As Long
    iRight As Long
    iBottom As Long
End Type
 
Private Sub Command1_Click()
    Me.Caption = InputBox("123", "456")
End Sub
 
Private Sub Form_Load()
    Dim tWorkArea As RECT
    Dim tWndRect As RECT
    Dim lLeft As Long
    Dim lTop As Long
    
    SystemParametersInfo SPI_GETWORKAREA, 0, tWorkArea, 0
    GetWindowRect hwnd, tWndRect
    
    lLeft = tWorkArea.iLeft + (tWorkArea.iRight - tWorkArea.iLeft - (tWndRect.iRight - tWndRect.iLeft)) \ 2
    lTop = tWorkArea.iTop + (tWorkArea.iBottom - tWorkArea.iTop - (tWndRect.iBottom - tWndRect.iTop)) \ 3
    
    SetWindowPos hwnd, 0, lLeft, lTop, 0, 0, SWP_NOSIZE Or SWP_NOZORDER
End Sub
Добавлено через 4 минуты
The trick, а что лучше использовать GetMonitorInfo (MonitorFromWindow) или SPI_GETWORKAREA ??? Не знаешь???
Я раньше всегда пользовался GetMonitorInfo и выбирал монитор через MonitorFromWindow. Я даже не знал кода SPI_GETWORKAREA...

Добавлено через 1 минуту
Я раньше примерно так делал:

Visual Basic
1
2
3
4
          hMonitor = MonitorFromWindow(hwndDlg, MONITOR_DEFAULTTONEAREST)
                MI.cbSize = LenB(MI)
                
                If GetMonitorInfo(hMonitor, MI) <> 0 Then
Добавлено через 6 минут
Ура! Разгадана формула! А формула оказалась такова:

Размер рабочей области монитора минус высота окна делёное на три

Вот и вся формула, которую я так долго искал, оказалось всё так просто
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2024, 00:16
Помогаю со студенческими работами здесь

Как вызвать свое диалоговое окно?
Сделал диалоговое окно в designer from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self,...

Как показать свое окно ошибки, а не системное?
как показать свое окно ошибки а не системное. Когда стоит Doctor Watson то он показывает ошибки. У меня ваше стоит Delphi и она показывает...

Как создать свое окно для браузера
Добрый день! Подскажите как создать свое окно для браузера в java какую библиотеку использовать и что почитать. Нужно свое окно для...

Вывод чужой программы в свое окно. Как?
Есть программа , запускаю Process p = new Process(); ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = @&quot;c:Program...

Начертить в Mathcad графики точно так же как на рисунке.
Помогите прошу вас! Я долго мучился с этими графиками, но ничего толком не вышло. Прошу можете помочь начертить в Mathcad эти графики точно...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru