WINNEW("",[x],[y],[leveys],[korkeus],,"KALEN",,,[arvot])

Selitys

WINNEW() funktiolla luodaan ikkunoita ja ikkunoiden objekteja. Tällä versiolla luodaan aktiiviseen ikkunaan kalenterinäkymä.
uuden kalenteri-objektin saa luotua vetämällä hiiren kakkosnapilla alaspainettuna sopivan laatikon. Laatikkoon tallentuu tietoa, joka välittyy myös ohjelmalle.

Parametrit

[x] ikkunan oikea reuna pikseleissä kuvaruuden reunasta katsoen. Jos jätetään pois ohjelma käyttää nollaa.
[y] ikkunan yläreuna pikseleissä kuvaruuden yläreunasta katsoen. Jos jätetään pois ohjelma käyttää nollaa.
[leveys] ja [korkeus] ikkunan ulkomitat tai [korkeus] pikseleissä.
"KALEN" on ikkunan tyyli.
[arvot] Vektorimuuttuja listan nimikkeistä.

Palautusarvo

Funktio palauttaa ikkunapidikkeen tai nollan jos funktio epäonnistuu.

Esimerkki

oldwin=setwindow()
windo=winnew("",0,0,640,480)
setwindow(windo)
red=val(left(time(),2))
oo={date(),date()+5,red,}
obs=winnew("",50,45,570,390,,"kalen",,,double(oo))
sendmessage(obs,1024+5,rgb(255,128,0),100)
sendmessage(obs,273,1024+7,double(oo))
jut={}
aadd(jut,{date(),"18:15","18:45","FF00FF 50 150","Lisää",21})
postmes(obs,273,299,double(jut))

setfocus(windo)
DO WHILE .t.
   apu=getmessage()
   DO CASE
      CASE apu=258
           DO CASE
              CASE nappain=27
                   EXIT
           endcase
      CASE apu=273
           DO CASE
              CASE nappain=1024
                   @ 0,0 getlist
              CASE nappain=1024+1
                   aadd(jut,{oo[4,1],oo[4,2],oo[4,3],oo[4,4],15,21})
                   sendmessage(setfocus(),1024+10,double(kentta),0)
           endcase
   ENDcase
ENDDO
setwindow(oldwin)
destroywin(windo)

edit

Erilaiset kalenteri -ikkunoihin lähetettävät ja sieltä vastaanotettavat viestit

Kalenteri -ikkunoihin voi lähettää erilaisia viestejä sendmessage() ja postmes() -funktiolla erilaisten Windowsin omien viestien lisäksi:
(HUOM! näillä esimerkeillä viittaan ylläolevan esimerkin ikkunoihin)

Kun laatikon luominen hiirellä päättyy tai klikataan pistenappia

Kun hiirellä on vedetty kalenteriin laatikko ja hiirinappi vapautetaan ohjelma saa viestin (esim. esimerkissä):
apu=1025 ja getlist saa tällöin nolla. Tällöin kalenteria luodessa annettuun vektoriin (tässä oo) tallentuu seuraavasti:
oo[4,1]=alkupäivä, esim 17.10.2015
oo[4,2]=alkukellonaika, esim. 13:01
oo[4,3]=loppukellonaika, esim. 13:14
oo[4,4]=väri ja palkin korkeus ja leveys, esim. "FF00803 32 222"
Yllä oleva leveys ja korkeus on suhteutettu pikselietäisyyteen päiväreunasta ja päiväleveysteen 170. Jos kalenteri on skaalattuna eri kokoisesti palautusarvo on silti sama. Esim. 32 tarkoittaa, että laatikko alkaa n. 32 pikseliä päiväreunasta ja jatkuu sitten 222 pikseliä oikealle eli jatkuu seuraavaan päivään.
Jos pistenappia on klikattu apu=1026 ja getlist saa kuudennen parametrin sisäisestä vektorista, esim. 21 (esimerkissä).

Kalenterille annetaan arvo

jut={}
aadd(jut,{date(),"18:15","18:45","FF00FF 50 150","Lisää",21})
postmes(obs,273,299,double(jut))
Kun lähetetään viesti 299 ja neljäs parametri on vektori kuten yllä kalenterissä on uusi laatikko
vektori on muotoa: {päivä,"alkukellonaika","loppukellonaika","väri x-reuna leveys","Laatikon teksti",arvo,..}
Huom! kuudes arvo vektorissa palautetaan kun klikataan pistenappia laatikossa.
Väri on RGB arvo hexadesimaalina RRGGBB.
Laatikon sisälle tulevassa tekstissä on olla rivinvaihto CR+LF.
Uuden arvon (samalla voi lähettää useammankin) lähettämiseen on syytä käyttää POSTMES() -funktiota ja sen jälkeen kalenetri tulisi päivittää.

Laita kalenteri aktiiviseksi

sendmessage(obs,273,1024+4,0)
Kun lähetetään viesti 1024+4 (eli 1028) ikkunalle se muuttuu aktiiviseksi.

Siirry kalenterissa päivä eteenpäin

posmes(obs,273,300,0)
Kun lähetetään viesti 300 kalenterin näkymä vierittyy päivän eteenpäin.

Siirry kalenterissa päivä taaksepäin

posmes(obs,273,301,0)
Kun lähetetään viesti 301 kalenterin näkymä vierittyy päivän taaksepäin.

Päivitä kalenteri

sendmessage(obs,273,1024+5,0)
Kun lähetetään viesti 1024+5 (eli 1029) ikku päivittyy.

Päivitä kalenteri ja muuta koko

oo={20,10,150,300} /* {vasen reuna,yläreuna,leveys,korkeus} */
sendmessage(obs,273,1024+6,double(oo))
Kun lähetetään viesti 1024+6 (eli 1030) ikku päivittyy ja sen koko muuttuu.

Kysytään päivä ja tuntileveys

oo={0,0} /* {päiväleveys,rivikorkeus} */
sendmessage(obs,273,1024+7,double(oo))
Kun lähetetään viesti 1024+7 (eli 1031) annettuun vektoriin tallentuu pikseleissä {päiväleveys,rivikorkeus}

Asetetaan rajoite oikeaan reunaan

sendmessage(obs,1024+4,1,0)
Kun lähetetään viesti 1024+4 ja kolmas parametri on ykkönen neljännellä parametrilla voidaan säätää voiko laatikon vetää oiekan rajan yli (nolla=ei voi, 1= voi). Perusasetus on nolla eli ei voi.

Asetetaan perusväri laatikoille ja päiväleveys

sendmessage(obs,1024+5,rgb(255,0,128),100)
Kun lähetetään viesti 1024+5 kolmas parametri on väri ja neljäs päiväleveys.

Muutetaan (kasvatetaan) päiväleveyttä

sendmessage(obs,1024+6,1,double({10})
Kun lähetetään viesti 1024+6 kolmas parametri 1, neljäs parametri asettaa (kasvattaa) päiväleveyttä.
Jos läheteään negatiivinen luku leveys pienenee - ei kuitenkaan alle 20 pikseliä.
Jos annetaan nolla arvoon tallentuu nykyinen leveys (double -funktion sisällä pitää olla muuttuja).

Muutetaan (kasvatetaan) päiväkorkeutta

sendmessage(obs,1024+6,2,double({10})
Kun lähetetään viesti 1024+6 kolmas parametri 2, neljäs parametri asettaa (kasvattaa) päiväkorkeutta.

Muutetaan (kasvatetaan) tuntikorkeutta

sendmessage(obs,1024+6,3,double({10})
Kun lähetetään viesti 1024+6 kolmas parametri 3, neljäs parametri asettaa (kasvattaa) tuntikorkeutta.

Muutetaan (kasvatetaan) varttikorkeutta

sendmessage(obs,1024+6,4,double({10})
Kun lähetetään viesti 1024+6 kolmas parametri 4, neljäs parametri asettaa (kasvattaa) varttikorkeutta.

Katso myös GETMESSAGE(), SENDMESSGE(), POSTMES()