Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Laskutoimitus aliohjelmassa

tanja [16.01.2007 20:33:51]

#

Hei!

Taas pitäisi apua kysellä viisaammilta tietäjiltä. :) Alla tehtävän anti ja koodit.

Harjoitus 6.3

Muuta vanhaa laskin -ohjelmaa niin, että laskutoimitus tapahtuu aliohjelmassa. Aliohjelmaan (Function) välitetään luku1, luku2 ja laskutoimituksen kuvaava merkki.

Tee virheenkäsittely aliohjelmaan. Esim. tapaus yritetään jakaa 0:lla.

Vanhan laskimen koodi

Private Sub cmdLaske_Click()
    Dim Yksi As Double, Kaksi As Double

    Yksi = Val(txtMuuttuja1.Text)
    Kaksi = Val(txtMuuttuja2.Text)

    If optYhteenlasku.Value = True Then
        lblTulos1.Caption = Yksi + Kaksi
    End If

    If optVähennyslasku.Value = True Then
        lblTulos1.Caption = Yksi - Kaksi
    End If

    If optKertolasku.Value = True Then
        lblTulos1.Caption = Yksi * Kaksi
    End If

    If optJakolasku.Value = True Then
        lblTulos1.Caption = Yksi / Kaksi
    End If

    If optKokonaisluku.Value = True Then
        lblTulos1.Caption = Yksi \ Kaksi
    End If

    If optJakojäännös.Value = True Then
        lblTulos1.Caption = Yksi Mod Kaksi
    End If

    If optPotenssi.Value = True Then
        lblTulos1.Caption = Yksi ^ Kaksi
    End If

End Sub

Private Sub cmdLopeta_Click()
Unload Me
End Sub

Nykyinen yritelmä
Jossa siis funktion sisällä oleva laskutoimitus ei toimi.

Function Laske(Yksi As Double, Toimitus As String, Kaksi As Double) As Double

    Laske = "Yksi Toimitus Kaksi"

End Function

Private Sub cmdLaske_Click()
    Dim Yksi As Double
    Dim Kaksi As Double
    Dim Toimitus As String

    Yksi = Val(txtMuuttuja1.Text)
    Kaksi = Val(txtMuuttuja2.Text)

    If optYhteenlasku.Value = True Then
        Toimitus = "+"
    End If

    If optVähennyslasku.Value = True Then
        Toimitus = "-"
    End If

    If optKertolasku.Value = True Then
        Toimitus = "*"
    End If

    If optJakolasku.Value = True Then
        Toimitus = "/"
    End If

    If optKokonaisluku.Value = True Then
        Toimitus = "\"
    End If

    If optJakojäännös.Value = True Then
        Toimitus = "Mod"
    End If

    If optPotenssi.Value = True Then
        Toimitus = "^"
    End If

    lblTulos1.Caption = Laske(Yksi, Toimitus, Kaksi)

End Sub

Private Sub cmdLopeta_Click()
Unload Me
End Sub

moptim [16.01.2007 20:40:21]

#

Ei. Merkkijonossa olevaa koodia ei voi ajaa kuin muistaakseni .NETillä. Sekin tulkataan erillisenä VBScriptinä. Olen itsekin haaveillut RunVBCode -aliohjelmasta. Tämä aliohjelma tepsisi (anteeksi, sisennykset jäivät):

Function Laske(Luku1 As Double, Luku2 As Double, Toimitus As String,) As Double
Select Case Toimitus
Case "+"
Laske = Luku1 + Luku2
Case "-"
Laske = Luku1 - Luku2
Case "*"
Laske = Luku1 * Luku2
Case "/"
Laske = Luku1 / Luku2
Case "Mod"
Laske = Luku1 Mod Luku2
End Select
End Function

EDIT: Pahoittelen, koodini on suoraan sanottuna PURKKAA. En saanut parempaa.

neau33 [17.01.2007 11:10:32]

#

KingOfTheWorld kirjoitti:

Ei. Merkkijonossa olevaa koodia ei voi ajaa kuin muistaakseni .NETillä. Sekin tulkataan erillisenä VBScriptinä. Olen itsekin haaveillut RunVBCode -aliohjelmasta...

KingOfTheWorld Muistit väärin!

Homma pelaa esim VB6:ssa aivan loistavasti

' Lisää referenssi: Microsoft Script Control 1.0
' jos ei löydy niin lataa alla olevasta URL-osoitteesta
' http://www.microsoft.com/downloads/details.aspx?FamilyID=d7e31492-2595-49e6-8c02-1426fec693ac&DisplayLang=en

'Formille 1 tekstiboxi ja komentopainike

Private Sub Command1_Click()

Dim scriptiKone As MSScriptControl.ScriptControl
 Set scriptiKone = New MSScriptControl.ScriptControl

  strSuorita = "Sub Laske()" & vbCrLf & _
               "vastaus = " & Text1.Text & vbCrLf & _
               "Text1.Text = vastaus" & vbCrLf & _
               "End Sub"

  With scriptiKone
    .Language = "VBScript"
    .AddObject "Form1", Me, True
    .AllowUI = True
    .AddCode strSuorita
    .Run "Laske"
  End With

 Set scriptiKone = Nothing

End Sub

moptim [18.01.2007 20:33:31]

#

Thäh. Enhän minä tuommoista hokannut. En muista nähneeni tuommoista. Näin tuonlaisen skriptimaatin jossain, mutta en nähnyt missään tietoa, että tommonen ScriptControl olisi ollut. *tyhmä minä*

feenix [19.01.2007 09:06:03]

#

KingOfTheWorld kirjoitti:

Ei. Merkkijonossa olevaa koodia ei voi ajaa kuin muistaakseni .NETillä. Sekin tulkataan erillisenä VBScriptinä. Olen itsekin haaveillut RunVBCode -aliohjelmasta. Tämä aliohjelma tepsisi (anteeksi, sisennykset jäivät):

Jos nyt sotkisit vähän faktoja kehiin. .NETissä ei kyllä ajella merkkijonosta koodia saati tulkata sitä ja vielä vähemmän mitään VBScriptiä. Voit kyllä kääntää lennossa koodia assemblyksi ja ajella sieltä mitä haluat.

Tietysti voi jostain kaivaa palikan joka moistakin tekisi muttei se mitenkään .NETiin liity.

tanja [23.01.2007 19:32:23]

#

Kiitos kovasti kaikille! Sain koodin toimimaan ja myös virheenkäsittelyn lisättyä. :)

Vastaus

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

Tietoa sivustosta