Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Разрешение экрана и прога Добавлено: 02.10.04 14:29  

Автор вопроса:  DaSharm | Web-сайт: dasharm.com | ICQ: 780477 
Как адаптировать прогу к разным разрешениям экрана?Ну, чтобы размеры контролов изменялись автоматичеси с изменением разрешения...
?

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 02.10.04 15:13
Ввести какой-то коэфицент для каждого контрола (скажем кол-во процентов от занимаемого экрана) Далее размер экрана по высоте, по ширине умножается на этот коэфицент... А чтобы при смене разрешения все было ок, нужно отлавливать сообщение при смене разрешения, честно говоря какое не помню, знаю что есть такое...

Ответить

Номер ответа: 2
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #2
Добавлено: 02.10.04 17:45
Блин, да у меня контрролов около 50 штук. Что ВБ сам ресайзить не может???

Ответить

Номер ответа: 3
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #3 Добавлено: 02.10.04 17:53
Контролы в принципе можно перебрать в цикле.
    ;Dim obj As Object
    For Each obj In Me
        On Error Resume Next
        obj.Width =
        obj.Height =
        obj.Top =
        obj.Left =
    Next
Но мне кажется серавно не получится, например ListBox понемногу изменять Height не хочет. А разрешение экрана оказывается можно узнать без API Screen.Width / 15

Ответить

Номер ответа: 4
Автор ответа:
  Piton_4m



Вопросов: 10
Ответов: 26
 Профиль | | #4 Добавлено: 02.10.04 17:59
Попробуй Screen.... Даст размеры экрана в данный момент, но есть функция возвращающая или выставляющая разрешения как в игрушках, тока никто не делиться..... найдёшь скинь на мыло..........

Ответить

Номер ответа: 5
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #5 Добавлено: 02.10.04 18:06
А мыло то где?

Ответить

Номер ответа: 6
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #6 Добавлено: 02.10.04 19:10
2Mihalыch
[code]Screen.Width / 15
[/code]
Нет, так не точно
[code]Screen.Width / Screen.TwipsPerPixelX
[/code]
Хотя результат тот же, но ведь зачем то это делали?

Чтобы ListBox менял размеры вне зависимости от вышины его строчек у него
есть св-во IntegralHeight = False

Ответить

Номер ответа: 7
Автор ответа:
  Piton_4m



Вопросов: 10
Ответов: 26
 Профиль | | #7 Добавлено: 03.10.04 04:47
Graymord@mail.ru

Ответить

Номер ответа: 8
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #8 Добавлено: 03.10.04 07:14
Интересная тема… Попробовал, вот что получилось:

    ;Dim wInd As Single
    ;Dim hInd As Single
Private Sub Form_Load()
    If Screen.Width / Screen.TwipsPerPixelX <> 1024 Then
        wInd = (Screen.Width / Screen.TwipsPerPixelX) / (1024 / 100)
        hInd = (Screen.Height / Screen.TwipsPerPixelY) / (768 / 100)
        RedRaw
    End If
End Sub

Sub RedRaw()
    ;Dim obj As Object
    Me.Width = Me.Width / 100 * wInd
    Me.Height = Me.Height / 100 * wInd
    For Each obj In Me
        On Error Resume Next
        With obj
            .IntegralHeight = False
            .Width = obj.Width / 100 * wInd
            .Height = obj.Height / 100 * hInd
            .Top = obj.Top / 100 * hInd
            .Left = obj.Left / 100 * wInd
            .X1 = obj.X1 / 100 * wInd
            .X2 = obj.X2 / 100 * wInd
            .Y1 = obj.Y1 / 100 * hInd
            .Y2 = obj.Y2 / 100 * hInd
            .FontSize = obj.FontSize / 100 * wInd
        End With
    Next
End Sub

Посмотрите кому не влом, проблема с размером шрифта, ну не хочет становиться меньше 8. Может тоже какое нить св-во изменить нужно и он уменьшится?

Ответить

Номер ответа: 9
Автор ответа:
  Piton_4m



Вопросов: 10
Ответов: 26
 Профиль | | #9 Добавлено: 03.10.04 09:17
Mihalыch Используй не шрифт "MS Sans Serif", а например "Times New Roman"... тогда мона будет поставить размер хоть 1,5.....

Ответить

Номер ответа: 10
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #10 Добавлено: 03.10.04 10:40
Со шрифтом на стандартных контролах уже разобрался. Теперь пытаюсь уговорить UserControl’ы . Вот эти согласны работать по хорошему (xpradiobutton и xpgroupbox), вот эти пока нет (xpcmdbutton и xpcheckbox) и еще MonthView вредничает. А вообще уже можно использовать, скажем предупредив пользователя мол разрешение нестандартное для этой программы, со всеми вытекающими…

Ответить

Номер ответа: 11
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #11 Добавлено: 03.10.04 11:04
Все всех уговорил, даже MonthView сдался. Теперь все выглядит так:

Private Sub Form_Load()
    If Screen.Width / Screen.TwipsPerPixelX <> 1024 Then
        RedRaw Me, (Screen.Width / Screen.TwipsPerPixelX) / (1024 / 100), (Screen.Height / Screen.TwipsPerPixelY) / (768 / 100)
    End If
End Sub

Sub RedRaw(objf As Form, wInd As Single, hInd As Single)
    ;Dim Obj As Object
    ;Dim i As Byte
    objf.Width = objf.Width / 100 * wInd
    objf.Height = objf.Height / 100 * hInd
    objf.Top = objf.Top / 100 * hInd
    objf.Left = objf.Left / 100 * wInd
    For Each Obj In objf
        On Error Resume Next
        With Obj
            If TypeOf Obj Is ListView Then
                For i = 1 To Obj.ColumnHeaders.Count
                    Obj.ColumnHeaders.Item(i).Width = Obj.ColumnHeaders.Item(i).Width / 100 * wInd
                Next i
            End If
            If TypeOf Obj Is PictureBox Then .AutoSize = False
            .Stretch = True
            .IntegralHeight = False
            If Not TypeOf Obj Is Label Then
                .Font.Name = "Microsoft Sans Serif"
                .Font.Size = .Font.Size / 100 * wInd
            End If
            .Width = .Width / 100 * wInd
            .Height = .Height / 100 * hInd
            .Top = .Top / 100 * hInd
            .Left = .Left / 100 * wInd
            .X1 = .X1 / 100 * wInd
            .X2 = .X2 / 100 * wInd
            .Y1 = .Y1 / 100 * hInd
            .Y2 = .Y2 / 100 * hInd
            If TypeOf Obj Is Label Or TypeOf Obj Is MonthView Then
                .Font.Name = "Microsoft Sans Serif"
                .Font.Size = .Font.Size / 100 * wInd
            End If
        End With
    Next
End Sub

Если ListView или MonthView не используются, то все относящиеся к ним нужно убрать или закомментировать, а если используется что-то еще, нужно поглядеть как это «что-то» ведет себя и возможно поработать индивидуально… В таком виде процедура вставлена в мою прогу, все работает приемлемо, хотя понятно что она не универсальна.

Ответить

Номер ответа: 12
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 03.10.04 18:52
Тю народ! OCX то есть! Он в примерчике там де есть полный стиль xp (ну там где форма, чексбоксы итп...) вто там есть Resizer он вроде нормально всё делает...

Ответить

Номер ответа: 13
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #13 Добавлено: 05.10.04 00:15
2 HACKER,

nu dyk eto-zhe ved` ActiveX, ne svoe...naskoka ya pomnyu DaSharm ne lyubitel` chuzhih kontrolov, tak chto kod Mihalыch'a klevoe reshenie....

kstati, interesno kak on s podsvetkoj smotritsya...

[CODE]Private Sub Form_Load()
    If Screen.Width / Screen.TwipsPerPixelX <> 1024 Then
        RedRaw Me, (Screen.Width / Screen.TwipsPerPixelX) / (1024 / 100), (Screen.Height / Screen.TwipsPerPixelY) / (768 / 100)
    End If
End Sub

Sub RedRaw(objf As Form, wInd As Single, hInd As Single)
    Dim Obj As Object
    Dim i As Byte
    objf.Width = objf.Width / 100 * wInd
    objf.Height = objf.Height / 100 * hInd
    objf.Top = objf.Top / 100 * hInd
    objf.Left = objf.Left / 100 * wInd
    For Each Obj In objf
        On Error Resume Next
        With Obj
            If TypeOf Obj Is ListView Then
                For i = 1 To Obj.ColumnHeaders.Count
                    Obj.ColumnHeaders.Item(i).Width = Obj.ColumnHeaders.Item(i).Width / 100 * wInd
                Next i
            End If
            If TypeOf Obj Is PictureBox Then .AutoSize = False
            .Stretch = True
            .IntegralHeight = False
            If Not TypeOf Obj Is Label Then
                .Font.Name = "Microsoft Sans Serif"
                .Font.Size = .Font.Size / 100 * wInd
            End If
            .Width = .Width / 100 * wInd
            .Height = .Height / 100 * hInd
            .Top = .Top / 100 * hInd
            .Left = .Left / 100 * wInd
            .X1 = .X1 / 100 * wInd
            .X2 = .X2 / 100 * wInd
            .Y1 = .Y1 / 100 * hInd
            .Y2 = .Y2 / 100 * hInd
            If TypeOf Obj Is Label Or TypeOf Obj Is MonthView Then
                .Font.Name = "Microsoft Sans Serif"
                .Font.Size = .Font.Size / 100 * wInd
            End If
        End With
    Next
End Sub[/CODE]

Ответить

Номер ответа: 14
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #14 Добавлено: 05.10.04 00:15
[CODE]
Private Sub Form_Load()
    If Screen.Width / Screen.TwipsPerPixelX <> 1024 Then
        RedRaw Me, (Screen.Width / Screen.TwipsPerPixelX) / (1024 / 100), (Screen.Height / Screen.TwipsPerPixelY) / (768 / 100)
    End If
End Sub

Sub RedRaw(objf As Form, wInd As Single, hInd As Single)
    Dim Obj As Object
    Dim i As Byte
    objf.Width = objf.Width / 100 * wInd
    objf.Height = objf.Height / 100 * hInd
    objf.Top = objf.Top / 100 * hInd
    objf.Left = objf.Left / 100 * wInd
    For Each Obj In objf
        On Error Resume Next
        With Obj
            If TypeOf Obj Is ListView Then
                For i = 1 To Obj.ColumnHeaders.Count
                    Obj.ColumnHeaders.Item(i).Width = Obj.ColumnHeaders.Item(i).Width / 100 * wInd
                Next i
            End If
            If TypeOf Obj Is PictureBox Then .AutoSize = False
            .Stretch = True
            .IntegralHeight = False
            If Not TypeOf Obj Is Label Then
                .Font.Name = "Microsoft Sans Serif"
                .Font.Size = .Font.Size / 100 * wInd
            End If
            .Width = .Width / 100 * wInd
            .Height = .Height / 100 * hInd
            .Top = .Top / 100 * hInd
            .Left = .Left / 100 * wInd
            .X1 = .X1 / 100 * wInd
            .X2 = .X2 / 100 * wInd
            .Y1 = .Y1 / 100 * hInd
            .Y2 = .Y2 / 100 * hInd
            If TypeOf Obj Is Label Or TypeOf Obj Is MonthView Then
                .Font.Name = "Microsoft Sans Serif"
                .Font.Size = .Font.Size / 100 * wInd
            End If
        End With
    Next
End Sub
[/CODE]

Ответить

Номер ответа: 15
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #15 Добавлено: 05.10.04 00:16
stryanno....

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам