Toon posts:

[VB6] Form resizen zonder border

Pagina: 1
Acties:

Verwijderd

Topicstarter
He, ik ben bezig met een form aan het maken in VB6 die geen border heeft. Deze zit namelijk helemaal vol gestuffed met images. Ik heb nu al uitgevonden hoe je een form kan verplaatsen, maar nu nog het resizen. Heeft iemand tips hoe je dit het beste voor elkaar krijgt?

PS: Stomme vraag, maar in Java kon je % gebruiken om de rest van een deling te bepalen. Hoe doe je dit in VB?

Verwijderd

Ik heb je in dat andere topic al een link gegeven :P

http://www.vbcity.com/forums/faq.asp?fid=6&cat=Forms

Verwijderd

Topicstarter
Maar daarin staat alleen moven. Die heb ik al :( Ik snap dat voorbeeld wel, je kan wel resizen, maar dan mag je window geen caption hebben en dat is bagger, want dan krijg je onderin je taakbalk alleen zo'n leeg vakje. Je krijgt dan trouwens ook een border.

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
Resizen doe je toch gewoon:

Me.Width = 3000
Me.Height = 3000

[ Voor 0% gewijzigd door SWINX op 06-10-2002 19:23 . Reden: klote typo's :( ]

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Verwijderd

Topicstarter
Dat vat ik, maar dan met de muis he ;)

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
je maakt vb. linksonder in je venster een knop met drie diagonale streepjes, zoals je bij sommige apps bijvoorbeeld ziet. Wanneer hier op geklikt wordt zet je de huidige muis posities en huidige grootte van het venster in een variabele. Wanneer de muis verplaatst bereken je op basis van de nieuwe en de oude muisposities, samen met de oude venstergroottes de nieuwe grootte.

Verwijderd

PS: Stomme vraag, maar in Java kon je % gebruiken om de rest van een deling te bepalen. Hoe doe je dit in VB?
4 mod 3 = 1

Verwijderd

Topicstarter
mod, ok, thx :) Ik heb trouwens zitten goochelen! Hier is de uiteindelijke source:

je plaatst eerst dit bovenaan je form om de integers te declareren:
code:
1
2
Dim StretchCornerX As Integer
Dim StretchCornerY As Integer


Dan plaats je de volgende code onder je StretchCorner:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub StretchCorner_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
        StretchCornerX = X
        StretchCornerY = Y
    End If
End Sub

Private Sub StretchCorner_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
        If Me.Height + Y - StretchCornerY <= 6000 Then
            Me.Height = 6000
        Else
            Me.Height = Me.Height + Y - StretchCornerY
        End If
        If Me.Width + X - StretchCornerX <= 6000 Then
            Me.Width = 6000
        Else
            Me.Width = Me.Width + X - StretchCornerX
        End If
    End If
End Sub


PS: Dit is met geluk uitgevonden :) je kan ook de 2 integers weglaten, maar dan looptie niet zo strak. Er zit trouwens ook een beveiliging in dattie niet kleiner wordt als 400x400 pixels :)

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
nu nog verhaaltje met mips (toch?) en pixels uitzoeken :)

Verwijderd

Topicstarter
sowwy? didn't quite catch that :)

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 15:03

johnwoo

3S-GTE

brammetje: twips ;)

VB drukt coordinaten en afmetingen standaard in twips uit (die 6000 in jouw code). Met standaard instellingen gaan er 15 twips in een pixel, maar dat hoeft dus lang niet overal zo te zijn. Gelukkig wordt dit getalletje ook ergens opgeslagen, en wel hier: Screen.TwipsPerPixelX en Screen.TwipsPerPixelY. Voor een minimale grootte van 400x400 pixels zou jouw MouseMove sub er als volgt uitzien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub StretchCorner_MouseMove(Button As Integer, Shift As Integer, _
    X As Single, Y As Single)

    If Button = vbLeftButton Then
        If Me.Height + Y - StretchCornerY <= 400 * Screen.TwipsPerPixelY Then
            Me.Height = 400 * Screen.TwipsPerPixelY
        Else
            Me.Height = Me.Height + Y - StretchCornerY
        End If
        If Me.Width + X - StretchCornerX <= 400 * Screen.TwipsPerPixelX Then
            Me.Width = 400 * Screen.TwipsPerPixelX
        Else
            Me.Width = Me.Width + X - StretchCornerX
        End If
    End If
End Sub


Overigens vind ik dat persoonlijk nogal storend in VB, ik reken liever alles met pixels. Gelukkig kun je de scalemode van client areas op pixels zetten, maar dan nog zijn er twee nadelen: 1) je moet voor iedere client area de scalemode opnieuw op pixels zetten (zou eigenlijk een ambient property moeten zijn imho, dus je stelt het 1 keer op pixels in en vervolgens staat ieder control dat je maakt meteen op pixels), en 2) het werkt alleen in client areas, dus de nonclient afmetingen van je form moet je nog steeds in twips opgeven :(

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Demo
  • Registratie: Juni 2000
  • Laatst online: 28-08 21:19

Demo

Probleemschietende Tovenaar

Even een kleine opmerking: de mouse-events geven volgens mij de X en Y waarde door als Single, dus ik denk dat je je StretchCornerX en Y als singles moet declareren. (nu werkt het ook wel, maar langzamer en een kans op errors)

[ Voor 0% gewijzigd door Demo op 07-10-2002 14:14 . Reden: typo ]

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done

Pagina: 1