Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Muutama Visual Basic -kysymys

Sivun loppuun

Snowblind [17.11.2007 18:51:19]

#

Eli olen aloittelija Visual Basic koodauksessa. Kysynpä seuraavia:

1) Miten saan luettua esim Enterin näpäytyksen yms. muun napin painalluksen? Ja lisäävän 1 den esim johonkin Label:iin. Tarkoituksena olisi tehdä Enterin näpytyspeli

2) Miten voin soittaa musiikkia jostakin .mp3, .vmw stä?

3) Miten voin tehdä KeyGeneraattorin esim: Nimi Snow Serial: 167. Tarkoitus olisi tulla omaan ohjelmaan.

4) Miten voin Logata käyttäjän ulos? Kyseessä olisi tehdä pilailuohjelma.

5) Miten voin esim. kun nappia on painettu, ohjelma lähettää esim. Enter näppäimen painalluksen

6) Miten voin tehdä oman kysymysboxin jossa ovat vaihtoehdot Yes,No ja Oma teksti ja jos mahdollista, niin joku 3sta Windowsin kuvakkeesta.

7) Miten määrittelen tiedoston, joka on samassa kansiossa kuin ohjelmani, muttei esim C:\Program files\jne, ettei tulisi virheitä. Esim omalla koneellani ne olisivat C:\peli\image.bmp ja kaverilla joka on juuri purkanut Rarin jossa on ohjelma ja kuva (C:\ladattupeli\image.bmp), ja ohjelma osaa ladata sen samasta kansiosta kuin itse on.


Minulla on Microsoftin Visual Studio 6

Anteeksi sekavuuteni :)

efteri [17.11.2007 19:17:58]

#

Kannattaisi aloittaa varmaan ohjelmointiputkan visualbasic oppaalla:
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=vbo_1

Antti Laaksonen [17.11.2007 19:27:48]

#

Tässä vastauksia joihinkin kysymyksiin...

1) Käyttäjän näppäilyjä voi käsitellä KeyDown-aliohjelmassa, jossa KeyCode ilmoittaa, mitä näppäintä on painettu. Paitsi formilla myös useimmilla kontrolleilla on oma KeyDown-aliohjelmansa, esim. jos painetaan näppäintä tekstikentässä, painallus käynnistää tekstikentän KeyDown-aliohjelman. Mutta asettamalla formin KeyPreview-ominaisuuden arvoksi True kaikki näppäilyt ohjautuvat kätevästi formin KeyDown-aliohjelmalle, jossa niitä voi käsitellä keskitetysti.

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then
        Label1 = Label1 + 1
    End If
End Sub

Private Sub Form_Load()
    KeyPreview = True
    Label1 = 0
End Sub

2) Yksi ratkaisu on WinAPIn funktio mciSendString, jonka käytöstä on koodivinkki.

3) Keksi jokin matemaattinen kaava, jolla numerosarja saadaan merkkijonosta. Seuraava ohjelma muodostaa koodin laskemalla yhteen kirjainten ASCII-koodit neljänteen potenssiin korotettuina ja ottamalla jakojäännöksen 10000:lla. Tuloksena on merkkijonosta riippuva koodi väliltä 0 - 9999.

Private Sub Form_Load()
    Dim nimi As String
    Dim koodi As Long
    Dim i As Integer
    nimi = InputBox("Kirjoita nimesi:")
    For i = 1 To Len(nimi)
        koodi = koodi + Asc(Mid(nimi, i, 1)) ^ 4
        koodi = koodi Mod 10000
    Next
    MsgBox "Koodi: " & koodi
End Sub

5) Tarkoitatko, että ohjelman pitäisi antaa sellainen vaikutelma, että käyttäjä painaa jotain näppäintä? Tähän tarkoitukseen on olemassa komento SendKeys, jonka käytöstä on koodivinkki.

6) Kuvakkeita on itse asiassa neljä erilaista:

Private Sub Form_Load()
    Dim tulos As Integer
    tulos = MsgBox("Pidätkö kuvakkeesta?", vbYesNo + vbCritical)
    tulos = MsgBox("Pidätkö kuvakkeesta?", vbYesNo + vbQuestion)
    tulos = MsgBox("Pidätkö kuvakkeesta?", vbYesNo + vbExclamation)
    tulos = MsgBox("Pidätkö kuvakkeesta?", vbYesNo + vbInformation)
End Sub

Ohjelman toiminta voi myös vaihtua käyttäjän vastauksen mukaan:

Private Sub Form_Load()
    Dim tulos As Integer
    tulos = MsgBox("Pidätkö kuvakkeesta?", vbYesNo + vbCritical)
    If tulos = vbYes Then
        MsgBox "Sepä hyvä!"
    ElseIf tulos = vbNo Then
        MsgBox "Ikävä juttu!"
    End If
End Sub

7) Saat selville ohjelman oman hakemiston muuttujan App.Path kautta:

Private Sub Form_Load()
    MsgBox "Ohjelma on hakemistossa " + App.Path
End Sub

Snowblind [17.11.2007 21:34:45]

#

Kiitoksia :) Mutta tuossa 1) kohdassa, jos pidän Enteriä pohjassa, niin se lisää automaattisesti. Pitäisi olla, että 1 lisäys per painallus.:)

Blaze [17.11.2007 21:48:14]

#

Snowblind kirjoitti:

Mutta tuossa 1) kohdassa, jos pidän Enteriä pohjassa, niin se lisää automaattisesti. Pitäisi olla, että 1 lisäys per painallus.:)

Laita se laskenta KeyDownin sijasta KeyUpiin.

Antti Laaksonen [17.11.2007 21:53:45]

#

KeyDown-aliohjelman kaveri on KeyUp-aliohjelma, johon tullaan silloin, kun käyttäjä lopettaa näppäimen painamisen. Yksinkertaisin muutos on siirtää laskurin lisäys tähän aliohjelmaan, jolloin luku suurentuu aina, kun käyttäjä päästää irti Enter-napista. Mutta tässä voi olla ongelmana, että laskuri päivittyy väärässä kohdassa, nimittäin vasta kun näppäily on jo ohi. Siksi tässä on vähän monimutkaisempi apumuuttujaa käyttävä ohjelma, jossa Enterin pitäminen pohjassa kasvattaa laskuria vain yhdellä, mutta muutos tulee kuitenkin näkyviin saman tien. Jujuna on säilyttää muuttujassa SaaPainaa tietoa, onko Enter nostettu välillä ylös, ja jos ei ole, uutta "painallusta" ei hyväksytä.

Dim SaaPainaa As Boolean

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If SaaPainaa And KeyCode = vbKeyReturn Then
        Label1 = Label1 + 1
        SaaPainaa = False
    End If
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then
        SaaPainaa = True
    End If
End Sub

Private Sub Form_Load()
    KeyPreview = True
    SaaPainaa = True
    Label1 = 0
End Sub

neau33 [17.11.2007 23:33:50]

#

Moikka Snowblind!

tässä on vastaus, pienessä paketissa, aika moneen kysymykisistäsi...
pienenä vinkkinä: kun testaat & tutkit, käytä mahdollisimman paljon hyödyksesi copy/pastea + putkan Hakua - Google'a jne. (eli siis luet) niin asiat alkavat avautua...

'paina jotain näppäintä
Private Sub Form_Paint()
Dim str1 As String, str2 As String
Dim i As Integer, j As Integer
str1 = "536E6F772053657269616C3A20313637"
ReDim taulu(1 To Len(str1))
Me.BorderStyle = 1
Me.Width = 2000
Me.Height = 1000
Me.AutoRedraw = True
Me.FontSize = 20
Me.FontBold = True
Me.BackColor = &H80000007
Me.ForeColor = &H8000000E
xmsg& = MsgBox("Tahdotko varmasti suorittaa tämän ohjelman?", _
vbYesNo, "Kyselyloota")

If xmsg& = 7 Then End

tiedosto = "C:\Documents and Settings\All Users\Tiedostot\Omat musiikkitiedostot\Musiikkinäytteet\Beethovenin yhdeksäs (Scherzo).wma"
tiedosto = Chr(34) & tiedosto & Chr(34)
Shell "C:\Program Files\Windows Media Player\wmplayer.exe" & " " & tiedosto, vbHide

 For i = 0 To 255
  For j = 1 To Len(str1) Step 2
   If Asc(Chr(CLng("&H" & Mid(str1, j, 2)))) = i Then
    taulu(j) = Chr(i)
   End If
  Next j

  Print String(Me.FontSize / 4 + 2, Chr(32)) & Chr(i)
  Dim xdelay As Single
  xdelay = 0.25 + Timer
  Do While Timer < xdelay: DoEvents: Loop
    Cls
 Next i

 For i = LBound(taulu) To UBound(taulu)
  str2 = str2 & taulu(i)
 Next

 Shell "notepad", vbNormalFocus
 App.Title = "Nimetön - Muistio"
 AppActivate App.Title
 SendKeys str2, True
 End

End Sub

(Mod. edit. Muotoilukeinojen käyttöohjeissa lukee: "käytä säästeliäästi". Olisitko niin ystävällinen? Mukavoittaisi viestiesi lukemista.)

Snowblind [18.11.2007 08:35:11]

#

Tämä aihe onkin jo auttanut minua todella paljon. Kiitos teille! :)

Vielä yksi kysymys, Miten saan midi tiedoston soimaan & looppaamaan? Taustamusiikkia.

Latska [18.11.2007 09:47:35]

#

Olisiko tästä jotain apua?


Sivun alkuun

Vastaus

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

Tietoa sivustosta