Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Kalenterikontrolli

Sivun loppuun

TJR [23.12.2004 10:56:00]

#

Olen juuri aloittanut tutustumisen visual basiciin, tarkoitus olisi saada aikaiseksi kalenteri jossa voisi
käyttää vb omaa kalenteri komponenttia. Miten sen saisi toimimaan niin, että päivämäärää klikkaamalla saisi tehtyä tiedoston johon voisi tallentaa siihen päivämäärään kohdistuvia merkintöjä ?

Antti Laaksonen [23.12.2004 11:15:56]

#

Kyseessä on varmaan nyt MonthView-kontrolli?

Kalenterin klikkaus aiheuttaa DateClick-tapahtuman, jonne voit panna sopivan koodin. Vastaava tapahtuma kaksoisklikkauksen jälkeen on DateDblClick. Molemmissa DateClicked-parametri ilmoittaa valitun päivämäärän.

Päivämäärän saa milloin tahansa selville Value-ominaisuudesta.

Sitten vain lisäät tekstilaatikon ja napin, jota painamalla teksti tallentuu kalenterista valitun päivämäärän mukaiseen tiedostoon. Samaan tapaan merkinnät haetaan kalenterissa liikkuessa, jos oikeanniminen tiedosto on olemassa.

TJR [23.12.2004 13:33:21]

#

ja vielä muutama tyhmä kysymys lisää...

- Eli noilla ohjeilla sen pitäisi toimia niin, että jos olen tallentanut jollekkin päivämäärälle aikaisemmin tekstiä yms. niin löydän sen jatkossa klikkaamalla kyseistä päivämäärää kalenterista?

- Onnistuuko samoilla ohjeilla, jos teen sen "microsoft Calendar Control 8.0" komponenttiä käyttäen?

Antti Laaksonen [23.12.2004 13:37:27]

#

- Joo.

- Ei välttämättä ihan samoilla, mutta samantapaiset ominaisuudet ja tapahtumat siinäkin takuulla on.

tuomas [23.12.2004 13:41:09]

#

Jotta data säilyisi sinun täytyy tallentaa se jonnekin, esimerkiksi tekstitiedostoon ja ladata data sitten sieltä käsin ohjelmaan oikeiden päivämäärien kohdalle.

Tässä esimerkki tiedostoon tallentamisesta:

'Taulukot joissa on kuukauden ajalta datat.
Dim Aika(1 to 31) As Date
Dim Teksti(1 To 31) as String
'app.path tarkoittaa ohjelman polkua.
Open App.Path & "\kalenteri.dat" for output as #1
     'käydään läpi taulukoiden jokaiset solut
     For I = 1 to 31
         Print#1, Aika(i) & "|" & Teksti(i) & vbcrlf
     Next
Close #1

Datan latauksen jätän sitten sinun itsesi pähkäiltäväksi.
Vihjeeksi kuitenkin Split niminen funktio ja https://www.ohjelmointiputka.net/hak/?kieli­=Visual Basic&alue=Merkkijonot

Metabolix [23.12.2004 13:46:43]

#

Tuo Antin tapa on varmaankin helpompi, eli jokaiselle päivämäärälle oma tiedosto. Silloin ei tarvitse pähkäillä sitä, miten erottaa eri päivät toisistaan.

tuomas [23.12.2004 13:57:20]

#

Tulee vain vähän turhan paljon filuja ja niiden latausta.
No, kukin tehköön parhaaksi katsomallaan tavalla.

TJR [23.12.2004 19:01:18]

#

Antti Laaksonen kirjoitti:

Kalenterin klikkaus aiheuttaa DateClick-tapahtuman, jonne voit panna sopivan koodin.

Voisitko antaa noviisille vielä vähän apuja, mikä mahtaisi olla "sopiva koodi"?

tuomas [23.12.2004 19:19:54]

#

Sopivalla koodilla tarkoitettiin sitä koodia, jota ohjelmasi kuuluu tehdä tuossa DateClick proseduurissa. Eli se koodi joka suoritetaan jotakin päivämäärää tuossa kalenterissa klikatessa.

TJR [23.12.2004 19:32:13]

#

kokeilin tuolla sinun antamalla koodinpätkällä ja sain aikaiseksi dat tiedoston. vielä jää arvoitukseksi miten saan sen datan ladattua.

Antti Laaksonen [23.12.2004 19:43:30]

#

Tässä tulee oma ratkaisuni, johon kuuluvat kontrollit MonthView1, Text1 ja Command1.

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
    Dim tnimi As String
    ' muodostetaan tiedoston nimi
    tnimi = App.Path & "\" & DateClicked & ".txt"
    ' jos tiedosto on olemassa, luetaan sen tiedot tekstilaatikkoon
    If Dir(tnimi) <> "" Then
        Open tnimi For Input As #1
        Text1.Text = Input(LOF(1), #1)
        Close #1
    ' muuten tyhjennetään tekstilaatikko
    Else
        Text1.Text = ""
    End If
End Sub

Private Sub Command1_Click()
    Dim tnimi As String
    ' muodostetaan tiedoston nimi
    tnimi = App.Path & "\" & MonthView1.Value & ".txt"
    ' kirjoitetaan tiedostoon tekstilaatikon sisältö
    Open tnimi For Output As #1
    Print #1, Text1.Text
    Close #1
End Sub

Merkinnät tallennetaan ohjelman kanssa samaan hakemistoon, kukin omaan tiedostoonsa. Tälle päivälle merkityt tiedot esimerkiksi tallennetaan tiedostoon 23.12.2004.txt. Kun kalenterista valitaan päivä, ladataan siihen liittyvät merkinnät tai tiedoston puuttuessa tyhjennetään tekstilaatikko. Kun napista painetaan, tekstilaatikkoon kirjoitetut tiedot tallennetaan kalenterista valitun päivän kohdalle.

TJR [23.12.2004 20:16:29]

#

kiitos, toimii tosi hienosti

TJR [25.12.2004 11:38:54]

#

vielä yksi kysymys aiheeseen: jos haluan tallentaa text tiedostot erilliseen tiedostoon enkä samaan kuin missä itse ohjelmaa sijaitsee, niin mihin kohtaan tämän erillisen tiedoston polku kirjoitetaan ?

Blaze [25.12.2004 11:49:33]

#

No tuo Laaksosen koodihan kirjottaa ne erillisiin tiedostoihin. Vai tarkotikko kenties hakemistoja?
No, joka tapauksessa, tuossa esimerkissä se hakemistopolku sijaitsee tuossa tnimi -muuttujassa. Tuo App.Path palauttaa aina sen hakemiston, josta ohjelmaa ajetaan, sen tilalel voi laittaa jotain muuta.

TJR [26.12.2004 18:46:41]

#

On tämä alku hankalaa ! voisiko joku vielä ystävällisesti antaa vinkin, miten saan tulostettua printterille haluamani teksti tiedoston (esim: auki olevan päivän)

sooda [26.12.2004 18:52:44]

#

Tekstifilun ulostus on aika helppoa. Printer-oliolla on samanlainen print-metodi kuin pictureboxilla, eli Printer.Print "Moi" printtaa Moi-tekstin. Ton kanssa kannattaa sitten mittailla vähän että rivittää tekstin oikein ettei se mene "paperin ulkopuolelle". Taisi olla Printer.EndDoc joka sitten kertoo printterille että nyt saa sylkeä paperin ulos. Printtaaminen kannattaa aluksi harjoitella vaikka pictureboxilla.

TJR [26.12.2004 20:02:54]

#

joo nyt saan tulostettua jo paperille asti. millä koodin pätkällä saisin tulostettua kalenteri kyhäelmästä aina auki olevan kyseisen päivämäärän kokonaisuudessaan. nyt se tulostaa vain ensimmäisen rivin ?

tuomas [26.12.2004 21:05:43]

#

Miten säilytät tietoja? Tiedot jossain taulukossa yms?
Laita vaikka printtaus koodin tähän näkyviin.

TJR [26.12.2004 21:23:31]

#

tiedot tallentuvat jokainen omaan tiedostoon (.txt)

Private Sub tulosta_Click()
Printer.Print Text1.Text
Printer.EndDoc
End Sub

ongelma ilmenee ainoastaan silloin kun teksi ylittää teksikentän eli ei mahdu kenttään, vaan jatkuu seuraavalla rivillä. jos kirjoitan useampia rivejä mutta rivit mahtuvat teksti kenttään, niin silloin ne tulostuvat omille riveillensä.

esim: tämä tulostuu oikein, kaikki rivit tulevat paperille.

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
    Dim tnimi As String
    ' muodostetaan tiedoston nimi
    tnimi = "C:\Kalenteri\loki" & "\" & DateClicked & ".txt"
    ' jos tiedosto on olemassa, luetaan sen tiedot tekstilaatikkoon
    If Dir(tnimi) <> "" Then
        Open tnimi For Input As #1
        Text1.Text = Input(LOF(1), #1)
        Close #1
    ' muuten tyhjennetään tekstilaatikko
    Else
        Text1.Text = ""

mutta tämä ei tulostu kuin ensimäisellä rivillä

AAAAA­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AA­A­AAAAA.


Sivun alkuun

Vastaus

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

Tietoa sivustosta