Prev Next Up Title Contents Index

ali.pas

ali.pas - WinAapisen aliohjelmia

	unit ali;
	{-------------------------------------------------------------------------------
	  Modulissa on aliohjelmia Win Aapista varten.
	
	  Tekijä:         Vesa Lappalainen
	  Aika:           22.7.1996
	  Delphi-versio:  1.0 & 2.0
	  Muutokset:
	-------------------------------------------------------------------------------}
	
	interface
	
	uses   MPlayer,ExtCtrls,Classes;
	
	function isoksi(c:char): char;
	function pieneksi(c:char): char;
	function LisaaHakemistoJaTarkennin(nimi,hak,tark:string):string;
	function SoitaNimi(nimi:string):string;
	function NaytaNimi(nimi:string):string;
	function SoitaTiedosto(nimi:string; MediaPlayer:TMediaPlayer):integer;
	function SoitaTiedostoNotify(nimi:string; MediaPlayer:TMediaPlayer;notify:boolean):integer;
	function NaytaTiedosto(nimi:string; Image:TImage; MediaPlayer:TMediaPlayer):integer;
	
	implementation
	
	{------------------------------------------------------------------------------}
	function isoksi(c:char): char;
	begin
	  case c of
	   'å' : isoksi := 'Å';
	   'ä' : isoksi := 'Ä';
	   'ö' : isoksi := 'Ö';
	  else   isoksi := upcase(c);
	  end;
	end;
	
	{------------------------------------------------------------------------------}
	function pieneksi(c:char): char;
	begin
	  pieneksi := char(ord(c)-ord('A')+ord('a'));
	  if ( 'A' <= c ) AND ( c <= 'Z' ) then exit;
	  case c of
	   'Å' : pieneksi := 'å';
	   'Ä' : pieneksi := 'ä';
	   'Ö' : pieneksi := 'ö';
	  else   pieneksi := c;
	  end;
	end;
	
	{------------------------------------------------------------------------------}
	function LisaaHakemistoJaTarkennin(nimi,hak,tark:string):string;
	begin
	  if ( pos('.',nimi) = 0 ) then nimi := nimi + tark; { Lisätään tark jos ei oo}
	  if ( pos('\',nimi) = 0 ) then nimi := hak + nimi;
	  LisaaHakemistoJaTarkennin := nimi;
	end;
	
	{------------------------------------------------------------------------------}
	function SoitaNimi(nimi:string):string;
	begin
	  SoitaNimi := LisaaHakemistoJaTarkennin(nimi,'wav\','.wav');
	end;
	
	{------------------------------------------------------------------------------}
	function NaytaNimi(nimi:string):string;
	begin
	  NaytaNimi := LisaaHakemistoJaTarkennin(nimi,'bmp\','.bmp');
	end;
	
	{------------------------------------------------------------------------------}
	function SoitaTiedostoNotify(nimi:string; MediaPlayer:TMediaPlayer;
	                             notify:boolean):integer;
	{-------------------------------------------------------------------------------
	  Palauttaa:
	    -1 = edellinen soittaminen on kesken
	     1 = ei voi soittaa (esim. tiedostoa ei ole)
	     0 = soittaminen OK
	  Parametrit:
	     nimi        = soitettavan tiedoston nimi (oletus .wav)
	     MediaPlayer = soitin, jolla soitetaan
	-------------------------------------------------------------------------------}
	begin
	  SoitaTiedostoNotify := -1;
	  if ( MediaPlayer = NIL ) then exit;
	  if MediaPlayer.mode = mpPlaying then exit; { Jos vielä soittaa edellistä    }
	  SoitaTiedostoNotify := 1;
	  if ( nimi = '' ) then exit;
	  MediaPlayer.notify := false;
	  MediaPlayer.Filename := SoitaNimi(nimi);
	  try
	    MediaPlayer.Open;
	    MediaPlayer.notify := notify;
	    MediaPlayer.Play;
	    SoitaTiedostoNotify := 0;
	  except
	    on EMCIDeviceError do ;
	  end;
	end;
	
	{------------------------------------------------------------------------------}
	function SoitaTiedosto(nimi:string; MediaPlayer:TMediaPlayer):integer;
	begin
	  SoitaTiedosto := SoitaTiedostoNotify(nimi,MediaPlayer,false);
	end;
	
	{------------------------------------------------------------------------------}
	function LataaKuva(nimi:string;Image:TImage):integer;
	begin
	  LataaKuva := 0;
	  Image.visible := false;
	  Image.Parent.Repaint; { Tämä vain mahd. edell. AVI-kuvan poistamiseksi       }
	
	  try
	    Image.Picture.LoadFromFile(NaytaNimi(nimi));
	  except
	    LataaKuva := 1;
	    exit;
	  end;
	end; { NaytaKuva }
	
	{------------------------------------------------------------------------------}
	function NaytaTyhjaKuva(Image:TImage):integer;
	begin
	  NaytaTyhjaKuva := LataaKuva('.\tyhjabmp.bmp',Image);
	  Image.Stretch := False;
	end;
	
	{------------------------------------------------------------------------------}
	{ Apumuuttujia jottei samaa kuvaa näytetä turhaan kahdesti                     }
	var EdKuva:string;
	    EdImage:TImage;
	
	function NaytaTiedosto(nimi:string; Image:TImage; MediaPlayer:TMediaPlayer):integer;
	{-------------------------------------------------------------------------------
	  Näyttää BMP, ICO tai WMF (Windows MetaFile) tiedoston omassa
	  Image-kontrollissa.  Image-kontrolli pitää olla laitettu johonkin omaan
	  ikkunaansa (esim. paneliin), jonka kokoiseksi kuva voidaan venyttää.
	  Imagen stretch-ominaisuus pitää olla päällä.  Kuva tehdään alkuperäisen
	  muotoiseksi, mahdollisimman isoksi (Imagen isä-kontrolli määrää kuvan
	  maksimikoon).
	  AVI-tiedostot soitetaan MediaPlayerillä jos voidaan.
	
	  Palauttaa:
	     1 = ei voi näyttää (esim. tiedostoa ei ole)
	     0 = soittaminen OK
	  Parametrit:
	     nimi        = soitettavan tiedoston nimi (oletus .wav)
	     MediaPlayer = soitin, jolla soitetaan
	-------------------------------------------------------------------------------}
	var ix1,iy1,ix,iy,px,py,gx,gy:integer;
	    ratio : real;
	begin
	  NaytaTiedosto := 0;
	  if ( nimi = EdKuva ) and ( Image = EdImage ) then exit; { Onko jo näytetty?  }
	  EdKuva := nimi; EdImage := Image; 
	
	  if ( nimi = '' ) then begin
	    if ( MediaPlayer <> NIL ) then MediaPlayer.Close;
	    NaytaTiedosto := NaytaTyhjaKuva(Image);
	    exit;
	  end;
	
	  if ( MediaPlayer <> NIL ) then begin { Kokeillaan voiko soittaa MP:llä       }
	    MediaPlayer.Close;
	    if ( SoitaTiedosto(NaytaNimi(nimi),MediaPlayer) = 0 ) then begin
	      NaytaTiedosto := NaytaTyhjaKuva(Image);
	      EdImage := NIL; { Tässä tapauksessa sama HALUTAAN soittaa }
	      exit;
	    end;
	  end;
	
	  NaytaTiedosto := 1;
	  if ( LataaKuva(nimi,Image) <> 0 ) then exit;
	
	  { Skaalataan kuva bittikartan muotoiseksi }
	  gx := Image.Picture.Graphic.Width;
	  gy := Image.Picture.Graphic.Height;
	  px := Image.Parent.ClientWidth;
	  py := Image.Parent.ClientHeight;
	  if ( gy = 0 ) or ( py = 0 ) then exit; { Jos kuvalla ei korkeutta            }
	  ratio := gx/gy;
	  if ( ratio = 0 ) then exit;
	  ix  := px;                  { Yriteään mahdollisimman leveätä kuvaa          }
	  ix1 := 0;                   { Laidasta laitaan                               }
	  iy  := round(px/ratio);     { Lasketaan tarvittava korkeus                   }
	  iy1 := round((py-iy)/2);    { Korkeussuunan keskitys                         }
	  if ( iy > py ) then begin   { Tarvitaankin kapeampi kuva, korkeus liian iso  }
	    ix  := round(py * ratio); { Lasketaan tarvittava uusi leveys               }
	    ix1 := round((px-ix)/2);  { Keskitys leveyssuunnassa                       }
	    iy  := py;                { Täysi korkeus käyttöön                         }
	    iy1 := 0;                 { Yläreunasta alareunaan                         }
	   end;
	  Image.Left    := ix1;
	  Image.Top     := iy1;
	  Image.Width   := ix;
	  Image.Height  := iy;
	  Image.Stretch := true;
	  Image.visible := true;
	  NaytaTiedosto := 0;
	end;
	
	end.


Prev Next Up Title Contents Index