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.