Prev Next Up Title Contents Index

wmuokkaa.pas

wmuokaaa.pas - WinAapisen muokkausohjelma

	unit muokkaap;
	{-------------------------------------------------------------------------------
	  Modulin tarkoituksena on muokata WinAapisen tietokantaa
	
	  Tekijä:         Vesa Lappalainen
	  Aika:           22.7.1996
	  Delphi-versio:  1.0 & 2.0
	  Muutokset:      4.8.1996/vl
	                  + gridiin pudotus toimii Win 3.1:ssäkin (vika oli siinä
	                    että  (y shl 16) oli 0  16-bittisessä Windowsissa.
	                    Korjaus: (longint(y) shl 16)
	                  + taso välille (ennen vain pienempi kuin yläraja)
	
	  WinAapisen tietokanta (WAapi.db) on muotoa:
	   --------------------------------------------------
	   |kirjain|nro|ääni       |kuva        |sana       |
	   --------------------------------------------------
	   |  A    |1  |auto.wav   |auto.bmp    |auto       |
	   |  A    |2  |aapinen.wav|            |aapinen    |
	   |  B    |1  |banaani.wav|banaani.bmp |banaani    |
	   --------------------------------------------------
	
	  Tällä ohjelmalla käsitellään tietokantaa.
	  Tietokantaan voidaan raaháta uusia äänitiedostoja tai kuvatiedostoja
	  tiedostolistoista.  Samalla voidaan koekuunnella ääniä ja katsella
	  kuvia.
	
	  Tietokannasta voidaan valita rajoitettu joukko nähtäväksi joko
	  kirjoittamalla itse SQL:n where-haluehto tai valitsemalla
	  mitä kirjainta tai (/ja) tasoa (=nro) halutaan tutkia.
	
	  Uutta tietuetta lisättäessä ehdotetaan numeroksi lisättävää
	  kirjainta vastaava seuraava suurempi numero.  Esim. edellä
	  jos tietokannassa olisi kuvan 3 riviä, ehdotettaisiin uudelle
	  A:lle numeroa 3, uudelle B:lle numeroa 2 ja uudelle H:lle numeroa 1.
	
	-------------------------------------------------------------------------------}
	
	interface
	
	uses
	  {Windows,} WinProcs,
	  Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
	  DB, DBCtrls, ExtCtrls, Grids, DBGrids, DBTables, StdCtrls, FileCtrl, Mask,
	  MPlayer;
	
	type
	  TFormMuokkaa = class(TForm)
	    { Näkymättömät komponentit ------------------------------------------------}
	    QueryMuokkaa: TQuery;
	    QueryMuokkaakirjain: TStringField;
	    QueryMuokkaaNro: TFloatField;
	    QueryMuokkaaKuva: TStringField;
	    QueryMuokkaaSana: TStringField;
	    QueryMuokkaaAani: TStringField;
	    DataSourceMuokkaa: TDataSource;
	
	    QueryMax: TQuery;
	    QueryMaxmaxnro: TFloatField;
	
	    SaveDialogWav: TSaveDialog;
	    { -------------------------------------------------------------------------}
	
	    PanelNappulat: TPanel; { --------------------------------------------------}
	      GroupBoxValinnat: TGroupBox;
	        LabelValinnatKirjain: TLabel;
	        EditKirjain: TMaskEdit;
	        CheckBoxAnd: TCheckBox;
	        LabelValinnatTaso: TLabel;
	        EditTaso: TMaskEdit;
	        Label_: TLabel;
	        EditTaso2: TMaskEdit;
	      GroupBoxOptiot: TGroupBox;
	        CheckBoxSiirra: TCheckBox;
	        CheckBoxSoita: TCheckBox;
	        CheckBoxEditoi: TCheckBox;
	      GroupBoxTyhja: TGroupBox;
	      GroupBoxValittu: TGroupBox;
	        LabelKirjain: TLabel;
	        DBEditKirjain: TDBEdit;
	        LabelNro: TLabel;
	        DBEditNro: TDBEdit;
	        LabelSana: TLabel;
	        DBEditSana: TDBEdit;
	    { PanelNappulat -----------------------------------------------------------}
	
	    PanelGrid: TPanel; {-------------------------------------------------------}
	      PanelHaku: TPanel;
	        LabelWhere: TLabel;
	        EditHaku: TEdit;
	        ButtonHae: TButton;
	      DBNavigatorMuokkaa: TDBNavigator;
	      DBGridMuokkaa: TDBGrid;
	    { PanelGrid ---------------------------------------------------------------}
	
	    PanelListWav: TPanel;
	      PanelFilterWav: TPanel;
	        FilterComboBoxWav: TFilterComboBox;
	      FileListBoxWav: TFileListBox;
	
	    PanelListBmp: TPanel;
	      PanelFilterBmp: TPanel;
	        FilterComboBoxBmp: TFilterComboBox;
	      FileListBoxBmp: TFileListBox;
	
	    PanelEditointiJaBmp: TPanel; {---------------------------------------------}
	      GroupBoxNauhoitus: TGroupBox;
	        DBEditWavNimi: TDBEdit;
	        ButtonSiirraWav: TButton;
	        EditWav: TEdit;
	        ButtonUusiWav: TButton;
	        MediaPlayerWav: TMediaPlayer;
	        ButtonSaveWav: TButton;
	      GroupBoxKuvaTiedot: TGroupBox;
	        DBEditBmpNimi: TDBEdit;
	        ButtonSiirraBmp: TButton;
	        EditBmp: TEdit;
	        ButtonTyhjennaBmp: TButton;
	        MediaPlayerAvi: TMediaPlayer;
	      GroupBoxKuva: TGroupBox;
	        PanelImage: TPanel; { Jotta kuvalle saadaan maxkoko, Align = alClient  }
	          ImageBmp: TImage; { Align = alNone                                   }
	
	    { PanelEditointiJaBmp -----------------------------------------------------}
	
	    procedure EditKirjainChange(Sender: TObject); { Samalla myös tasolle       }
	    procedure EditKirjainClick(Sender: TObject);
	    procedure CheckBoxAndClick(Sender: TObject);
	
	    procedure ButtonHaeClick(Sender: TObject);
	    procedure EditHakuEnter(Sender: TObject);
	    procedure EditHakuExit(Sender: TObject);
	
	    procedure FileListBoxWavChange(Sender: TObject);
	    procedure FileListBoxBmpChange(Sender: TObject);
	    procedure FileListBoxWavDblClick(Sender: TObject);
	    procedure FileListBoxBmpDblClick(Sender: TObject);
	    procedure FileListBoxWavKeyPress(Sender: TObject; var Key: Char);
	    procedure FileListBoxBmpKeyPress(Sender: TObject; var Key: Char);
	    procedure DBGridMuokkaaDblClick(Sender: TObject);
	    procedure DataSourceMuokkaaDataChange(Sender: TObject; Field: TField);
	
	    procedure DBEditWavNimiDragOver(Sender, Source: TObject; X, Y: Integer;
	      State: TDragState; var Accept: Boolean);
	    procedure DBEditBmpNimiDragOver(Sender, Source: TObject; X, Y: Integer;
	      State: TDragState; var Accept: Boolean);
	    procedure DBGridMuokkaaDragOver(Sender, Source: TObject; X, Y: Integer;
	      State: TDragState; var Accept: Boolean);
	    procedure DBEditWavNimiDragDrop(Sender, Source: TObject; X, Y: Integer);
	    procedure DBEditBmpNimiDragDrop(Sender, Source: TObject; X, Y: Integer);
	    procedure DBGridMuokkaaDragDrop(Sender, Source: TObject; X, Y: Integer);
	
	    procedure CheckBoxEditoiClick(Sender: TObject);
	    procedure DBGridMuokkaaColExit(Sender: TObject);
	
	    procedure ButtonSiirraWavClick(Sender: TObject);
	    procedure ButtonSaveWavClick(Sender: TObject);
	    procedure ButtonUusiWavClick(Sender: TObject);
	
	    procedure ButtonSiirraBmpClick(Sender: TObject);
	    procedure ButtonTyhjennaBmpClick(Sender: TObject);
	
	    procedure FormCreate(Sender: TObject);
	  private
	    { Private declarations }
	    EdellinenEhto : integer; { Apu jotta And-ehdon poistuessa tiedetään mikä   }
	                             { ehto laitetaan aktiiviseksi                     }
	
	    function Maxnro(s:string):integer;
	    procedure TeeHaku;
	    procedure TeeEhtoJaHaku(kuka:integer);
	
	    function WavListBoxName:String;
	    function BmpListBoxName:String;
	    function LaitaWavNimi(nimi:string):boolean;
	    function LaitaBmpNimi(nimi:string):boolean;
	
	    function Soita(nimi:string):integer;
	    function Nayta(nimi:string):integer;
	    function SoitaWavList:integer;
	    function NaytaBmpList:integer;
	
	    function AcceptDropWav(Source:TObject):boolean;
	    function AcceptDropBmp(Source:TObject):boolean;
	    function DropNameWav(Source:TObject):string;
	    function DropNameBmp(Source:TObject):string;
	  public
	    { Public declarations }
	  end;
	
	var
	  FormMuokkaa: TFormMuokkaa;
	
	implementation
	
	uses ali;
	
	{$R *.DFM}
	
	{------------------------------------------------------------------------------}
	function TFormMuokkaa.Maxnro(s:string):integer;
	begin
	  QueryMax.Close;
	  QueryMax.Params[0].AsString := s;
	  QueryMax.Open;
	  Maxnro := QueryMaxMaxnro.AsInteger;
	end;
	
	{------------------------------------------------------------------------------}
	{ Hakuehdon käsittelyyn liittyvät apuohjelmat                                  }
	{------------------------------------------------------------------------------}
	
	procedure TFormMuokkaa.TeeHaku;
	begin
	  QueryMuokkaa.Close;  QueryMuokkaa.SQL.Clear;
	  QueryMuokkaa.SQL.Add('select * from WAapi where ' +EditHaku.text);
	  QueryMuokkaa.Open;
	end;
	
	procedure TFormMuokkaa.ButtonHaeClick(Sender: TObject);
	begin
	  TeeHaku;
	end;
	
	procedure TFormMuokkaa.EditHakuEnter(Sender: TObject);
	begin
	  ButtonHae.Default := true;
	end;
	
	procedure TFormMuokkaa.EditHakuExit(Sender: TObject);
	begin
	  ButtonHae.Default := false;
	end;
	
	{------------------------------------------------------------------------------}
	procedure TFormMuokkaa.TeeEhtoJaHaku(kuka:integer);
	{ Rakennetaan hakuehto sen perusteella kuka kutsuu ja onko And päällä
	  Hakuehdoksi tulee joko:
	     kirjain="K"           - ei and-haku, haku kirjaimen perusteella
	     kirjain>=""           - ei and-haku ja kirjain tyhjä
	     nro<9                 - ei and-haku ja tason perusteella
	     kirjain="K" and nro<9 - and-haku
	-------------------------------------------------------------------------------}
	  { Sisäiset apufunktiot ehtojen muodostamiseen                                }
	  function EhtoKirjain:string;
	  begin
	    EhtoKirjain := 'Kirjain="'+EditKirjain.text+'"';
	    if ( EditKirjain.Text <= ' ') then
	      EhtoKirjain := 'Kirjain>=" "';
	  end;
	
	  function EhtoTaso:string;
	  begin
	    EhtoTaso := EditTaso.text+' <= Nro and Nro <= '+EditTaso2.text;
	  end;
	{------------------------------------------------------------------------------}
	begin { TeeEhtoJaHaku }
	  EdellinenEhto := kuka;
	  case kuka of
	    0: EditHaku.Text := EhtoKirjain;
	    1: EditHaku.Text := EhtoTaso;
	  end;
	  if ( CheckBoxAnd.checked ) then
	    EditHaku.Text := EhtoKirjain + ' and ' + EhtoTaso;
	  TeeHaku;
	end;
	
	procedure TFormMuokkaa.EditKirjainChange(Sender: TObject);
	begin
	  TeeEhtoJaHaku((Sender as TMaskEdit).tag);
	  (Sender as TMaskEdit).SelectAll;
	end;
	
	procedure TFormMuokkaa.EditKirjainClick(Sender: TObject);
	begin
	  EdellinenEhto := (Sender as TMaskEdit).tag;
	  (Sender as TMaskEdit).SelectAll;
	end;
	
	procedure TFormMuokkaa.CheckBoxAndClick(Sender: TObject);
	begin
	  TeeEhtoJaHaku(EdellinenEhto);
	end;
	
	{------------------------------------------------------------------------------}
	{ Tiedoston soittamisen ja näyttämisen apuohjelmat:                            }
	{------------------------------------------------------------------------------}
	
	function TFormMuokkaa.Soita(nimi:string):integer;
	begin
	  EditWav.text := nimi;
	  Soita := SoitaTiedosto(nimi,MediaPlayerWav);
	end;
	
	function TFormMuokkaa.Nayta(nimi:string):integer;
	begin
	  EditBmp.text := nimi;
	  Nayta := NaytaTiedosto(nimi,ImageBmp,MediaPlayerAvi);
	end;
	
	function TFormMuokkaa.WavListBoxName:String;
	begin
	  WavListBoxName := ExtractFileName(FileListBoxWav.FileName);
	end;
	
	function TFormMuokkaa.BmpListBoxName:String;
	begin
	  BmpListBoxName := ExtractFileName(FileListBoxBmp.FileName);
	end;
	
	function TFormMuokkaa.SoitaWavList:integer;
	begin
	  SoitaWavList := Soita(WavListBoxName);
	end;
	
	function TFormMuokkaa.NaytaBmpList:integer;
	begin
	  NaytaBmpList := Nayta(BmpListBoxName);
	end;
	
	function TFormMuokkaa.LaitaWavNimi(nimi:string):boolean;
	begin
	  LaitaWavNimi := false;
	  if ( nimi = '*' ) then exit;
	  LaitaWavNimi := true;
	  QueryMuokkaa.Edit;
	  QueryMuokkaaAani.AsString := nimi;
	  Soita(nimi);
	end;
	
	function TFormMuokkaa.LaitaBmpNimi(nimi:string):boolean;
	begin
	  LaitaBmpNimi := false;
	  if ( nimi = '*' ) then exit;
	  LaitaBmpNimi := true;
	  QueryMuokkaa.Edit;
	  QueryMuokkaaKuva.AsString := nimi;
	end;
	
	{------------------------------------------------------------------------------}
	{ Tapahtumia joista joko näytetään tai soitetaan, mahdollisesti siirretään     }
	{ nimi tietokantaan:                                                           }
	procedure TFormMuokkaa.FileListBoxWavDblClick(Sender: TObject);
	begin
	  if ( QueryMuokkaaAani.AsString <= '' ) or ( CheckBoxSiirra.Checked )  then
	    LaitaWavNimi(WavListBoxName);
	  SoitaWavList;
	end;
	
	procedure TFormMuokkaa.FileListBoxBmpDblClick(Sender: TObject);
	begin
	  if ( QueryMuokkaaKuva.AsString <= '' ) or ( CheckBoxSiirra.Checked )  then
	    LaitaBmpNimi(BmpListBoxName);
	end;
	
	procedure TFormMuokkaa.FileListBoxWavChange(Sender: TObject);
	begin
	  if ( CheckBoxSoita.Checked ) then SoitaWavList;
	end;
	
	procedure TFormMuokkaa.FileListBoxBmpChange(Sender: TObject);
	begin
	  NaytaBmpList;
	end;
	
	procedure TFormMuokkaa.FileListBoxWavKeyPress(Sender: TObject; var Key: Char);
	begin
	  if ( Key = #13 ) then
	    if ( DataSourceMuokkaa.State in [dsEdit] ) then
	      LaitaWavNimi(WavListBoxName)
	    else
	      Soita(WavListBoxName);
	end;
	
	procedure TFormMuokkaa.FileListBoxBmpKeyPress(Sender: TObject; var Key: Char);
	begin
	  if ( Key = #13 ) then
	    if ( DataSourceMuokkaa.State in [dsEdit] ) then
	      LaitaBmpNimi(BmpListBoxName)
	end;
	
	procedure TFormMuokkaa.DBGridMuokkaaDblClick(Sender: TObject);
	begin
	  Soita(QueryMuokkaaAani.AsString);
	  Nayta(QueryMuokkaaKuva.AsString);
	end;
	
	procedure TFormMuokkaa.DataSourceMuokkaaDataChange(Sender: TObject;
	  Field: TField);
	begin
	  if ( CheckBoxSoita.Checked ) then Soita(QueryMuokkaaAani.AsString);
	  Nayta(QueryMuokkaaKuva.AsString);
	end;
	
	{------------------------------------------------------------------------------}
	{ Drag and drop rutiinit:                                                      }
	{------------------------------------------------------------------------------}
	{ Ensin apufunktioita, ettei tarvitse kirjoittaa kaikkea monta kertaa:         }
	function TFormMuokkaa.AcceptDropWav(Source:TObject):boolean;
	begin
	  AcceptDropWav := ( Source = FileListBoxWav ) or ( Source = EditWav );
	end;
	
	function TFormMuokkaa.AcceptDropBmp(Source:TObject):boolean;
	begin
	  AcceptDropBmp := ( Source = FileListBoxBmp ) or ( Source = ImageBmp) or
	                   ( Source = EditBmp );
	end;
	
	function TFormMuokkaa.DropNameWav(Source:TObject):string;
	begin
	  DropNameWav := '*';
	  if ( Source = FileListBoxWav ) then  DropNameWav := WavListBoxName;
	  if ( Source = EditWav )        then  DropNameWav := EditWav.text;
	end;
	
	function TFormMuokkaa.DropNameBmp(Source:TObject):string;
	begin
	  DropNameBmp := '*';
	  if ( Source = FileListBoxBmp ) then DropNameBmp := BmpListBoxName;
	  if ( Source = ImageBmp) or ( source = EditBmp ) then
	                                      DropNameBmp := EditBmp.text;
	end;
	
	{ Sitten varsinaiset tapahtumat: ----------------------------------------------}
	procedure TFormMuokkaa.DBEditWavNimiDragOver(Sender, Source: TObject; 
	                         X, Y: Integer;  State: TDragState; var Accept: Boolean);
	begin
	  Accept := AcceptDropWav(Source);
	end;
	
	procedure TFormMuokkaa.DBEditBmpNimiDragOver(Sender, Source: TObject; 
	                         X, Y: Integer;  State: TDragState; var Accept: Boolean);
	begin
	  Accept := AcceptDropBmp(Source);
	end;
	
	procedure TFormMuokkaa.DBGridMuokkaaDragOver(Sender, Source: TObject; 
	                          X, Y: Integer; State: TDragState; var Accept: Boolean);
	begin
	  Accept := AcceptDropWav(Source) or AcceptDropBmp(Source);
	end;
	
	procedure TFormMuokkaa.DBEditWavNimiDragDrop(Sender, Source: TObject; 
	                                                                 X,  Y: Integer);
	begin
	  LaitaWavNimi(DropNameWav(Source));
	end;
	
	procedure TFormMuokkaa.DBEditBmpNimiDragDrop(Sender, Source: TObject; 
	                                                                  X, Y: Integer);
	begin
	  LaitaBmpNimi(DropNameBmp(Source));
	end;
	
	{------------------------------------------------------------------------------}
	procedure TFormMuokkaa.DBGridMuokkaaDragDrop(Sender, Source: TObject; 
	                                                                 X,  Y: Integer);
	var lparam:longint;
	    bmp,wav : string;
	begin
	  { Talletetaan nimet, koska ne muuttuvat tietokannan rivin muuttuessa         }
	  wav := DropNameWav(Source);  { HUOM!  Voi tulla *, joka jatkossa hylätään    }
	  bmp := DropNameBmp(Source);  {  - " -                                        }
	
	  { Vaihdetaan tietokanta pudotetulle riville lähettämällä MouseClick-viesti   }
	  DBGridMuokkaa.SelectedIndex := 0;
	  lparam := {x or }(longint(y) shl 16); { x=0 jottei siirrä saraketta          }
	  SendMessage(DBGridMuokkaa.handle,WM_LBUTTONDOWN,0,lparam);
	  SendMessage(DBGridMuokkaa.handle,WM_LBUTTONUP,0,lparam);
	
	  LaitaWavNimi(wav);           { HUOM! Vähintään toinen on aina * eikä siis    }
	  LaitaBmpNimi(bmp);           { laitetakaan!                                  }
	end;
	
	{------------------------------------------------------------------------------}
	{ Muita tapahtumia:                                                            }
	{------------------------------------------------------------------------------}
	
	procedure TFormMuokkaa.CheckBoxEditoiClick(Sender: TObject);
	begin
	  DataSourceMuokkaa.AutoEdit := CheckBoxEditoi.Checked;
	end;
	
	procedure TFormMuokkaa.DBGridMuokkaaColExit(Sender: TObject);
	{ Jos lisätään uusi tietue, etsitään nro:ksi valmiiksi suurin+1                }
	begin
	  if ( DataSourceMuokkaa.State in [dsInsert] ) and
	     ( QueryMuokkaaNro.AsString <= '' ) and
	     ( QueryMuokkaaKirjain.AsString > '' )then
	    QueryMuokkaaNro.AsInteger := Maxnro(QueryMuokkaaKirjain.AsString)+1;
	end;
	
	{------------------------------------------------------------------------------}
	{ Äänen nauhoitukseen liittyvät rutiinit:                                      }
	{------------------------------------------------------------------------------}
	
	procedure TFormMuokkaa.ButtonSiirraWavClick(Sender: TObject);
	begin
	  LaitaWavNimi(EditWav.text);
	end;
	
	procedure TFormMuokkaa.ButtonSaveWavClick(Sender: TObject);
	begin
	  if ( MediaPlayerWav.mode = mpNotReady ) then exit;
	
	  if ( EditWav.text <= ' ' ) then
	    SaveDialogWav.FileName := QueryMuokkaaAani.AsString
	  else
	    SaveDialogWav.FileName := EditWav.text;
	  if ( NOT SaveDialogWav.execute ) then exit;
	
	  MediaPlayerWav.Filename := SoitaNimi(SaveDialogWav.FileName);
	  MediaPlayerWav.Save;
	  EditWav.text := ExtractFileName(SaveDialogWav.FileName);
	end;
	
	
	procedure TFormMuokkaa.ButtonUusiWavClick(Sender: TObject);
	begin
	  MediaPlayerWav.Close;
	  MediaPlayerWav.Filename := 'tyhjawav.wav';
	  MediaPlayerWav.Open;
	  EditWav.text := '';
	end;
	
	{------------------------------------------------------------------------------}
	{ Kuvan käsittelyyn liittyvät rutiinit:                                        }
	{------------------------------------------------------------------------------}
	
	procedure TFormMuokkaa.ButtonSiirraBmpClick(Sender: TObject);
	begin
	  LaitaBmpNimi(EditBmp.text);
	end;
	
	procedure TFormMuokkaa.ButtonTyhjennaBmpClick(Sender: TObject);
	begin
	  Nayta('');
	end;
	
	{------------------------------------------------------------------------------}
	{ Lomakkeen luonnissa tehtävät toimenpiteet:                                   }
	procedure TFormMuokkaa.FormCreate(Sender: TObject);
	begin
	  QueryMuokkaa.Active := True;
	  TeeHaku;
	end;
	
	
	end.


Prev Next Up Title Contents Index