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?
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
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..
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?
Hitto. Ainakun tuohon jotain kirjoittaa ja sitten kun sen lähettää niin huomaakin, että pari muuta on jo vastannut siihen.
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ä..
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..
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...).
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...
Joo. Olisi tietysti kannattanut kokeilla tuota endiä ihan maalaisjärjellä. Mutta enpä älynnyt. Ja kuten sanoin, ohjetiedostoa ei ollut...
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.
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.
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...
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.
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...
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
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).
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.
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ä).
Hmm, se kyllä ei lopeta ainakaan mulla. Mikä versio sulla on VB:stä?
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.
Jooh.. kyllä pitäisi ihan End:illä toimia. Areena 5:n ongelma lienee se, että siellä ei Form_Unload:iin ole pistetty Endiä tjsp.
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ä...
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).
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.