Archief - [PROG]VB6 beginner: geluid afspelen bij VbOkOnly

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

chosen1

Legacy Member
wij hebben bij ons op school dit semester modules en ik heb analytisch denken gekozen waarbij we de laagste basics leren van VB6.

we moesten dus een programma schrijven dat een vierkantsvergelijking oplost (niets moeilijk dus)

ik heb dit gedaan (hier onder staat de code (al die Msgbox'es moesten we er in steken)) maar nu zou ik bij een paar foutmeldingen een ander geluid willen dan het standaard windows geluidje! is dit mogelijk (én niet moeilijk) ?

*edit* ik heb het programma getest en het lijkt perfect te werken maar als jullie nog fouten zien dan zegt ge het maar

Code:
Option Explicit
Dim aget, bget, cget, getX1, getX2, getDisc As Single

Private Sub Calc_Click()
If (atext = "" Or btext = "" Or ctext = "") Then
    MsgBox "Parameters invullen AUB! Ook 0 invullen!", vbOKOnly, "Fout"
    atext.SetFocus
    Else
        aget = CSng(atext)
        bget = CSng(btext)
        cget = CSng(ctext)
        getDisc = bget ^ 2 - 4 * aget * cget
If getDisc > 0 Then
    getX1 = (-bget + Sqr(getDisc)) / 2 * aget
    getX2 = (-bget - Sqr(getDisc)) / 2 * aget
    Disc = CStr(getDisc)
    X1 = CStr(getX1)
    X2 = CStr(getX2)
End If
If getDisc = 0 Then
    getX1 = (-bget) / (2 * aget)
    Disc = CStr(getDisc)
    X1 = CStr(aget)
    X2 = ""
    MsgBox "Discriminant=0 dus 1 oplossing", vbOKOnly, "discriminant=0"
End If
If getDisc < 0 Then
    Disc = CStr(getDisc)
    X1 = ""
    X2 = ""
    MsgBox "Geen oplossing! D<0", vbOKOnly, "Geen oplossing"
End If
End If

    
End Sub

Private Sub New_Click()
    atext = ""
    btext = ""
    ctext = ""
    atext.SetFocus
    Disc = ""
    X1 = ""
    X2 = ""
End Sub

Private Sub End_Click()
End
End Sub

VenomGameworld

Legacy Member
Ik vrees dat dit met de standaard MsgBox functie niet mogelijk is, je kan mss eens zoeken op internet of je een user of custom class ofzo vindt waarbij je dit wel zelf kan bepalen?

Kleine opmerking: ik dacht altijd dat End een abrupte stop aan je programma geeft waardoor er nog gegevens in het geheugen kunnen achterblijven. Je kan beter Me.Close() gebruiken.

chosen1

Legacy Member
VenomGameworld zei:
Ik vrees dat dit met de standaard MsgBox functie niet mogelijk is, je kan mss eens zoeken op internet of je een user of custom class ofzo vindt waarbij je dit wel zelf kan bepalen?

Kleine opmerking: ik dacht altijd dat End een abrupte stop aan je programma geeft waardoor er nog gegevens in het geheugen kunnen achterblijven. Je kan beter Me.Close() gebruiken.

k bedankt! de leerkracht had da zo gebruikt in 1 van haar programma's (temperatuuromzetting) dus heb ik da ook ma gebruikt.

*edit* End vervangen door Me.Close() geeft een compile error

VenomGameworld

Legacy Member
chosen1 zei:
k bedankt! de leerkracht had da zo gebruikt in 1 van haar programma's (temperatuuromzetting) dus heb ik da ook ma gebruikt.

*edit* End vervangen door Me.Close() geeft een compile error

Ow, sorry, dat was de VB.NET variant, in VB6 is het Unload Me.

chosen1

Legacy Member
works like a charm!

nog een vraagje:

ik zou een melding willen geven als A=0 (dit is geen tweedegraadsfunctie)
ik steek dit ertussen:

Code:
If aget = 0 Then
    getX1 = cget / bget
    Disc = CStr(getDisc)
    X1 = CStr(getX1)
    MsgBox "dit is geen tweedegraadsfunctie", vbOKOnly, "geen tweedegraadsfunctie"
End If

maar na dat ik op Ok heb geklikt geeft hij toch de waardes weer van wanneer de discriminant>0

hoe kan ik dit oplossen?

Enygm

Legacy Member
In uw code staat:
Dim aget, bget, cget, getX1, getX2, getDisc As Single

Dit wil zeggen dat ENKEL getDisc een single is. De andere 5 variabelen zijn variants. In VB .Net en C# en de andere talen is dat wil mogelijk, maar in Visual Basic 6 niet.
Je kan dit enkel korter schrijven op de volgende manier:
dim aget as single,bget as single, cget as single, ...

Er is een functie (TypeName(naamVar) ) en die geeft u terug van welk type een variable is. Je moet maar eens hetvolgende intikken

private sub Test()
dim a,b as integer
msgbox Typename(a) & " - " & Typename(b)
end sub

Het resultaat is: Empty - Integer
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan