Avatar billede adagio Nybegynder
02. maj 2002 - 14:17 Der er 20 kommentarer og
1 løsning

Skærmopløsnings problem - Haster

Jeg har lige i sidste øjeblik opdaget et stort skærmopløsnings problem ved mit projekt som skal afleveres i morgen...

Problemet er at når jeg starter programmet (og har en skærmopløsning på 1024x768), skal den skifte til en opløsning på 1280x1024, men der dukker fejlen op.

Mit program består af en form, som skal køre i fuldskærm (altså ingen borders), men når jeg starter programmet starter formen op midt på skærmen (Som jeg har sat den til), men med en størrelse på 1024x768, hvilket betyder at den har klippet højre side og bunden af mit program!?!

Jeg bruger denne kode under start af form:
Call ChangeRes(1280, 1024)

Samt i modulen findes dette:

Sub ChangeRes(iWidth As Single, iHeight As Single)

    Dim DevM As DEVMODE
    Dim a As Boolean
    Dim i&
    i = 0


    Do
        a = EnumDisplaySettings(0&, i&, DevM)
        i = i + 1
    Loop Until (a = False)

    Dim b&

    DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
    DevM.dmPelsWidth = iWidth
    DevM.dmPelsHeight = iHeight

    b = ChangeDisplaySettings(DevM, 0)

End Sub
Avatar billede bennytordrup Nybegynder
02. maj 2002 - 14:19 #1
Hvad vil du gøre på en computer, hvor skærm eller skærmkort ikke understøtter den opløsning?

En bedre løsning er at resize formen og de enkelte kontroller således, at de kan være på billedet uanset skærmstørrelse.
Avatar billede adagio Nybegynder
02. maj 2002 - 14:22 #2
Jeg har prøvet at se om det ikke kan komme ned på en mindre skærmopløsning, men da min "oprydnings even" er af h. til, så bliver programmet kaos vis den bare kommer en lille tak ned!
Avatar billede bennytordrup Nybegynder
02. maj 2002 - 14:25 #3
Har du alle kontroller vist på en gang?

Hvis ja, og formen skal op i den størrelse, så har du et designproblem af H. til. Prøv evt. med en tabstrip og del kontrollerne op i logiske enheder.

Hvis nej, så genovervej de logiske enheder, du allerede har delt op i. De er for store.
Avatar billede tjacob Juniormester
02. maj 2002 - 14:26 #4
Har du erklæret funktionerne?
Du skal altid erklære API-funktioner (og konstanter og typer) i et modul. Noget a la:
Private Declare Function EnumDisplaySettings Lib "user32" Alias
  "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long,
  ByVal iModeNum As Long, lpDevMode As Any) As Boolean

Private Declare Function ChangeDisplaySettings Lib "user32" Alias
  "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long

-plus konstanter og typer

/tjacob
Avatar billede adagio Nybegynder
02. maj 2002 - 14:30 #5
Benny >> Jeg kender ikke lige så meget til programmet at jeg ved hvad kontrollere er?
Avatar billede adagio Nybegynder
02. maj 2002 - 14:31 #6
Tjacob >> Ja, de er erklæret
Avatar billede bennytordrup Nybegynder
02. maj 2002 - 14:31 #7
Tekstbokse, labels, kombobokse osv.
Avatar billede adagio Nybegynder
02. maj 2002 - 14:33 #8
Ahhh... De skal alle kunne vises af en gang af diverse grunde! Vis de bliver delt op, så kommer programmet ikke helt til at være som det skal være!
Avatar billede bennytordrup Nybegynder
02. maj 2002 - 14:34 #9
IMHO har du et STORT design problem. Der er ikke nogle mennesker, som kan overskue så mange oplysninger på en gang.

Hvor mange kontroller har du på formen?
Avatar billede adagio Nybegynder
02. maj 2002 - 14:38 #10
Benny >> Jeg gidder ikke høre mere på designet, designet er IKKE problemet da der faktisk ikke er så mange kontrollere på billedet, men dem som er der skal være på række nedaf for ikke at ødelægge programmet!!!
Avatar billede bennytordrup Nybegynder
02. maj 2002 - 14:41 #11
Som du vil
Avatar billede tjacob Juniormester
02. maj 2002 - 14:42 #12
Prøv et par grundlæggende ting:
Umiddelbart efter ChangeRes - kald Form.Refresh eller sæt
Form.Width og Form.Height eller begge.

-De skal evt. lægges ind i Form_Activate der kaldes efter Form_Load.
Avatar billede adagio Nybegynder
02. maj 2002 - 14:47 #13
Jeg har lige prøvet den med form.width, men når jeg sætter den til 1280 (form1.width = 1280), så bliver formen meget lille, som om den tager en anden målenehed!?! Hvad skal der ellers skrives?
Avatar billede bennytordrup Nybegynder
02. maj 2002 - 14:48 #14
1280*screen.twipsperpixelX eller noget i den retning. Tilsvarende for højden (screen.twipsperpixelY)
Avatar billede adagio Nybegynder
02. maj 2002 - 14:48 #15
Vent, jeg fandt ud af det, takker for hjælpen det virker nu ;)
Avatar billede adagio Nybegynder
02. maj 2002 - 14:51 #16
Jeg skulle bare bruge 19200x15360
Avatar billede bennytordrup Nybegynder
02. maj 2002 - 14:54 #17
Det er også det, som jeg skrev. TwipsPerPixelX er 15
Avatar billede tjacob Juniormester
02. maj 2002 - 14:56 #18
-Takker for points. Bennys sidste svar var også korrekt, da Screen.TwipsPerPixelX (0g Y) er 15 på de fleste skærme -->
1280 * 15 = 19200
1024 * 15 = 15360
Avatar billede adagio Nybegynder
02. maj 2002 - 14:58 #19
Ok, det vidste jeg ikke, det må du undskylde, kan vi måske få Tjacob til at give dig en 20 point eller sådan noget, det var trods alt ham som fik mig i den rigtige tankeretning! Vil det være ok, eller hvad mener i?
Avatar billede tjacob Juniormester
02. maj 2002 - 15:00 #20
Selvfølgelig -Skal jeg oprette et spm til dig Benny?
Avatar billede bennytordrup Nybegynder
02. maj 2002 - 15:01 #21
Det er måden, hvis du er opsat på det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester