Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Formin (ja sisällön) skaalaus?

DjMake [01.07.2005 03:15:25]

#

Eli tarve olisi saada aikaan muutama formi, joka avatessa käynnistyy koko ruudun kokoon. Tässä ei ongelmia ole, mutta myös formin sisällön pitäisi skaalautua samassa suhteessa.
Onko tähän jotakin oikotietä vai onko ainoa ratkaisu laskea ja asettaa formin koon mukaan jokaiselle elentille yksitellen uusi koko? Tässähän ei sinällään ole ongelmaa, mutta kun formeja on useita, jokaisessa useita elementtejä joiden fontikokokin pitäisi muuttaa, niin lopputuloksena on ehkä muutama sata koon muuttamista ja mieluusti säästäisi työn ja koodin määrässä.

Vai onko muita hyviä ideoita, joita en itse keksinyt? Softasta on tarkoitus syntyä omaan tarpeeseen autokäyttöön GPS-softaa ja tarkoitus olisi tietysti se, että näytön resosta riippumatta käytettäisiin koko ruutu hyödyksi.

Niin, VB5/6 on alustana.

Metabolix [01.07.2005 05:40:26]

#

En tiedä oikoteistä, mutta kerrankos sen koodin kirjoittaa käyttäen jotakin sopivaa muuttujaa kaikkeen skaalaukseen, niin sen jälkeen se toimii aina. Itse tapaan nykyään (Delphissä) kirjoittaa aina asettelut koodilla, koska myös Windowsin fonttikoon muuttaminen (siis se Isot fontit / Pienet fontit -valintalaatikko) heittelee ainakin Delphi-ohjelmat vähän miten sattuu.

Yksi hyvä tapa, jolla saa asettelun säilymään, on asetella kaikki suhteessa toisiinsa:

TextBox1.Left = Etäisyys_Formin_Reunasta
TextBox2.Left = TextBox1.Left + TextBox1.Width + Haluttu_Väli
' Jne.

Tee vaikka Sub Asettele, jossa laitat kaiken kohdalleen, niin on helppo vaikka muuttaa ikkunan kokoa kesken ajon.

BadSource [01.07.2005 07:45:43]

#

Helpoiten tuon objektien skaalautumisen formin koon mukaan saa hoidettua käyttämällä Form_Resize:a ja objektien Move-metodia. Objektit skaalautuvat tuolla myös kun käyttäjä ottaa formin nurkasta kiinni ja muuttaa formin kokoa vetämällä.

Esimerkin formilla on yksi Label (Label1), yksi TextBox (Text1) ja yksi painonappi (Command1).

Option Explicit

Const MARGINAL As Integer = 60
Const CORRECTION As Integer = 20

Private Sub Form_Resize()

    With Me
        If .WindowState = vbMinimized Then Exit Sub 'blokkaa turhat virheet
        'Asemoidaan nappi ruudun oikeaan alalaitaan
        .Command1.Move (.ScaleWidth - .Command1.Width - MARGINAL), _
          (.ScaleHeight - .Command1.Height - MARGINAL)
        'Asemoidaan label hieman sisennettynä ruudun oikeaan ylälaitaan
        .Label1.Move 3 * MARGINAL, MARGINAL, _
          .TextWidth(.Label1.Caption) + CORRECTION, _
          .TextHeight(.Label1.Caption) + CORRECTION
        'Asemoidaan TextBox Label1:n alapuolelle
        .Text1.Move MARGINAL, .Label1.Top + .Label1.Height, _
          .ScaleWidth - 2 * MARGINAL, _
          .TextHeight(.Label1.Caption) + (3 * CORRECTION)
    End With
End Sub

neau33 [01.07.2005 11:55:36]

#

Hei BadSource!
Kiitos tosta "MARGINAL / CORRECTION" jutskasta

neau33 [04.07.2005 18:03:50]

#

"Välikysymys" Mutta mitenkäs, kun haluun, et ohjelmani vaihataa ne pienet fontit automaattisesti päälle 'in the case' jos ne eivät ole ( Isot fontit / Pienet fontit -valintalaatikko) ja sit palauttaa 'alkuperäset' asetukset kun ohjelma suljetaan..?

BadSource [05.07.2005 07:10:21]

#

Saattaa johtua aikaisesta aamusta, mutten tunnu tajuavan kysymystä...

Mikäli et tallenna käyttäjän tekemiä muutoksia minnekkään, niin ohjelma käynnistyy niillä asetuksilla, jotka siihen on ohjelmointi vaiheessa asetettu.

Käyttäjän valintojen tallentamiseen suosittelen käyttämään Windowsin rekistereitä, joiden käyttöön VB tarjoaa omat aliohjelmansa SaveSetting, GetSetting ja GetAllSettings. Laaksosen Antin lyhyt oppimäärä aiheesta löytyy täältä.

Metabolix [05.07.2005 07:18:44]

#

Windowsin fonttiasetuksesta on kai kyse :)

En tiedä, miten itse asetuksia saa muutettua (paitsi kirjoittamalla rekisteriin), ja ainakin minun Windowsini muistaakseni vaatii uudelleenkäynnistyksen, jos asetusta muutetaan. Kuitenkin haluamaani lopputulokseen olen (Delphillä) päässyt asettamalla fonttikoon ajon aikana oikeaksi. DPI:stä (Dots per Inch) tuossa kai perimmiltään on kysymys, eli jos sellainen Formin asetuksista löytyy, niin kannattaa kokeilla. Lisäksi ainakin Delphissä voi normaalin fonttikokomuutoksen lisäksi määrätä fontin todellisen korkeuden, en tiedä, miten VB:ssä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta