Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: vb-kysymyksiä...

Sivun loppuun

Vilikki [28.09.2002 20:54:09]

#

Aloittelin ohjelmoimaan taas vb:llä, ja kun siitä on niin pitkä aika, kun viimeksi ohjelmoin vb:llä, niin mieleen tuli tietysti muutama kysymys:

1. Miten ohjelman voi lopettaa?
2. Missä on sellainen mittari, joka on samanlainen, kuin jossain asennusohjelmassa (näyttää prosentteina asennuksen tilan).
3. Sitten kanssa sellainen toisenlainen mittari, valitettavasti en oikein muista, missä olisin sellaista viimeksi nähnyt. Sellainen, jossa näkyy katkonaisina, ei kokonaisina, kuten tuo toinen kaivattu mittari.
4. Onko olemassa API-funktiota, joka näyttää, kuinka pitkään windows on ollut päällä?
5. Miten sai suoritettua jonkun toisen ohjelman vb-ohjelmasta?
6. Koneen sammutus ja uudelleenkäynnistys? Nämäkin oli API-kutsuja...

Ja sitten, Antti, milloin se faq-osio näillä näkymin tulee?

Gevil [28.09.2002 21:06:49]

#

1. Siis lopettaa? Siis koodilla kuinka lopetetaan? Riippuu ihan tilanteesta. End, Unload Me..jne..

2. Paina toolboxia kakkosnapilla->components->Iske ruksi kohtaan Microsoft Windows Common Controls X->ok->klikkaa toolboxin "progressbar"-komponenttia->iske formiin

3.Siis mitenkä.. hmm.. tarkotitkohan sä sittenki tota progressbaaria tässä.. jos tarkotit niin tohon ylempään saattas käydä statusbar.. sen saa ihan samalla menettelyllä..

4. En tiedä, katoppa jos API-viewerillä löytys jotain..

5.

Shell(pathname[,windowstyle])

6.

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Public Enum ShutDownEnum
Logoff = 0
ShutDown = 1
Reboot = 2
Force = 4
End Enum

Function Sammuta(lFlag As ShutDownEnum) As Integer
Dim lRetCode As Long
lRetCode = ExitWindowsEx(lFlag, 0&)
End
End Function

Gevil [28.09.2002 21:09:04]

#

Noi ylemmät moduuliin..
Meniköhän toi 6 kohta nuin... en jaksanu testata.. formissa sitten vois kutsua esim..

Sammuta ShutDown

ENKÄ OTA MITÄÄN VASTUUTA JOS KONEES HAJOAA! Ihan omalla vastuullas saat leikkiä noilla..

Pekka Kauppila [28.09.2002 21:12:50]

#

1. End
4. olisikohan ollut GetTickCount
5. Shell
6. http://www.allapi.net

Visual Basicissa on ohje josta voi lukea ja katsoa esimerkkejä ja ohjelmoitiputkassa on vinkkejä/oppaita sitä varten, että kaikkein yksinkertaisimpia kysymyksiä, ei tarvi kysellä täällä. Tässä sitä on taas niistä "turhista" vinkeistä apua. Olihan tuossa ihan asia kysymyksiäkin, eli ei millään pahalla.

Tulee muuten tässä mieleen, että oppiiko sitä koskaan ohjelmoimaan kun aina ollaan ensimmäisenä kysymässä muilta neuvoa eikä vaivauduta itse ajattelemaan mitään?

Pekka Kauppila [28.09.2002 21:14:02]

#

Hitto. Ainakun tuohon jotain kirjoittaa ja sitten kun sen lähettää niin huomaakin, että pari muuta on jo vastannut siihen.

Gevil [28.09.2002 21:16:04]

#

Antaa pojan kysyä jos ei muualtakaan löydä.. voihan olla että poika on warettanu VB:n ja ei oo helppejä eikä API-viewereitä.. eikä sitä aina jaksa rueta kyllä ettimäänkään niistä..

Gevil [28.09.2002 21:17:05]

#

lainaus:

Hitto. Ainakun tuohon jotain kirjoittaa ja sitten kun sen lähettää niin huomaakin, että pari muuta on jo vastannut siihen.

Näin tuppaa käymään aika usein..

Vilikki [28.09.2002 21:33:32]

#

Vb oli ilmainen, eli ei helppiä ja ei pysty kääntämään exejä. 6:sen löysin itsekin apiviewerillä (imuroin sitä samalla kun lähetin tuon kysymyksen...).

Antti Laaksonen [28.09.2002 22:32:11]

#

Nämä kysymykset olivat kyllä ihan hyviä, paitsi ehkä tuo ensimmäinen. Sitä vartenhan tämä keskustelualue on, että voi kysyä suomeksi ongelmiinsa apua, eikä tarvitse tutkia tuntikaupalla ohjetiedostoja.

lainaus:

Hitto. Ainakun tuohon jotain kirjoittaa ja sitten kun sen lähettää niin huomaakin, että pari muuta on jo vastannut siihen.

Näin tapahtuu välillä, mutta sille ei oikein voi mitään. Ellei vastausskripti sitten tarkistaisi, ettei sivun latauksen jälkeen aiheen viestien määrä ole lisääntynyt.

lainaus:

Ja sitten, Antti, milloin se faq-osio näillä näkymin tulee?

Informaatiota asiasta pitäisi tulla jo tänä iltana jos jaksan kirjoittaa...

Vilikki [28.09.2002 22:42:35]

#

Joo. Olisi tietysti kannattanut kokeilla tuota endiä ihan maalaisjärjellä. Mutta enpä älynnyt. Ja kuten sanoin, ohjetiedostoa ei ollut...

Vilikki [29.09.2002 09:57:42]

#

Vielä yksi kysymys (ainakin (kunpa faq tulisi pian...)). Jos kirjoittelen textiin vaikka C:\windows\calc.exe, ja sitten painaisin nappia, niin se suorittaisi sen ohjelman. Käytän sitä shellexecute-vinkkiä. Joten, kysymys olisi, että miten saisi sellaisen tarkistuksen, joka sitten herjaisi, jos textiin on vaikka kirjoitettu ohjelman nimi väärin.

thefox [29.09.2002 11:16:49]

#

lainaus:

Tulee muuten tässä mieleen, että oppiiko sitä koskaan ohjelmoimaan kun aina ollaan ensimmäisenä kysymässä muilta neuvoa eikä vaivauduta itse ajattelemaan mitään?

Kannatan jokaiselle että etsii ensin edes puoli tuntia vastausta kysymykseensä ihan omin avuin. Yleensä etsivä löytää vastauksen ja paljon muutakin hyödyllistä tietoa siinä matkan varrella.
Itsellä ei ole tullut hirveästi koskaan kysymyksiä esitettyä koska silloin kun itse opettelin esim BASICiä ei esimerkiksi tällaisia keskustelualueita pahemmin ollut (en ainakaan niistä tiennyt).
On paha sanoa, onko oppiminen mennyt näiden ansiosta vaikeammaksi vai helpommaksi.. veikkaisin kuitenkin tuota jälkimmäistä. Jatketaan.

Vilikki [29.09.2002 11:30:02]

#

Ei helkkari, vastaus löytyikin tuolta koodialueelta, ja vasta kun vannoin itselleni, että selaan huolellisesti läpi ainakin oppaat ja koodivinkit täältä, ennen kuin lähden kysymään...

Gevil [29.09.2002 16:35:10]

#

Heh, ihan kuten mäkin vannoin että mä luen pitkän matikan loppuun :D ei noi itselleen vannomiset oikein pidä aina.. tänään pitäs lukee fysiikkaa, sekin on tullut vannottua.. saas nähä :D mut hyvä kun löysit vastauksen.

Antti [30.09.2002 10:44:37]

#

Vilikki:
1. Ohjelmallisesti käsky on End... jos taas jäät looppiin debug-tilassa saat ohjelman suorituksen pysähtymään paimamalla Alt-Brake.
Gevil: Unload Me komento sammuttaa vain formin jossa käsky suoritetaan, mutta jos ohjelma käynnistyy Main-loopista (Sub Main) Unload Me ei lopeta ohjelman suoritusta.

2. Aiotko tehdä oman asennusohjelman? Ei kannata. VB:n työkaluista löytyy Package & Deployment Wizard, jonka avulla voit luoda asennuspaketin ohjelmallesi. Se hoitaa myös kaikki sidokset ja asennuspaikat kohdalleen.

Progressbarille pitää antaa arvo, jonka se näyttää - se ei automaattisesti tiedä mitään mistään prosessista:

ProgressBar1.Min=0
ProgressBar1.Max=100
' Aseta arvo
ProgressBar1.Value=50

Tuo asettaa minimi- ja maksimiarvot.
Arvoa voi muuttaa miten haluaa...

Muihin taisit saadakkin riittävät vastaukset...

Gevil [30.09.2002 14:17:08]

#

Antti, olen varsin tietoinen asiasta. End ei kyllä lopeta koko ohjelmaa, jos on availlut formeja ja ei ole niitä Unloadannut. Pari vuotta sitten ihmettelin itse miksi ohjelma jäi pyörimään alle vaikka sitä oli Endillä komennettukin sammumaan.. ja syyhän oli siis se et ei tosiaan ollu Unloadia tullut pistettyä.. Unload Meen pistin tohon sen takia et sillä voi formin sammuttaa.. kuten siellä sanoin niin tilanteesta riippuen käytetään mitä käytetään.. endiä tai unloadia jos pitää yksi formi sammutella ja niin edelleen..

Hmm.. eikös se vielä ollutkaan se vbcode lisätty.. nykyään siis näköjään käytössä pelkästään vbkoodi

Antti Laaksonen [30.09.2002 17:29:48]

#

lainaus:

2. Missä on sellainen mittari, joka on samanlainen, kuin jossain asennusohjelmassa (näyttää prosentteina asennuksen tilan).

Itse tekisin tällaisen itse VB:n peruskontrolleilla - pieneen ohjelmaan tuollainen kirjasto on vähän raskas. Shapella ja PictureBoxilla saa jo aika hyvän.

lainaus:

Hmm.. eikös se vielä ollutkaan se vbcode lisätty.. nykyään siis näköjään käytössä pelkästään vbkoodi

Nyt tämän ongelman pitäisi olla poissa, tästä lähtien kooditageiksi kelpaavat koodi ja code (tavallinen), vbkoodi, koodivb ja vbcode (VB-koodi) ja qbkoodi, koodiqb ja qbcode (QBasic-koodi).

Vilikki [30.09.2002 18:17:41]

#

lainaus:

Vilikki:
2. Aiotko tehdä oman asennusohjelman? Ei kannata. VB:n työkaluista löytyy Package & Deployment Wizard, jonka avulla voit luoda asennuspaketin ohjelmallesi. Se hoitaa myös kaikki sidokset ja asennuspaikat kohdalleen.

En aikonut. Kysyin ihan pelkkää mielenkiintoani. En nyt muista, oliko siinä minun vb:ssä mukana package & deployment wizard, mutta eiköhän noita asennusohjelmasysteemejä löydy jostain.

Antti [02.10.2002 11:21:19]

#

lainaus:

End ei kyllä lopeta koko ohjelmaa, jos on availlut formeja ja ei ole niitä Unloadannut. Pari vuotta sitten ihmettelin itse miksi ohjelma jäi pyörimään alle vaikka sitä oli Endillä komennettukin sammumaan.. ja syyhän oli siis se et ei tosiaan ollu Unloadia tullut pistettyä..

Kyllä End-komento lopettaa koko säikeen suorituksen riippumatta siitä onko lomakkeita ladattuna vai no... Riippumatta myös siitä missä se kutsutaan, kunhan se vain on saman projektin sisällä. (eli ei dll:ssä).

Gevil [02.10.2002 16:27:05]

#

Hmm, se kyllä ei lopeta ainakaan mulla. Mikä versio sulla on VB:stä?

Antti Laaksonen [02.10.2002 21:59:09]

#

Kyllä End:in pitäisi lopettaa ohjelma joka tilanteessa. Tosin välillä ohjelma tuntuu jäävän EXE-tiedostona taustalle pyörimään vaikka sen olisikin lopettanut. Tällainen ongelma on mm. Areena 5 -pelissä. Oli siihen jokin ratkaisukin, vaan kun en muista mikä. Tai sitten se oli juuri tämä Unload - End -homma.

thefox [02.10.2002 22:05:51]

#

Jooh.. kyllä pitäisi ihan End:illä toimia. Areena 5:n ongelma lienee se, että siellä ei Form_Unload:iin ole pistetty Endiä tjsp.

tuobbi-89 [02.10.2002 22:14:58]

#

lainaus:

Oli siihen jokin ratkaisukin, vaan kun en muista mikä. Tai sitten se oli juuri tämä Unload - End -homma.

Ainakin VB-oppaassa oli yhdessä esimerkissä tämmönen:

Private Sub Form_Unload(Cancel As Integer)
    'ohjelma sulkeutuu varmasti
    End

En voi olla ihan varma, oliko tuo se kaipaamanne, mutta ehkä...

Antti [03.10.2002 14:25:37]

#

Toi oli väärin päin... kyse on siitä lopettaako End koko säikeen suorituksen vai ei.

Itselläni on Visual Studio 6 Enterprise SP5 eli viimeisin ennen .NET versiota.

Tarkistin asian MSDN:stä joka sanoi asiasta seuraavaa:
End Terminates execution immediately. Never required by itself but may be placed anywhere in a procedure to end code execution, close files opened with the Open statement and to clear variables.

Sellaista... Ainoa mahdollisuus on jos ohjelma avaa toisen ohjelman suorituksensa aikana uuteen säikeeseen (Shell Toinen.exe).
Tuo tapa on tosin tuomittava hyvän ohjelmointitavan kannalta, koska virhetilanteissa ei voida muistia tyhjentää ja ohjelman suoritusta lopettaa - kyseessä on vb:n kannalta sama kuin jos C:ssä jättäisit muistivaraukset roikkumaan(malloc).

Gevil [03.10.2002 17:27:36]

#

lainaus:

Jooh.. kyllä pitäisi ihan End:illä toimia. Areena 5:n ongelma lienee se, että siellä ei Form_Unload:iin ole pistetty Endiä tjsp.

Eiku! Nyt mä muistin väärin, muistaakseni.. hmm.. öh.. sori.. siis niinpäin se olikin, että End lopettaa koko projektin totta.. olit oikeassa Antti.. Mutta niinhän se oliki, että jos sen sammuttaakin siitä X-napista niin se jää alle, ellei ole kaikkia formeja erikseen unloadannu.. Joko siis unloadaa erikseen tahi pistää tonne Form_unloadiin Endiä.. Juu. Näin se tais (muistaakseni) olla.

trinit [03.10.2002 19:37:24]

#

Kaikki avonaiset formit saa suljettua näinkin (löytyy myös VB:n ohjeista):

Private Sub Form_Unload(Cancel As Integer)
    For i = 0 To Forms.Count - 1
       Unload Forms(i)
    Next i
End Sub

Tosin, ei tuo minulla ainakaan ole toiminut joka kerta oikein - välillä muistiin jää avonaisia formeja eikä ohjelmaa saa lopetettua.


Sivun alkuun

Vastaus

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

Tietoa sivustosta