# Bildschirmauflösung abfragen?



## Christoph1972 (25. April 2005)

Hallo,

Da ich in diesem Topic nicht erfolgreich war  versuche ich es mal hier. 
Also ich habe kürzlich mein erstes Programm fertiggestellt, musste aber bald feststellen, das dass mit der unterschiedlichen Bildschirmauflösung noch unschön ist. Ich habe auch schon zum Thema Bildschirmauflösung gesucht und Tipps gefunden und auch Tipps von euch erhalten. Aber leider konnte ich mit den Informationen nichts anfangen, ich bin scheinbar noch zu frisch, oder dämlich. Ich möchte einfach errechen, das sich die Anwendung an die aktuelle Auflösung anpasst. Vom Ingo gab es schon einen super Tipp, aber leider zu kompliziert(professionell) für mich. 


Also, meine Idee:

Ich möchte einfach mein Programm doppelt installieren, einmal die vorhandene Version 1024*780 und eine in 1152*864. Ich würde die vorhandene Version einfach kopieren und dann die Oberfläche auf 1152*864 zurechtrücken. Klar ist das nicht elegant und in der Zukunft werde ich sicher bald wieder vor dem selben Problem stehen, aber momentan ist das scheinbar die einzige Lösung die ich realisieren kann. Ich möchte einfach nur die Bildschirmauflösung abfragen und sie dann mit If Then weiterverarbeiten. Das Ganze soll dann so ablaufen, wenn das Programm gestartet wird:

If Bildschirmauflösung 1024*780 Then 
Load Form1024*780

ElseIf Bildschirmauflösung 1152*864 Then Load 
Form1152*864

Else
MsgBox Ihre Bildschirmauflösung ist für diese Programm nicht Optimal!
Load Form1024*780

End If

Könnte mir jemand behilflich sein das zu Programmieren? 

Gruß

Christoph


----------



## Orakel (25. April 2005)

Hi Christoph,

nach meinem Wissen erhälst Du die Bildschirmauflösung über das Screen Objekt mit

nWidth = Screen.Width / Screen.TwipsPerPixelX erhälst Du die Breite
nHeight = Screen.Height / Screen.TwipsPerPixelY erhälst Du die Höhe

maybe it helps
Das Orakel


----------



## Orakel (25. April 2005)

Hmmm

hab mal ein bischen gekramt und folgende einfache Lösung gefunden, die die Größe der Controls auf einer Form bei Größenänderung anpasst. Funzelt wenn die Form nicht gerade mit controls überladen ist.


```
Option Explicit

Private nStartWidth                     As Integer
Private nStartHeight                    As Integer

Private Sub Form_Load()
    nStartWidth = Me.Width
    nStartHeight = Me.Height
    Me.WindowState = vbMaximized
End Sub

Private Sub Form_Resize()
    Dim sFactorX                As Single
    Dim sFactorY                As Single
    Dim oObject                 As Control
    Dim nCounter                As Integer


    sFactorX = Me.Width / nStartWidth
    sFactorY = Me.Height / nStartHeight

    For nCounter = 1 To Me.Controls.Count
        With Me.Controls(nCounter - 1)
            If TypeOf Me.Controls(nCounter - 1) Is PictureBox Then
                .Move .Left * sFactorX, .Top * sFactorY, .Width * sFactorX, .Height * sFactorY
            ElseIf TypeOf Me.Controls(nCounter - 1) Is Label Then
                .Move .Left * sFactorX, .Top * sFactorY, .Width * sFactorX, .Height * sFactorY
            ElseIf TypeOf Me.Controls(nCounter - 1) Is Frame Then
                .Move .Left * sFactorX, .Top * sFactorY, .Width * sFactorX, .Height * sFactorY
            ElseIf TypeOf Me.Controls(nCounter - 1) Is CommandButton Then
                .Move .Left * sFactorX, .Top * sFactorY, .Width * sFactorX, .Height * sFactorY
            ElseIf TypeOf Me.Controls(nCounter - 1) Is CheckBox Then
                .Move .Left * sFactorX, .Top * sFactorY, .Width * sFactorX, .Height * sFactorY
            ElseIf TypeOf Me.Controls(nCounter - 1) Is OptionButton Then
                .Move .Left * sFactorX, .Top * sFactorY, .Width * sFactorX, .Height * sFactorY
            ElseIf TypeOf Me.Controls(nCounter - 1) Is TextBox Then
                .Move .Left * sFactorX, .Top * sFactorY, .Width * sFactorX, .Height * sFactorY
            End If
        End With
    Next nCounter
    nStartWidth = Me.Width
    nStartHeight = Me.Height
End Sub
```

Ist ne ganz rudimentäre Implementierung

Gruß
Das Orakel


----------



## Christoph1972 (25. April 2005)

Hrrrrr...........   Danke 


nWidth = Screen.Width / Screen.TwipsPerPixelX erhälst Du die Breite
nHeight = Screen.Height / Screen.TwipsPerPixelY erhälst Du die Höhe


Das ist meine Lösung! 
Der andere Vorschlag ist mir momentan noch nicht klar. Bin halt noch Anfänger  

Gruß

Christoph


----------



## schachmat (25. April 2005)

Du könntest auch einfach in den Eigenschaften des Forms WindowState (oder ähnlich) auf Maximized setzen...


----------



## Christoph1972 (25. April 2005)

Ne das bringt nicht das erwünschte Ergebniss, da dann Textboxen Buttons usw oben links in der hängen und das sieht sch.... aus  
Ich bin aber auf dem richtigem Weg, irgend wann ist es dann egal welche Auflösung der User hat. Die Anwendung wird dann immer maximiert geöffnet und alle Textboxen usw befinden sich dann an der selben stelle, in einer angepassten Größe.

Christoph


----------



## Christoph1972 (25. Juli 2005)

Hallo Zusammen!

Ich habe diesen Thread wieder ausgegraben, da ich mich gerade wieder mit 6.0 beschäftige. Den Beispielcode von Orakel habe ich auf ein MDI-Form angewendet, das Ergebnis ist soweit super. Nur bei den eigentlichen Forms(Childeren) funktioniert das nicht wie gewünscht. Mein gesamtes Layout gerät durch einander, manche Textboxen befinden sich an den ungewöhnlichsten Stellen. 
Was muss ich machen, damit sich der Code auf alle Steuerelemente auswirkt? 

Gruß
Christoph


----------

