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.