WINNEW([otsikko],[x],[y],[leveys],[korkeus],[arvo],"t",[maski],[id-arvo],[muuttuja])

Parametrit

[otsikko] Ei käytössä. Tyhjä teksti "" tai pois.
[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ä. Näissä ei ole mukana Windowsin mahdollisesti luomia kelauspalkkeja, jotka ovat lisää.
[arvo] on ikkunan erikoistyyli, kt. esimerkki ja kt. tyylit. Yleensä jätetään tyhjäksi
[maski] Ei käytössä. Nolla tai pois.
[id-arvo] Ei käytössä. Nolla tai pois.
[muuttuja]
vektori, jossa on taulukkoon tarkoitetut rivit ja sarakkeet ja niiden määritykset, otsikot ja muut lisätoiminnot.
Muuttujan ns. osoite lähetään funktiolle double() -funktolla.
Kt. esimerkki.

Palautusarvo

Funktio palauttaa ikkunapidikkeen tai nollan jos funktio epäonnistuu.

Selitys

Tällä funktiolla luodaan kuvaruutuun taulukko sille annetusta vektorista.
Mikäli taululla on aliohjelma se saa nappain=5000 kun valintapalkin sijainti vaihtuu.

Esimerkki

van=setwindow()
ikku=winnew("Test",0,0,500,300)
setwindow(ikku)
table={} /* taulukon arvot muodostavat siis 4 x 3 matriisin taulukon: */
aadd(table,{{0,0},"Seppä","Matti Meikäläinen",2500,1})
/* arvoissa 1. sarake on ruksattava kohta {1,0}- 1 tarkoittaa, että rasti on päällä.
Jokaisella rivillä voi olla omantyylinen arvo, esim. rivillä 3 ei ole ruksattavaa kohtaa */

aadd(table,{{1,0},"Maalari","Laila Lappalainen",3000,2})
aadd(table,{55,"Merimies","Seppo Suomalainen",2950,3})
fo1=choosefont("Arial,8",,1,1)
/* vektori koostuu kahdesta osasta {asetukset (7 kpl),taulukon arvot} : */
apu1={array(7),table}
apu1[1,1]=ikku /* 1. asetus on ikkuna, johon taulukko tulee */
apu1[1,2]=fo1 /* 2. asetus on fontti, jota käytetään taulukossa */
apu1[1,3]="ohjel"
/* 3. asetus on aliohjelma, joka saa näppäinarvon, esim. nuoli-alas on 40, hiiriklikkaus 3, hiirikakkosnappiklikkaus 2, tuplaklikkaus -3 */
apu1[1,4]={"","Ammatti","Etunimi ja;sukunimi","Palkka"}
/* 4. asetus on otsikot - voi jättää myös pois. Mikäli otsikko halutaan jautuvan useampaan riviin käytetään puolipistettä ";" -rivierottimena */
apu1[1,5]=4 /* 5. asetus on kuinka monta saraketta on tarkoitus käyttää - voi jättää myös pois, jolloin ohjelma käyttää kaikkia sarakkeita.
Tässä käytetään neljää saraketta, vaikka taulukolla on itse asiassa viisi arvoa per rivi - viimeinen sarake on piilossa */

apu1[1,6]={50,100,{120,150},80}
/* 6. asetus on vektori, jossa on kerrottu sarakkeiden leveydet.
Mukana on myös pistenappimääritys sarakkeeseen 3: {sarakkeen leveys 120, pistenapin arvo}.
Jos klikataan sarakkeen pistenappia taulukon aliohjelma "ohjel" saa nappain-arvon 150 */

apu1[1,7]={,,,"9,999.99"}
/* 7. asetus on vektori, jossa on kerrottu sarakkeiden formatointimaskit.
Vain numeroita formatoidaan. Voi jättää pois kokonaan tai sarakekohtaisesti */

tab1=winnew(,15,5,352,150,,'t',,,double(apu1))
createbutton('|Kokeile',355,390,220,80,25,2,1)
DO WHILE .t.
   apu=getmessage()
   DO CASE
      CASE apu=256
           DO CASE
              CASE nappain=27
                   EXIT
           endcase
      CASE apu=273
           DO CASE
              CASE nappain=355
                   ? timeh()
            endcase
   ENDcase
ENDDO
deleteobject(fo1)
setwindow(van)
destroywin(ikku)

procedure ohjel
@ 7,0 say nappain

edit

Erilaiset taulukko -ikkunoihin lähetettävät viestit ja kyselyt

Taulukko -ikkunoihin voi lähettää erilaisia viestejä winstatus(), sendmessage() ja postmes() -funktiolla erilaisten Windowsin omien viestien lisäksi:
(HUOM! näillä esimerkeillä viittaan ylläolevan esimerkin taulukkoon, tab1)
Mikäli funktiolle on määritetty aliohjelma klikkaamalla taulukko aliohjelma saa viestin 3, tuplaklikkamalla viesti on -3.

Kysytään nykyinen rivi

i2=winstatus(tab1)
Kun lähetetään oheinen kysely taulukolle funktio palauttaa numeron, joka kertoo millä rivillä musta tai harmaa palkki on.
HUOM! i2 ei saa olla vektorimuuuja (kt. alla oleva ohje).

Tallennetaan muuttujaan taulukon arvot

i2={}
i2=winstatus(tab1)

Kun lähetetään oheinen kysely taulukolle ja muuttuja, johon arvo palautetaan on ennestään vektori funktio palauttaa taulukon tämän hetkiset arvot vektorina.
Esimerkissä i2 saisi siis arvot {{{0,0},"Seppä",...jne...,2950}} ja esim. i2[3,2]="Merimies".
Toinen tapa (suositeltavampi) on antaa käsky: sendmessage(tab1,1024+4,3,double(i2)).

Lisätään rivi (rivi annettu)

winstatus(tab1,1)
Kun lähetetään oheinen kysely taulukolle funktio lisää taulukkoon uuden rivin ja siirtyy yhden rivin alaspäin mikäli taulukko on aktiivisessa ikkunassa.
Toiseen parametriin on syytä antaa rivinumero, jolla nyt ollaan. Esimerkissä ollaan rivillä 1.
Mikäli aliohjelma on käytössä ja taulukko on aktiivisessa ikkunassa se saa viestin 40 (nuoli alas).

Lisätään rivi yläpuolelle

winstatus(tab1,0)
Kun lähetetään oheinen kysely taulukolle funktio lisää taulukkoon uuden rivin nykyisen rivin yläpuolelle ja siirtyy yhden rivin ylöspäin.
Toiseen parametriin annetaan nolla.

Poistetaan rivi (rivi annettu)

winstatus(tab1,-3)
Kun lähetetään oheinen kysely taulukolle funktio poistaa rivin 3 (numero annetaan negatiivisena).

Kysytään rivi ja sarake -arvot

winstatus(tab1,num1,num2)
Kun lähetetään oheinen kysely taulukolle funktio tallentaa muuttujaan num1 rivinumeron ja num2 muuttujaan sarakkeen.
Palautusarvoa ei saa olla winstatus() -funktiolle ja parametrit 2 ja 3 pitää olla tavallisia muuttujia - ei vektoreita eikä kenttiä.

Halutaan tietää jonkin kohdan arvo

arvo=winstatus(tab1,num1,num2)
Kun lähetetään oheinen kysely taulukolle funktio palauttaa mitä on rivin num1 sarakkeessa num2 oleva arvo.
Esim. arvo=winstatus(tab1,3,2) tallentaa arvo -muuttujaan "Merimies".

Laitetaan jokin arvo taulukkoon

winstatus(tab1,1,2,"Lukkari")
Oheinen käsky tallentaa taulukkoon riville 1, sarakkeeseen 2 "Seppä" tekstin tilalle "Lukkari".

Muutetaan kaikki taulukon arvot ja asetukset

postmes(tab1,1024+4,0,double(i2))
Kun lähetetään viesti 1024+4 (eli 1028), kolmas parametri on 0 ja neljäs parametri sisältää uudet arvot ja asetukset double() funktiolla annettuna ohjelma luo koko taulukon uudestaan.
Tällöin on syytä käyttää postmes() -viestifunktiota.

Taulukon tietoja voi muuttaa

sendmessage(tab1,1024+4,1,1)
Kun lähetetään oheinen viesti 1024+4 (eli 1028) ikkunalle ja lisäksi kolmas ja neljäs parametri on 1 taulukon tietoja voi editoida.
Mikäli halutaan muuttaa asetus niin, ettei voida editoida (perusasetus) lähetetään neljäntenä parametrina nolla.
Ruksattavia kohtia voi silti ruksata.
Mikäli taulukolle on määritetty aliohjelma ohjelma lähettää sille aina nappain=13 kun ryhdytään editoimaan. Mikäli ei halutakaan editoida voidaan palauttaa nappain=0, jolloin editointia ei käynnistetäkään.

ASCII merkin näppäily laukaisee aliohjelman

sendmessage(tab1,1024+4,1,1024)
Kun lähetetään oheinen viesti 1024+4 (eli 1028) ikkunalle ja lisäksi kolmas parametri on 1 ja neljäs 1024 taulukon aliohjelmalle lähetetään ASCII-merkki.

Kun kentän sisältö tai rivien määrä muuttuu ohjelma lähettää -5

sendmessage(tab1,1024+4,1,64)
Kun lähetetään oheinen viesti 1024+4 (eli 1028) ikkunalle ja lisäksi kolmas parametri on 1 ja neljäs 64 taulukon aliohjelmalle lähetetään -5. Viestiä ei lähetetä jos muutetaan kaikki taulukon arvot ja asetukset (kt alla).

Muuttujaan tallennetaan kaikki taulukon arvot

sendmessage(tab1,1024+4,3,double(i2))
Kun lähetetään viesti 1024+4 (eli 1028), kolmas parametri on 3 ja neljäs parametri sisältää muuttujan ohjelma tallentaa taulukon arvot (ei asetuksia) muuttujaan (esimerkissä i2).
Tällöin on syytä käyttää postmes() -viestifunktiota.
Muuttujan i2 pitää olla ennestään vektori.

Muuttujaan tallennetaan taulukon rivien määrä

sendmessage(tab1,1024+4,6,double(i2))
Kun lähetetään viesti 1024+4 (eli 1028), kolmas parametri on 6 ja neljäs parametri sisältää muuttujan ohjelma tallentaa taulukon rivien määrän muuttujaan (esimerkissä i2).
Muuttujan i2 pitää olla ennestään vektori.

Mennään taulukon riville

sendmessage(tab1,1024+5,3,0)
Oheinen käsky siirtää palkin taulukon riville 3. Jos taulukolla on aliohjelma se saa viestin nappain=5000.

Päivitä taulukko

sendmessage(tab1,1024+6,0,0)
Oheinen viesti käskee taulukkoa päivittämään taulukon rivit. Tätä käytetään esim. jos taulukon tietoja on jotenkin muutettu.

Päivitä taulukon arvot kun taulukon ulkomitat ovat vaihtuneet

filt={50,10,200,300} && {x-vasen,y-ylä,x-oikea,y-ala}
sendmessage(tab1,1024+10,double(filt),0)

Kun lähetetään ylläoleva viesti 1024+10 (eli 1034) taulukko päivittyy. Tätä on syytä käyttää kun tietue ei ei ole vaihtunut ja musta palkki on samalla paikalla mutta taulukon ulkomitat ovat muuttuneet.
Ulkomitat annetaan vektorissa double() -funktion sisällä.

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