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

Selitys

WINNEW() funktiolla luodaan ikkunoita ja ikkunoiden objekteja. Oheisessa esimerkissä esim. ikkunassa Testi on editoitavia kenttiä, jotka oli myös eräänlaisia ikkunoita. Näin luodut ikkunat ovat identtisiä kuin esim. GET tai XGET -käskyillä tehdyt vastaavat ikkunat.

Parametrit

[muuttuja] Editoitava muuttuja.

[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ä.

[arvo] on ikkunan erikoistyyli, kt. esimerkki ja kt. tyylit.

[maski] mikäli muuttuja on numero voidaan käyttää sopivaa maskia. Muuten voi olla nolla tai pois.
Formaatissa voi olla numerotunniste esim. "610|999.99" tai myös "610|", jolloin ohjelma lähettää aliohjelmaan viestin nappain=610.

[id-arvo] jos tähän laitetaan ykkönen ikkunaan tulee pistenappi, joka laukaisee 400 -viestin (kt. esimerkki).

[fontti] nimikkeiden fontti.

Palautusarvo

Funktio palauttaa ikkunapidikkeen tai nollan jos funktio epäonnistuu.

Esimerkki

van=setwindow()
ikku=winnew("Testi",0,0,400,300)
setwindow(ikku)
fo0=choosefont("Courier New,-20",,1,1)
fo1=choosefont("Arial,8",,1,1)
apu1="kokeilu";apu2="Lisää";apu0="Uusi tieto ";
apu11="Lisää tietoa";apu12="Vielä tietoa";num1=55.2
num2=date()
apu3=array(7)
apu3[1]=winnew(apu1,10,0,77,24,,"EDIT",,,fo0)
apu3[2]=winnew(apu2,150,5,143,90,1353711812,"EDIT",,,versio(3,1))
apu3[3]=winnew(num1,50,78,64,24,,"EDIT","999.99",,fo0)
apu3[4]=winnew(num2,50,110,110,24,,"EDIT",,,fo0)
apu3[5]=winnew(apu0,20,140,110,24,,"EDIT",,,fo0)
apu3[6]=winnew(apu11,25,170,150,24,,"EDIT",,1,fo0)
apu3[7]=winnew(apu12,150,200,150,24,,"EDIT",,1,fo0)
sendmessage(apu3[1],1024+2,0,0)
sendmessage(apu3[2],197,0,0)
sendmessage(apu3[5],1024+4,1,610)
DO WHILE .t.
   apu=getmessage()
   DO CASE
      CASE apu=256
           DO CASE
              CASE nappain=27
                   EXIT
           endcase
      CASE apu=273
           DO CASE
              CASE nappain=610
                   @ 1,1 say timeh()
              CASE nappain=400
                   kentta={kentta}
                   sendmessage(setfocus(),1024+10,double(kentta),0)
                   @ 8,1 say kentta
           endcase
   ENDcase
ENDDO
sendmessage(apu3[1],1024+7,double(apu3),0)
setwindow(van)
deleteobject(fo1)
deleteobject(fo0)
destroywin(ikku)

edit

Erilaiset edit -ikkunoihin lähetettävät viestit

Edit 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)

Ikkunaan saa tallentaa paljon tekstiä

sendmessage(apu3[2],197,0,0)
Kun lähetetään viesti 197 ikkunalle siihen voidaan tallentaa paljon tekstiä (max 32 tuhatta merkkiä). Normaalisti kenttään saa tallentaa vain alkuperäisen muuttujan sisältämä määrä tekstiä.

Laita edit aktiiviseksi

sendmessage(apu3[1],1024+2,0,0)
Kun lähetetään viesti 1024+2 (eli 1026) ikkunalle se muuttuu aktiiviseksi ja vilkkuva kursori tulee kenttään.

Muutokset ikkunaan laukaisee viestin

sendmessage(apu3[5],1024+4,1,610)
Kun lähetetään oheinen viesti 1024+4 (eli 1028) ikkunalle ja lisäksi kolmas parametri on 1 kaikki muutokset ja kenttään tulemiset ja poistumiset laukaisevat viestin 273 ja muuttuja nappain saa arvon joka on neljännessä parametrissa.
Esimerkissä funktio getmessage() palauttaa siis arvon 273 ja muuttuja nappain saa 610, jolloin ohjelma tulostaa kellonajan koordinaattiin (1,1).

Nuoli ylös/las, Enter laukaisee viestin

sendmessage(apu3[5],1024+4,4,0)
Kun lähetetään oheinen viesti 1024+4 (eli 1028) ikkunalle ja lisäksi kolmas parametri on 4 ohjelma lähettää WM_KEYDOWN/WM_KEYUP viestin.

Mene kohtaan

sendmessage(apu3[5],1024+14,4,0)
Kun lähetetään oheinen viesti 1024+14 ikkunalle ja lisäksi kolmas parametri on annetu (tässä 4) ohjelma siirtää pystykursorin neljänteen merkkiin.

WM_KILLFOCUS tallentaa kentän tiedon muuttujaan

sendmessage(apu3[5],1024+4,5,0)
Kun lähetetään oheinen viesti 1024+5 (eli 1029) ikkunalle ja lisäksi kolmas parametri on 5 ohjelma tallentaa automaattisesti ikkunan sisällön muuttujaan.

Tallenna yhden edit-ikkunan arvo muuttujaan tai toisinpäin

sendmessage(apu3[3],1024+7,0,0)
Kun lähetetään viesti 1024+7 (eli 1031) ikkunalle ja kolmas parametri on nolla ohjelma tallentaa ikkunan muuttujaan ikkunassa olevan arvon.
Esimerkiksi muuttuja num1 sisältää numeron 55.2 vaikka kenttään olisi muutettu toinen numero. Kun tämä viesti lähetetään saa esim. num1 arvon, joka näkyy ikkunassa.
Mikäli neljäs parametri on 1 tallennus on käänteinen: muuttujasta haetaan arvo ikkunaan.

Huom! Mikäli muuttuja on vektori, esim. ..=winnew(apu1[4],... Käytä tallennukseen (edit -> muuttuja) komentoa apu1[4]=winrect(2,apu3[3]). Katso myös muita vaihtoehtoja tässä ohjeessa.

Tallenna kaikkien ikkunoiden arvot muuttujiin tai toisinpäin

sendmessage(apu3[1],1024+7,double(apu3),0)
Kun lähetetään viesti 1024+7 (eli 1031) ikkunalle ja kolmas parametri on double([ikkuna-vektori]) ohjelma tallentaa kaikkiin vektorissa oleviin muuttujiin ikkunassa olevan arvon.
Esimerkiksi muuttuja num1 sisältää numeron 55.2 vaikka kenttään olisi muutettu toinen numero. Kun tämä viesti lähetetään saa esim. num1 arvon, joka näkyy ikkunassa.
Mikäli neljäs parametri on 1 tallennus on käänteinen: muuttujasta haetaan arvo ikkunaan.

Huom! Mikäli muuttuja on vektori, esim. ..=winnew(apu1[4],... Käytä tallennukseen (edit -> muuttuja) komentoa apu1[4]=winrect(2,... ja tiedon hakuun muuttujaan toimintoa (muuttuja -> edit) Korvataan edit sisältö kokonaan.

Käynnistetään etsintä -ikkuna

sendmessage(apu3[1],1024+9,0,0)
Kun lähetetään oheinen viesti 1024+9 (eli 1033) käynnistyy etsintä -ikkuna (ohjelma etsija.dmf).
Tätä käytetään yleensä kun edit -ikkunoissa käsitellään kenttätietoa dbf -tietokannasta.

Kysytään kentän nimi

sendmessage(apu3[1],1024+10,double(kentta),0)
Kun lähetetään oheinen viesti 1024+10 (eli 1034):

kentta={kentta}
sendmessage(setfocus(),1024+10,double(kentta),0)

...muuttujaan kentta tallentuu aktiivisen edit -ikkunan muuttujanimi, esim. APU12
Mikäli esim. muuttujan apu12 sijaan on käytetty vektoria, esim, apu12[1] tms. tallentuu tekstinä nmero, joka kertoo monennettako edit -ikkunaan klikattiin.

Muutetaan edit -ikkunan sijaintia ja kokoa

sendmessage(apu3[1],1024+11,double(i),0)
Kun lähetetään oheinen viesti 1024+11 (eli 1035):

i={7,10,100,25}
sendmessage(apu3[1],1024+11,double(i),0)

...ikkunan apu3[1] sijanti ja koko muuttuu {x,y,leveys,korkeus}.

Asetetaan read-only tila

sendmessage(apu3[1],1024+12,double(i),1)
Kun lähetetään oheinen viesti 1024+12 (eli 1036):

i={apu3[1]}
sendmessage(apu3[1],1024+12,double(i),1)

...ikkuna apu3[1] muuttuu read-only'ksi. Jos lähetetään esim. sendmessage(apu3[1],1024+12,double(i),0) read-only -tila poistuu.

Korvataan edit sisältö kokonaan

sendmessage(apu3[1],1024+5,double(i),0)
Kun lähetetään oheinen viesti 1024+5 (eli 1029):

i={"ABC"}
sendmessage(apu3[1],1024+5,double(i),0)

...ikkuna apu3[1] -editissä valittu teksti korvataan ABC:llä. Korvausasia pitää olla tekstinä, vaikka kenttä olisi esim. numerokenttä.

Korvataan edit sisällön valittu osa

sendmessage(apu3[1],1024+13,double(i),0)
Kun lähetetään oheinen viesti 1024+13 (eli 1037):

i={"ABC"}
sendmessage(apu3[1],1024+13,double(i),0)

...ikkuna apu3[1] -editissä valittu teksti korvataan ABC:llä. Jos mitään ei ole valittu ohjelma lisää kursorin kohdalle ABC.

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