Prev Next Up Title Contents Index

waapi.pas

aapinen.pas - WinAapinen

	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.


Prev Next Up Title Contents Index