Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: kiihdytys ja hidastus ramppi

viljami [01.02.2004 20:18:44]

#

Olisko yksinkertaista koodia tällaseen.

Formilla on 2 nappia kun painan nappia 1 formin korkeus kasvaa 1000 pikkelssiä sillaa että se lähtee hitaasti pitenemään ja kiihtyy kokoajan, on hetken päästä täydessä nopeudessa, ja ennen kun formi on kasvanut 1000 pikkelssillä, alkaa kasvamisnopeus taas hidastua kunnes pysähtyy. Aika hankala selittää...

2 Nappia kun painaa se pienentyy vastaavalla tavalla.

Ymmärrän tuon formin koon muuttamisen ja yleisesti tekniikan jolla se tapahtuu, mutta menee aika vaikeaksi tehdä koodi jossa on case rakenne joka tarkastelee kuinka suuri formi on ja sen mukaan vähentää timer1 intervallia. Onkohan tuohon olemassa jotain vippaskonstia, vai pitääkö vääntää koodia näpinpäät ligkussa :)

rndprogy [01.02.2004 20:36:54]

#

muuta tarpeitteisi mukaan

Private Sub Command1_Click()
kasvaa
End Sub
Sub kasvaa()
Do
q = q + 1
Form1.Height = Form1.Height + q
 If q = 100 Then Exit Do
 Loop
End Sub

Edit: tai äsh kunhan jonkun koodin heitin

tnb [01.02.2004 21:58:16]

#

On teillä vaikeita aiheita:

Dim kasvaa As Boolean
Dim pienenee As Boolean
Dim h0
Dim w0
Private Sub Command1_Click()
kasvaa = True
Timer1.Enabled = True
h0 = Form1.Height
w0 = Form1.Width
End Sub

Private Sub Command2_Click()
pienenee = True
Timer1.Enabled = True
h0 = Form1.Height
w0 = Form1.Width
End Sub

Private Sub Timer1_Timer()

If kasvaa Then
    h = Form1.Height
    w = Form1.Width
    hvauhti1 = (h - h0) / 1000
    hvauhti2 = (8000 - h) / 1000
    wvauhti1 = (w - w0) / 1000
    wvauhti2 = (5000 - w) / 1000

    If hvauhti1 <= hvauhti2 Then
        hvauhti = 100 * hvauhti1 + 1
    Else
        hvauhti = 100 * hvauhti2 + 1
    End If

    If wvauhti1 <= wvauhti2 Then
        wvauhti = 100 * wvauhti1 + 1
    Else
        wvauhti = 100 * wvauhti2 + 1
    End If

    Form1.Height = h + hvauhti
    Form1.Width = w + wvauhti
End If
If (h > 8000) Then
Form1.Height = 8000
End If
If (w > 5000) Then
Form1.Width = 5000
End If
If (h >= 8000) And (w >= 5000) Then
    Timer1.Enabled = False
    kasvaa = False
End If

If pienenee Then

    h = Form1.Height
    w = Form1.Width
    hvauhti1 = (h0 - h) / 1000
    hvauhti2 = (h - 1800) / 1000
    wvauhti1 = (w0 - w) / 1000
    wvauhti2 = (w - 1700) / 1000

    If hvauhti1 <= hvauhti2 Then
        hvauhti = 100 * hvauhti1 + 1
    Else
        hvauhti = 100 * hvauhti2 + 1
    End If

    If wvauhti1 <= wvauhti2 Then
        wvauhti = 100 * wvauhti1 + 1
    Else
        wvauhti = 100 * wvauhti2 + 1
    End If

    Form1.Height = h - hvauhti
    Form1.Width = w - wvauhti
    If (h < 1700) Then
        Form1.Height = 1700
    End If
    If (w < 1500) Then
        Form1.Width = 1500
    End If

    If (h <= 1800) And (w <= 1700) Then
        Timer1.Enabled = False
        pienenee = False
    End If
End If
End Sub

tnb [01.02.2004 22:00:40]

#

Timer1 interval oli 20

setä [01.02.2004 22:49:38]

#

Miksi noin pitkä koodi. Ehdottaisin tämmöstä. Timerin Intervalli edelleen esim. tuo 20.

Dim d as Integer 'kiihtyvyyden suunta
Dim v as Integer 'nopeus
Dim s as Integer 'matka
Dim H as Integer 'Formin korkeus

Private Sub cmdKasva_Click()
   d = 1: v = 0: s = 0
   H = Me.height
   Timer1.Enabled = True
End Sub

Private Sub cmdPienene_Click()
   d = -1: v = 0: s = 0
   H = Me.height
   Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer
   If s < 200 Then
     v = v + d
   else if s > 800 then
     v = v - d
   end if
   s = s + v
   Me.Height = H + s
   If Abs(s) > 1000 Or v < 0 Then
     Me.height = H + 1000 * d
     Timer1.Enabled = False
   End If
End sub

Jos kiihtyvyys ja nopeus liian suuria, käytä desimaalilukuja

Vastaus

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

Tietoa sivustosta