powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / разное разрешение у экрана
25 сообщений из 30, страница 1 из 2
разное разрешение у экрана
    #32551641
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, коллеги!
Кто как борется с различным разррешением экрана у пользователей? Упираешься, обдумываешь размер каждой кнопки на форме - а у пользователя экран вдвое меньше (или больше - тоже не очень хорошо). Знаю, Гетц об этом писал, но если экраны здорово разнятся, то, наверное, формы должны быть разными для них? Или нужно сразу разрабатывать формы для худшего из экранов,которые могут быть у ваших пользователей?
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32551727
Фотография kedzo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в свое время писал под самое меньшее разрешение экрана. Благо их было только 2 - 800 и 1024.
Интересно как другие решают подобную проблему, хотя... 640 и 1200 в одном офисе мне видеть не приходилось :)
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32551741
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я выбрал 1024 и делаю всем под это разрешение.
принудительно ставлю всем юзерам. сначала недовольны потом привыкают.
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32551759
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я всем делаю под 800Х600 так млять всё ровно умудряются то dpi поменять то шрифт крупнее сделать, вообщем забил я на них... говорю не х.. выделываться у меня сделано по стандарту, а под ваши извращения подделываться, идите лесом...

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32551775
Allll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо работает программа масштабирования формы под разные разрешения экрана, сделанная Сергеем Новиковым: http://hiprog.com/access/article.asp?id=319

Есть незначительные недостатки:
1. обратите внимание на строчку ctr.FontName = "SmallFonts". Если используется шрифт со специальными символами, например Monotype Sorts (использую стрелочки вверх/вниз для отображения порядка сортировки), то эти специфические символы будут показаны как буквы.
Просто закомментировал эту строчку - стандартный MS Sans Serif при маленьком разрешении экрана смотрится не хуже, чем SmallFonts.
2. при нестандартном размере шрифта текст может не поместиться на надписи или на кнопке. Речь идёт про размер шрифта, который настраивается в свойствах экрана. "Мелкий шрифт", "Крупный шрифт" - всё нормально, а если задать "Другой...", то может смаштабировать неправильно.
Пытался найти API-функцию, по которому можно было бы узнать выбранный масштаб шрифта и учитывать его при масштабировании - не нашёл. Может это кто-нибудь исправил?
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32552033
Talk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, Формы надо делать под минимальное разрешение в офисе, но масштабируемое (если возможно) через событие resize (использовать insideheight и insidewidth).
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32552070
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во во, я тоже так пишу, да ещё и практически под каждую форму.
Это у вас user-ы лохи, а у меня начальник программер, так что приходится.
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32552137
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК
Что значит: ставлю всем? при загрузке базы меняем разрешение экрана какой-нибудь апишкой? Или просто поставляете базу с рекомендацией исп-ть разрешение 1024? или вручную установил базу и поменял свойства экрана?
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32552444
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто значит: ставлю всем?

у меня не много юзеров. я им ставлю все сам и винду и офис и драйвера и програмку с ярлыками.

с винапи не стоит заморачиваться - это нужно будет отслеживать какое окно активно - аксесс или нет и все время переключаться между старым разрешением и текущим... а если у юзера монитор вдруг не поддерживает 1024?
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32552480
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У пользователей еще может быть LCD - если в ней настроить "свое любимое" разрешение, то пользователь зрения может лишиться, эдак месеца через 3.

Так, что пишем под минимальное в офисе, а для не любитлей мелких окон (есть и любители - им пофиг, что форма всего на пол экрана - они даже пруться от мелких буковок) ресайзим в размер экрана (форму, конторолы и шрифты - шрифты по возможности, конечно :) )
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32552537
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вообщем то разница в разрешении - это так баловство всё таки больширство сидит под разрешением 800X600 либо 1024Х768 - в них разница не болезненная, а вот любители менять dpi - это действительно гемор на голову прграмеру.
Тут вот написано, как с этим бороться правда для дельфей...

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32554143
Serg413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну а я вот как эту проблему решил:
При запуске формы программно определяю разрешение экрана, а затем в зависимости от результатов корректирую размеры формы, а также размеры и расположение остальных элементов. Хлопотно, конечно, зато глюков нету.
В офисе у нас люди работают на двух разрешениях - 800Х600 и 1024Х768.
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32554793
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В базе, которая мне досталась под доработку, уже была довольно мощная процедура для ресайзинга. Работает всегда и безглючно (иногда пишет ошибки в error log, но без последствий). Надо - могу запостить.
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32554815
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Маяк:
НАДО!!!
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32554818
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У мя еще лучше. Разработка на ноуте с разрешением 1400x1050 (Fujitsu-Siemens, мать их), а пользователи на 800x600.
А сколько смеха сквозь слезы было, когда на презентации выяснилось, что проектор не держит выше 1024x768...
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555073
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть такой модулек (работает чисто под 2 разрешения, то можно поправить :) )
Писалось это под Акс97
не идеал конечно, но нас пока устраивает :)

Код: plaintext
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
Option Compare Database
Option Explicit

Global g_KoefScreenResol As Single

Public Type Rect
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Type T_OP
    Name As String
    Left As Integer
    Top As Integer
    Width As Integer
    Height As Integer
    FontSize As Integer
End Type

Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As Rect) As Long

Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
 'Public Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
 
Public Const HORZRES =  8 
Public Const VERTRES =  10 

 ' Пример вызова:
 
 'Private Sub test()
 
 '     If ScreenResol(1024, 768) Then
 
 '       MsgBox "Разрешение экрана больше или равно, чем 1024 x 768"
 
 '     Else
 
 '       MsgBox "Разрешение экрана менее, чем 1024 x 768"
 
 '     End If
 
 'End Sub
 

Public Sub GetKoefSR_1024()
    If ScreenResol( 1024 ,  768 ) Then
        g_KoefScreenResol =  1 . 28 
    Else
        g_KoefScreenResol =  1 
    End If
End Sub

Public Sub GetKoefSR_Person()
    If Get_Koef_Resize =  0  Then
        Call GetKoefSR_1024
    Else
        g_KoefScreenResol = Get_Koef_Resize
    End If
End Sub



Public Function ScreenResol(ByVal x As Long, ByVal y As Long) As Boolean
 ' Проверка разрешения экрана
 
    Dim hdc As Long
    Dim xRes As Long
    Dim yRes As Long
    
    hdc = GetDC(GetDesktopWindow())

    xRes = GetDeviceCaps(hdc, HORZRES)
    yRes = GetDeviceCaps(hdc, VERTRES)
    
     ' Проверка делается на >=
 
    ScreenResol = (xRes >= x) And (yRes >= y)
        
     'If xRes < 1024 Then DoCmd.OpenForm "ChangeResolution", acNormal, , , , acDialog    'Вызов настройки экрана
 
     'ReleaseDC GetDesktopWindow(), hdc
 
End Function

Public Sub FormReSize4Resol(frm As Form)
On Error Resume Next
Dim obj As Object
Dim i As Integer
Dim AccRect As Rect
Dim OP() As T_OP
Dim C_OP As Integer
Dim tmp As Integer

    If g_KoefScreenResol =  0  Then Call GetKoefSR_Person  'GetKoefSR_1024
 
    If Abs(g_KoefScreenResol -  1 ) <  0 . 001  Then Exit Sub

     'MsgBox "FRM: " & frm.Name
 

    frm.InsideHeight = frm.InsideHeight * g_KoefScreenResol
    frm.InsideWidth = frm.InsideWidth * g_KoefScreenResol
    
    frm.Width = frm.Width * g_KoefScreenResol
    
    For i =  0  To  1000 
        Set obj = frm.Section(i)
        If err.number <>  0  Then
            err.number =  0 
            Exit For
        End If
         'MsgBox "SEC: " & obj.Name
 
        obj.Height = obj.Height * g_KoefScreenResol
    Next
    
    C_OP =  0 
    For Each obj In frm.Controls
         'MsgBox "OBJ: " & obj.Name & " - " & TypeName(obj)
 
        If TypeName(obj) = "OptionGroup" Then  ' Проводим сдвижку после сдвижки внутренних объектов
 
            C_OP = C_OP +  1 
            ReDim Preserve OP( 1  To C_OP)
            OP(C_OP).Name = obj.Name
            OP(C_OP).Top = obj.Top * g_KoefScreenResol
            OP(C_OP).Left = obj.Left * g_KoefScreenResol
            OP(C_OP).Width = obj.Width * g_KoefScreenResol
            OP(C_OP).Height = obj.Height * g_KoefScreenResol
            OP(C_OP).FontSize = obj.FontSize * g_KoefScreenResol
        Else
            obj.Top = obj.Top * g_KoefScreenResol
            obj.Left = obj.Left * g_KoefScreenResol
            obj.Width = obj.Width * g_KoefScreenResol
            obj.Height = obj.Height * g_KoefScreenResol
            obj.FontSize = obj.FontSize * g_KoefScreenResol
            err.number =  0 
        End If
    Next
    
     ' Сдвижка элементов OptionGroup
 
    For i =  1  To C_OP
        tmp = frm(OP(i).Name).Height
        frm.Section(frm(OP(i).Name).Section).Height = frm.Section(frm(OP(i).Name).Section).Height + tmp
        frm(OP(i).Name).Top = OP(C_OP).Top
        frm(OP(i).Name).Height = OP(C_OP).Height
        frm.Section(frm(OP(i).Name).Section).Height = frm.Section(frm(OP(i).Name).Section).Height - tmp
        
        tmp = frm(OP(i).Name).Width
        frm.Width = frm.Width + tmp
        frm(OP(i).Name).Left = OP(C_OP).Left
        frm(OP(i).Name).Width = OP(C_OP).Width
        frm.Width = frm.Width - tmp
        
        frm(OP(i).Name).FontSize = OP(C_OP).FontSize
    Next
    
     ' Центрирование форм (если надо)
 
    If frm.AutoCenter Then
        Call GetClientRect(Application.hWndAccessApp, AccRect)
        AccRect.Left = ((AccRect.Right - AccRect.Left) *  15  - frm.WindowWidth) /  2 
        AccRect.Top = ((AccRect.Bottom - AccRect.Top) *  15  - frm.WindowHeight) /  2  -  660 
        If AccRect.Left <  0  Then AccRect.Left =  0 
        If AccRect.Top <  0  Then AccRect.Top =  0 
        DoCmd.MoveSize AccRect.Left, AccRect.Top
    End If
    
End Sub

вызывается из формы по событию открытия
Call FormReSize4Resol(me)

PS: можно критиковать и подправлять - буду только рад :)
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555076
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На досуге помучаю :)
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555086
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТемныйНа досуге помучаю :)

Вперед :)

Да и еще:
1. эта функция не тестировалась с TabControl (ввиду их отсутсвия у нас - без надобности, так сказать)
2. в подформы сама не залезает, по этой причине в событиях подформ, тоже делаем вызов
3. могут быть небольшие накладки, т.к., например, ширина скроллбаров не изменяется
4. если стоит шрифт (например system, например на кнопках) то ему до фени попытки изменить его размер :)
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555087
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК! У мя system'a нету, подформ тоже :)
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555310
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТемныйНАДО!!!1. Каждая форма OnLoad запускает кроме всего прочего следующий код:
(там очень много, всё в приложенном файле)
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555339
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блрю, тож буду мучать :)
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555368
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что кто может сказать о классах Гетца? Чем они не устраивают? Или просто свое стали делать до того, как прочитали мэтра? Я вчера внедрил его класс в свою базу, первое и второе впечатления приятные.
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555369
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что кто может сказать о классах Гетца? Чем они не устраивают? Или просто свое стали делать до того, как прочитали мэтра? Я вчера внедрил его класс в свою базу, первое и второе впечатления приятные.
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555439
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
башмакА что кто может сказать о классах Гетца? Чем они не устраивают? Или просто свое стали делать до того, как прочитали мэтра? Я вчера внедрил его класс в свою базу, первое и второе впечатления приятные.

К сожалению не у всех есть книги метра :(
А когда надо срочно, то проще самому, что-то наваять (тем более, что задача достаточно локализована), чем в судорогах пытаьься найти исходники от "мэтра".

Кстати, только сейчас заметил

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
frm.Width = frm.Width * g_KoefScreenResol
    
    For i =  0  To  1000 
        Set obj = frm.Section(i)
        If err.number <>  0  Then
            err.number =  0 
            Exit For
        End If
         'MsgBox "SEC: " & obj.Name
 
        obj.Height = obj.Height * g_KoefScreenResol
    Next

Если g_KoefScreenResol < 1, то указанный блок надо выполнять после ресайза контролов, а не до :)
...
Рейтинг: 0 / 0
разное разрешение у экрана
    #32555623
read
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 МАЯК

rctR As glrTypeRect

Если не сложно запости еще этот тип..
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / разное разрешение у экрана
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]