unit Aapinen; {------------------------------------------------------------------------------- Modulin tarkoituksena on olla WinAapisen pääohjelmana. WinAapinen on tarkoitettu 1.5-5 vuotiaille erääksi apuvälineeksi lukemisen opettelemiseen. Tekijä: Vesa Lappalainen Aika: 22.7.1996 Delphi-versio: 1.0 & 2.0 Muutokset: 22.7.1996 + monipuolistettu käyttöä WinAapisen beta-versiosta (4.96) 23.8.1996 + värien vaihto + Esto joka korkeintaan odotetaan ennen kuin uuden nappulan saa painaa + CD-soitin optioksi (joku kone ei lähde käyntiin CD:n kanssa) WinAapisen tietokantaa (WAapi.db) käsitellään WMuokkaa-ohjelmalla. Tietokannan muoto löytyy sieltä. WinAapisesa on kaksi päämoodia: 1. Kirjaimen painaminen arpoo jonkin ko. kirjaimella alkavan sanan Optioista riippuen tällöin - sanotaan sana - näytetään sana - näytetään sanan 1. kirjain isona - näytetään sanan 1. kirjain pienenä - näytetään mahdollinen sanaan liittyvä kuva Välilyönnin painamisella sama sana toistetaan ja optiosta riippuen kuten edellä sanotaa, näytetään ja annetaan kuva. Tässä moodissa voidaan pelata esim. siten, että ... 2. Välilyönti (tai itse asiassa mikä tahansa näpääin) arpoo tietokannasta sanan ja optioista riippuen jälleen sanoo, näyttää ja/tai näyttää kuvan. Ennen sanomista voidaan vielä lisätä sanomaan esim. "Mistä tulee ". Tämän jälkeen pitää painaa oikeata kirjainta ja sitten saadaan teksti "Hyvä" ja optioista riippuen sana uudelleen, sana näyttöön ja sanaan liittyvä kuva. Tässä moodissa voidaan pelata esim. siten, että ... Kummassakin moodissa käyettävien sanoja ja kirjaimia voidaan rajata tason avulla. Tietokannassa kullakin sanalla on tasonumero. Voidaan esim. aivan opiskelun alkuvaiheessa pelata siten että taso on 1-2 tai jopa 1-1. Tällöin kustakin kirjaimesta on käytössä vain 2 tai yksi sanaa. Lisäksi kirjain-joukkoa voidaan rajata antamalla esim. sallituiksi vain kirjaimet "AIMPÄ". Myös tietokannassa voidaabn vaikemmat kirjaimet laittaa isommalle tasolle, jolloin niitä ei saada alkuvaiheessa. Jatkossa yksinkertaisemmat sanat voidaan rajata pois käyttämällä tasona esim. 3-9. Tasonumerot ovat käyttäjän itsensä antamia eivätkä ne liity välttämättä mitenkään ikävuosiin. Tietokanta voidaan optiovalinnan mukaan pitää joko näkyvissä tai pois näkyvistä "pelin" aikana. Optiot on talletettu tiedostoon waapi.ini. Moodikohtaiset optiot ovat osien "Options 1" ja vastaavasti "Options 2" alla. Tietokanta (waapi.db ja waapi.px) on samassa hakemistossa kuin itse ohjelma samoin kuin kolme apuääntä (tyhjawav.wav, hyva.wav, kysymys.wav). Muut äänet ovat hakemistossa wav\ Äänet voivat olla .wav, .mid, .avi tms. MediaPlayerin tuntemia tiedostoja. Ääniä voi tehdä joko WMuokkaa-ohjelmalla tai millä tahansa esim. .wav tiedostoja tuottavalla ohjelmalla. Itse asiassa jokin ohjelma, jolla ääni voidaan leikata sopivan mittaiseksi ja säätää voimakkuus, olisi kaikkein paras. Kutakin sanaa kohto pitää olla äänitiedosto. Esim: Ä kirjaimesta tulee sana Äiti ja ääni luetaan tiedostosta aiti.wav. Kuvat ovat hakemistossa bmp\ Kuvien pitää olla joko .bmp tai .wmf (Windows MetaFile) -tiedostoja. .wmf-tiedostot vievä piirroskuvissa vähemmän tilaa. Kuten äänienkin, pitää kutakin sanaa kohti olla oma .bmp -tiedosto. Esim. äitin kuva voi olla skannattu tiedostoon aiti.bmp. -------------------------------------------------------------------------------} interface uses { Windows, }Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer, Mask, DBCtrls, DB, DBTables, ExtCtrls, Grids, Outline, DirOutln, DBGrids, Menus,ali, TabNotBk, IniFiles, ComCtrls, chclr {, ComCtrls;} ; type TFormAapinen = class(TForm) { Näkymättömät komponentit ------------------------------------------------} QueryAapinen: TQuery; QueryAapinenKirjain: TStringField; QueryAapinenNro: TFloatField; QueryAapinenKuva: TStringField; QueryAapinenSana: TStringField; QueryAapinenAani: TStringField; DataSourceAapinen: TDataSource; MediaPlayerWav: TMediaPlayer; MediaPlayerAvi: TMediaPlayer; PopupMenuVari: TPopupMenu; PopupVari: TMenuItem; ColorChangeVari: TColorChange; PanelMuut: TPanel; { Kaikki muut paitsi sana ------------------------------} PanelTiedot: TPanel; ButtonOptiot: TButton; PanelOhjaimet: TPanel; TabbedNotebookOhjaimet: TTabbedNotebook; PanelTietokanta: TPanel; DBEditKirjain: TDBEdit; DBEditWavNimi: TDBEdit; DBEditBmpNimi: TDBEdit; DBGridAapinen: TDBGrid; MediaPlayerCD: TMediaPlayer; PanelOptiot: TPanel; GroupBoxNakyy: TGroupBox; LabelEnsin: TLabel; CheckBoxKuva: TCheckBox; CheckBoxAani: TCheckBox; CheckBoxSana: TCheckBox; CheckBoxIsoKirjain: TCheckBox; CheckBoxPieniKirjain: TCheckBox; LabelJalkeen: TLabel; CheckBoxKuva2: TCheckBox; CheckBoxAani2: TCheckBox; CheckBoxSana2: TCheckBox; CheckBoxIsokirjain2: TCheckBox; CheckBoxPieniKirjain2: TCheckBox; LabelTasoText: TLabel; ComboBoxTaso: TComboBox; Label_: TLabel; ComboBoxTaso2: TComboBox; LabelFont: TLabel; MaskEditFont: TMaskEdit; LabelEsto: TLabel; MaskEditEsto: TMaskEdit; CheckBoxIsotkirjaimet: TCheckBox; CheckBoxTietokanta: TCheckBox; CheckBoxKysymys: TCheckBox; CheckBoxHyva: TCheckBox; CheckBoxValilyontiArpoo: TCheckBox; EditArvottavat: TEdit; ButtonOptiotOK: TButton; { Panel optiot ----------------------------------------------------} { TabbedNotebookOhjaimet --------------------------------------------} { Panel ohjaimet ------------------------------------------------------} PanelNappulat: TPanel; ButtonPienena: TButton; ButtonIsona: TButton; { Panel tiedot ----------------------------------------------------------} PanelImage: TPanel; ImageAapinen: TImage; { Panel muut --------------------------------------------------------------} PanelSana: TPanel; DBEditSana: TDBEdit; CheckBoxCD: TCheckBox; procedure MediaPlayerWavNotify(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure DBGridAapinenDblClick(Sender: TObject); procedure DataSourceAapinenDataChange(Sender: TObject; Field: TField); procedure ButtonIsonaClick(Sender: TObject); procedure PanelSanaResize(Sender: TObject); procedure CheckBoxIsotkirjaimetClick(Sender: TObject); procedure TabbedNotebookOhjaimetChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean); procedure ButtonOptiotClick(Sender: TObject); procedure ButtonOptiotOKClick(Sender: TObject); procedure MaskEditFontChange(Sender: TObject); procedure CheckBoxValilyontiArpooClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure PopupVariClick(Sender: TObject); procedure CheckBoxCDClick(Sender: TObject); private { Private declarations } sanomassa : boolean; aloitettu : TDateTime; EdellinenOK : boolean; yrityksia : integer; MillaJatketaan:integer; procedure LaitaKirjain; procedure TyhjennaRuutu; function SanoNykyinen1Kerran:integer; function SanoNykyinen2Kerran:integer; function ArvoTietue(c:char):integer; function Sano(c:char):integer; procedure SanoJaJatka(nimi:string; kumpi:integer); function TutkiJaArvo(c:char):integer; procedure TalletaIni(section:string); procedure LueIni(section:string); public { Public declarations } end; var FormAapinen: TFormAapinen; implementation {$R *.DFM} const IniNimi = '.\waapi.ini'; {------------------------------------------------------------------------------} procedure TFormAapinen.LaitaKirjain; { Laittaa kirjaimen isona ja pienenä vastaaviin nappuloihin } VAR key:string; c,cp:char; begin if ( QueryAapinenKirjain.AsString <> '' ) then c := QueryAapinenKirjain.AsString[1] else c := ' '; c := isoksi(c); cp := pieneksi(c); if ( c = cp ) then cp := ' '; ButtonIsona.caption := c; ButtonPienena.caption := cp; end; {------------------------------------------------------------------------------} procedure TFormAapinen.TyhjennaRuutu; begin ImageAapinen.Visible := CheckBoxKuva.Checked; DBEditSana.Visible := CheckBoxSana.Checked; ButtonIsona.Visible := CheckBoxIsokirjain.Checked; ButtonPienena.Visible := CheckBoxPienikirjain.Checked; end; {------------------------------------------------------------------------------} function TFormAapinen.SanoNykyinen1Kerran:integer; { Sanoo ja näyttää sanan optioiden perusteella 1. arpomisen jälkeen } begin SanoNykyinen1Kerran := 0; if ( CheckBoxAani.Checked ) then begin MediaPlayerWav.close; SanoNykyinen1Kerran := SoitaTiedosto(QueryAapinenAani.AsString,MediaPlayerWav); end; if ( CheckBoxKuva.Checked ) then begin NaytaTiedosto(QueryAapinenKuva.AsString,ImageAapinen,MediaPlayerAvi); ImageAapinen.Visible := true; end else begin MediaPlayerAvi.Close; ImageAapinen.Visible := false; { Tämä vain jotta mahd. .AVI-kuva häviäisi } ImageAapinen.Parent.Repaint; { - " - } end; DBEditSana.Visible := CheckBoxSana.Checked; ButtonIsona.Visible := CheckBoxIsokirjain.Checked; ButtonPienena.Visible := CheckBoxPienikirjain.Checked; LaitaKirjain; sanomassa := false; end; {------------------------------------------------------------------------------} function TFormAapinen.SanoNykyinen2Kerran:integer; { Sanoo ja näyttää sanan optioiden perusteella "paljastaen sanan" } begin SanoNykyinen2Kerran := 0; if ( CheckBoxAani2.Checked ) then begin MediaPlayerWav.close; SanoNykyinen2Kerran := SoitaTiedosto(QueryAapinenAani.AsString,MediaPlayerWav); end; if ( CheckBoxKuva2.Checked ) then begin NaytaTiedosto(QueryAapinenKuva.AsString,ImageAapinen,MediaPlayerAvi); ImageAapinen.Visible := true; end else begin MediaPlayerAvi.Close; ImageAapinen.Visible := false; ImageAapinen.Parent.Repaint; end; DBEditSana.Visible := CheckBoxSana2.Checked; ButtonIsona.Visible := CheckBoxIsokirjain2.Checked; ButtonPienena.Visible := CheckBoxPienikirjain2.Checked; LaitaKirjain; sanomassa := false; end; {------------------------------------------------------------------------------} function SQL_in(s:string):string; { Jos s = 'ABC', täytetään SQL ehdoksi: in ("A","B","C") } var ehto:string; i,len:integer; begin ehto := 'in ('; len := length(s); for i:=1 to len do begin ehto := ehto + '"' + s[i] + '",' end; SQL_in := ehto + '"XX")'; { Viimeinen hämäystä } end; {------------------------------------------------------------------------------} function TFormAapinen.ArvoTietue(c:char):integer; {------------------------------------------------------------------------------- Arpoo uuden tietueen hakuehdon perusteella. Jos c <= ' ', arvotaan koko tietokannasta ehdolla: Jos esim. on rajattu arvonta kirjaimiin "ABC" ja taso 1-3, niin kirjain in ("A","B","C") and Nro >= 1 and Nro <= 3 Jos kirjainten rajausehto puuttuu, niin käytetään vain tasorajoitusta. Jos c > ' ', arvotaan ehdolla (esim c = 'A' ) kirjain = "A" and Nro >= 1 and Nro <= 3 Jos kirjainrajoitus on käytössä ja c ei kuulu kirjainjoukkoon, ei arvota uutta tietuetta. Tietokanta siirretään arvotun tietueen kohdalle. Palautetaan: 0 = uusi arvonta onnistui 1 = ei arvottu -------------------------------------------------------------------------------} VAR key:string; nro,lkm : longint; arv,k_ehto : string; begin TyhjennaRuutu; ArvoTietue := 1; c := isoksi(c); if ( c = '"' ) then exit; { SQL lause menee sekaisin " } key := c; k_ehto := ''; arv := EditArvottavat.Text; if ( key > ' ' ) then begin k_ehto := 'Kirjain = "' + key + '" and '; if ( arv > ' ' ) and ( Pos(key,arv) = 0 ) then exit; end; if ( k_ehto = '' ) and ( arv > ' ' ) then k_ehto := 'Kirjain ' + SQL_in(arv) + ' and '; QueryAapinen.Close; QueryAapinen.SQL.Clear; QueryAapinen.SQL.Add('select * from WAapi where ' + k_ehto + ' Nro >= ' + ComboBoxTaso.Text + ' and Nro <= ' + ComboBoxTaso2.Text); QueryAapinen.Open; lkm := QueryAapinen.RecordCount; if ( lkm = 0 ) then exit; nro := Random(lkm)+1; { Siirrytään oikeaan tietueeseen } if ( nro >= 2 ) then QueryAapinen.MoveBy(nro-1); ArvoTietue := 0; end; {------------------------------------------------------------------------------} function TFormAapinen.Sano(c:char):integer; {------------------------------------------------------------------------------- Palauttaa: -1 = edellinen sanominen on kesken 1 = ei voi sanoa 0 = sanominen OK Parametrit: c = kirjain, joka sanotaan, <= ' ' on erikoistapaus ja sillä sanotaan valittu sana -------------------------------------------------------------------------------} var esto:integer; ero : Double; begin sanomassa := true; if ( c <= ' ' ) then begin Sano := SanoNykyinen2Kerran; exit; end; try DBGridAapinen.SetFocus; except end; Sano := -1; if MediaPlayerWav.mode = mpPlaying then begin { Jos vielä soittaa edellistä } esto := StrToInt(Trim(MaskEditEsto.Text)); ero := (Time - Aloitettu)*24*60*60*10; if ( ero < esto ) then Exit; MediaPlayerWav.close; end; ArvoTietue(c); Aloitettu := Time; Sano := SanoNykyinen1Kerran; end; {------------------------------------------------------------------------------} procedure TFormAapinen.MediaPlayerWavNotify(Sender: TObject); begin if ( MediaPlayerWav.NotifyValue <> nvSuccessful ) then exit; MediaPlayerWav.notify := false; MediaPlayerWav.OnNotify := NIL; if ( MillaJatketaan = 1 ) then SanoNykyinen1Kerran; if ( MillaJatketaan = 2 ) then SanoNykyinen2Kerran; end; {------------------------------------------------------------------------------} procedure TFormAapinen.SanoJaJatka(nimi:string; kumpi:integer); begin MediaPlayerWav.OnNotify := MediaPlayerWavNotify; MillaJatketaan := kumpi; SoitaTiedostoNotify('.\'+nimi+'.wav',MediaPlayerWav,true); end; {------------------------------------------------------------------------------} function TFormAapinen.TutkiJaArvo(c:char):integer; { Tutkii onko painettu oikeata kirjainta edelliseen kysymykseen. Jos on, niin seuraavalla painasulla sitten arvotaan uusi kysymys. Jollei ole, lisätään yritysten määrää ja 3:lla väärällä arvotaan kuitenkin uusi kysymys. ESCillä voidaan aina pyytää uusi kysymys } begin TutkiJaArvo := -1; if ( MediaPlayerWav.mode = mpPlaying ) then exit; TutkiJaArvo := 0; sanomassa := true; Inc(yrityksia); if ( c = #27 ) then yrityksia := 100; { ESC-näppäin arpoo aina uuden } if ( not EdellinenOK ) and ( Isoksi(c) = QueryAapinenKirjain.AsString ) then begin EdellinenOK := true; if ( CheckBoxHyva.Checked ) then SanoJaJatka('Hyva',2); exit; end; if ( EdellinenOK ) or ( yrityksia > 2 ) then begin ArvoTietue(' '); yrityksia := 0; end; if ( CheckBoxKysymys.Checked ) then SanoJaJatka('Kysymys',1); EdellinenOK := FALSE; end; {------------------------------------------------------------------------------} procedure TFormAapinen.FormKeyPress(Sender: TObject; var Key: Char); { Koska lomakkeen KeyPreview on (toivottavasti) päällä, tullaan tänne aina kun painetaan jotain ASCII-koodin tuottavaa merkkiä. Jollei KeyPreview olisi päällä, tultaisiin tänne vain mikäli mikään lomakkeen kontrolleista ei olisi valittuna, siis tuskin koskaan. } begin if ( CheckBoxValilyontiArpoo.Checked ) then TutkiJaArvo(Key) else Sano(Key); end; {------------------------------------------------------------------------------} procedure TFormAapinen.DBGridAapinenDblClick(Sender: TObject); begin SanoNykyinen2Kerran; end; {------------------------------------------------------------------------------} procedure TFormAapinen.DataSourceAapinenDataChange(Sender: TObject; Field: TField); begin if ( not sanomassa ) then SanoNykyinen1Kerran; end; {------------------------------------------------------------------------------} procedure TFormAapinen.ButtonIsonaClick(Sender: TObject); begin SanoNykyinen2Kerran; end; {------------------------------------------------------------------------------} procedure TFormAapinen.PanelSanaResize(Sender: TObject); begin DBEditSana.Width := PanelSana.Width; end; {------------------------------------------------------------------------------} procedure TFormAapinen.CheckBoxIsotkirjaimetClick(Sender: TObject); begin if ( CheckBoxIsotkirjaimet.Checked ) then DBEditSana.CharCase := ecUpperCase else DBEditSana.CharCase := ecNormal; QueryAapinen.Refresh; end; {------------------------------------------------------------------------------} procedure TFormAapinen.TabbedNotebookOhjaimetChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean); { Tässä pitää KeyPreview ottaa pois päältä jos mennään Optiot-sivulle ja vastaavasti laittaa takaisin kun sieltä poistutaan } begin FormAapinen.KeyPreview := ( NewTab <> 1 ); end; {------------------------------------------------------------------------------} procedure TFormAapinen.ButtonOptiotClick(Sender: TObject); begin TabbedNotebookOhjaimet.PageIndex := 1; TabbedNotebookOhjaimet.Visible := True; end; {------------------------------------------------------------------------------} procedure TFormAapinen.ButtonOptiotOKClick(Sender: TObject); begin TabbedNotebookOhjaimet.PageIndex := 0; TabbedNotebookOhjaimet.Visible := CheckBoxTietokanta.Checked; end; {------------------------------------------------------------------------------} procedure TFormAapinen.LueIni(section:string); var AapiIni:TIniFile; begin EdellinenOK := true; yrityksia := 0; AapiIni := TIniFile.Create(IniNimi); with AapiIni do begin ComboBoxTaso.Text := ReadString(section,'Taso','1'); ComboBoxTaso2.Text := ReadString(section,'Taso 2','9'); MaskEditFont.Text := ReadString(section,'Font','140'); MaskEditEsto.Text := ReadString(section,'Esto','10'); EditArvottavat.Text := ReadString(section,'Arvottavat',''); CheckBoxIsotkirjaimet.Checked := ReadBool(section,'Isot kirjaimet' ,True); CheckBoxTietokanta.Checked := ReadBool(section,'Tietokanta' ,True); CheckBoxKuva.Checked := ReadBool(section,'Kuva' ,True); CheckBoxAani.Checked := ReadBool(section,'Ääni' ,True); CheckBoxSana.Checked := ReadBool(section,'Sana' ,True); CheckBoxIsokirjain.Checked := ReadBool(section,'Iso kirjain' ,True); CheckBoxPienikirjain.Checked := ReadBool(section,'Pieni kirjain' ,True); CheckBoxKuva2.Checked := ReadBool(section,'Kuva 2' ,True); CheckBoxAani2.Checked := ReadBool(section,'Ääni 2' ,True); CheckBoxSana2.Checked := ReadBool(section,'Sana 2' ,True); CheckBoxIsokirjain2.Checked := ReadBool(section,'Iso kirjain 2' ,True); CheckBoxPienikirjain2.Checked := ReadBool(section,'Pieni kirjain 2',True); CheckBoxKysymys.Checked := ReadBool(section,'Kysymys' ,True); CheckBoxHyva.Checked := ReadBool(section,'Hyvä' ,True); Free; end; end; {------------------------------------------------------------------------------} procedure TFormAapinen.TalletaIni(section:string); var AapiIni:TIniFile; begin AapiIni := TIniFile.Create(IniNimi); with AapiIni do begin WriteString(section,'Taso',ComboBoxTaso.Text); WriteString(section,'Taso 2',ComboBoxTaso2.Text); WriteString(section,'Font',MaskEditFont.Text); WriteString(section,'Esto',MaskEditEsto.Text); WriteString(section,'Arvottavat',EditArvottavat.Text); WriteBool(section,'Isot kirjaimet',CheckBoxIsotkirjaimet.Checked); WriteBool(section,'Tietokanta' ,CheckBoxTietokanta.Checked); WriteBool(section,'Kuva' ,CheckBoxKuva.Checked); WriteBool(section,'Ääni' ,CheckBoxAani.Checked); WriteBool(section,'Sana' ,CheckBoxSana.Checked); WriteBool(section,'Iso kirjain' ,CheckBoxIsokirjain.Checked); WriteBool(section,'Pieni kirjain' ,CheckBoxPienikirjain.Checked); WriteBool(section,'Kuva 2' ,CheckBoxKuva2.Checked); WriteBool(section,'Ääni 2' ,CheckBoxAani2.Checked); WriteBool(section,'Sana 2' ,CheckBoxSana2.Checked); WriteBool(section,'Iso kirjain 2' ,CheckBoxIsokirjain2.Checked); WriteBool(section,'Pieni kirjain 2' ,CheckBoxPienikirjain2.Checked); WriteBool(section,'Kysymys' ,CheckBoxKysymys.Checked); WriteBool(section,'Hyvä' ,CheckBoxHyva.Checked); Free; end; end; {------------------------------------------------------------------------------} procedure TFormAapinen.FormCreate(Sender: TObject); var AapiIni:TIniFile; begin Randomize; AapiIni := TIniFile.Create(IniNimi); LueIni('Options 1'); with AapiIni do begin CheckBoxValilyontiArpoo.Checked := ReadBool('Options','Välilyönti arpoo' ,False); CheckBoxCD.Checked := ReadBool('Options','CD-soitin' ,False); Free; end; ColorChangeVari.IniName := IniNimi; ColorChangeVari.ReadColors; if ( CheckBoxValilyontiArpoo.Checked ) then LueIni('Options 2'); TabbedNotebookOhjaimet.PageIndex := 0; TabbedNotebookOhjaimet.Visible := CheckBoxTietokanta.Checked; end; {------------------------------------------------------------------------------} procedure TFormAapinen.FormClose(Sender: TObject; var Action: TCloseAction); var AapiIni:TIniFile; begin AapiIni := TIniFile.Create(IniNimi); with AapiIni do begin WriteBool('Options','Välilyönti arpoo',CheckBoxValilyontiArpoo.Checked); WriteBool('Options','CD-soitin' ,CheckBoxCD.Checked); Free; end; if ( CheckBoxValilyontiArpoo.Checked ) then TalletaIni('Options 2') else TalletaIni('Options 1'); end; {------------------------------------------------------------------------------} procedure TFormAapinen.MaskEditFontChange(Sender: TObject); var code,koko:integer; begin Val(MaskEditFont.Text,koko,code); DBEditSana.Font.Size := koko; PanelSana.Height := DBEditSana.Height; end; {------------------------------------------------------------------------------} procedure TFormAapinen.CheckBoxValilyontiArpooClick(Sender: TObject); { Kun "Välilyönti-arpoo" muuttuu, vaihdetaan ini-tiedostosta vastaavat optiot ja talletetaan tietysti sitä ennen nykyisen tilan optiot. } begin if ( CheckBoxValilyontiArpoo.Checked ) then begin TalletaIni('Options 1'); LueIni('Options 2'); exit; end; TalletaIni('Options 2'); LueIni('Options 1'); end; procedure TFormAapinen.PopupVariClick(Sender: TObject); begin ColorChangeVari.Ask(PopupMenuVari.PopupComponent); end; procedure TFormAapinen.CheckBoxCDClick(Sender: TObject); begin if CheckBoxCD.Checked then begin MediaPlayerCD.DeviceType := dtCDAudio; MediaPlayerCD.Enabled := true; MediaPlayerCD.Visible := true; MediaPlayerCD.AutoOpen := true; MediaPlayerCD.Open; end else begin MediaPlayerCD.Enabled := false; MediaPlayerCD.AutoOpen := false; MediaPlayerCD.DeviceType := dtAutoSelect; MediaPlayerCD.Visible := false; end; end; end.