199 lines
4.6 KiB
Plaintext
199 lines
4.6 KiB
Plaintext
unit umain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ieview,
|
|
imageenview, ieds, StdCtrls, ExtCtrls, hyieutils, iexBitmaps, hyiedefs, iesettings, iexLayers, iexRulers;
|
|
|
|
type
|
|
Tfmain = class(TForm)
|
|
ImageEnView1: TImageEnView;
|
|
MainMenu1: TMainMenu;
|
|
File1: TMenuItem;
|
|
Open1: TMenuItem;
|
|
N1: TMenuItem;
|
|
Exit1: TMenuItem;
|
|
OpenDialog1: TOpenDialog;
|
|
Control1: TMenuItem;
|
|
Play1: TMenuItem;
|
|
Pause1: TMenuItem;
|
|
Stop1: TMenuItem;
|
|
View1: TMenuItem;
|
|
N111: TMenuItem;
|
|
N211: TMenuItem;
|
|
Fitwindow1: TMenuItem;
|
|
procedure Exit1Click(Sender: TObject);
|
|
procedure Open1Click(Sender: TObject);
|
|
procedure Play1Click(Sender: TObject);
|
|
procedure ImageEnView1DShowNewFrame(Sender: TObject);
|
|
procedure Pause1Click(Sender: TObject);
|
|
procedure Stop1Click(Sender: TObject);
|
|
procedure ImageEnView1DShowEvent(Sender: TObject);
|
|
procedure N111Click(Sender: TObject);
|
|
procedure N211Click(Sender: TObject);
|
|
procedure Fitwindow1Click(Sender: TObject);
|
|
procedure ImageEnView1DrawCanvas(Sender: TObject; ACanvas: TCanvas; ARect: TRect);
|
|
private
|
|
{ Private declarations }
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
fmain: Tfmain;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
{$R WindowsTheme.res}
|
|
|
|
const
|
|
Show_Position_By_Frame = False;
|
|
|
|
// File | Exit
|
|
procedure Tfmain.Exit1Click(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
// File | Open
|
|
procedure Tfmain.Open1Click(Sender: TObject);
|
|
begin
|
|
with ImageEnView1.IO.DShowParams do
|
|
begin
|
|
if State = gsRunning then
|
|
begin
|
|
Stop;
|
|
Disconnect;
|
|
end;
|
|
|
|
if OpenDialog1.Execute then
|
|
begin
|
|
FileInput := OpenDialog1.FileName;
|
|
EnableSampleGrabber := true;
|
|
RenderAudio := true;
|
|
Connect;
|
|
if Show_Position_By_Frame then
|
|
ImageEnView1.IO.DShowParams.TimeFormat := tfFrame;
|
|
Position := 0;
|
|
Pause; // This shows first frame
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// Control | Play
|
|
procedure Tfmain.Play1Click(Sender: TObject);
|
|
begin
|
|
ImageEnView1.IO.DShowParams.Run;
|
|
if Show_Position_By_Frame then
|
|
ImageEnView1.IO.DShowParams.TimeFormat := tfFrame;
|
|
end;
|
|
|
|
procedure Tfmain.ImageEnView1DShowNewFrame(Sender: TObject);
|
|
begin
|
|
with ImageEnView1 do
|
|
begin
|
|
IO.DShowParams.GetSample(IEBitmap);
|
|
Update;
|
|
end;
|
|
end;
|
|
|
|
// Control | Pause
|
|
procedure Tfmain.Pause1Click(Sender: TObject);
|
|
begin
|
|
ImageEnView1.IO.DShowParams.Pause;
|
|
end;
|
|
|
|
// Control | Stop
|
|
procedure Tfmain.Stop1Click(Sender: TObject);
|
|
begin
|
|
with ImageEnView1.IO.DShowParams do
|
|
begin
|
|
Stop;
|
|
Position := 0;
|
|
Pause; // This shows first frame
|
|
end;
|
|
end;
|
|
|
|
// Handle DirectShow call backs
|
|
procedure Tfmain.ImageEnView1DShowEvent(Sender: TObject);
|
|
var
|
|
event: integer;
|
|
begin
|
|
with ImageEnView1.IO.DShowParams do
|
|
if Connected then
|
|
while GetEventCode(event) do
|
|
case event of
|
|
IEEC_COMPLETE:
|
|
Stop1Click(self); // call STOP button
|
|
end;
|
|
end;
|
|
|
|
// Zoom 1:1
|
|
procedure Tfmain.N111Click(Sender: TObject);
|
|
begin
|
|
ImageEnView1.AutoFit := false;
|
|
ImageEnView1.Zoom := 100;
|
|
end;
|
|
|
|
// Zoom 2:1
|
|
procedure Tfmain.N211Click(Sender: TObject);
|
|
begin
|
|
ImageEnView1.AutoFit := false;
|
|
ImageEnView1.Zoom := 200;
|
|
end;
|
|
|
|
// Zoom to Window
|
|
procedure Tfmain.Fitwindow1Click(Sender: TObject);
|
|
begin
|
|
ImageEnView1.AutoFit := true;
|
|
ImageEnView1.Update;
|
|
end;
|
|
|
|
// Convert seconds to string (hh:mm:ss:cc)
|
|
function secs2str(secs: integer): string;
|
|
const
|
|
Include_MicroSecs = False;
|
|
var
|
|
c, m, s, h: integer;
|
|
cc, mm, ss, hh: string;
|
|
begin
|
|
c := secs div 100000;
|
|
s := c div 100;
|
|
m := s div 60;
|
|
h := m div 60;
|
|
hh := inttostr(h);
|
|
if length(hh) = 1 then
|
|
hh := '0' + hh;
|
|
m := m - h * 60;
|
|
mm := inttostr(m);
|
|
if length(mm) = 1 then
|
|
mm := '0' + mm;
|
|
s := s - (h * 3600 + m * 60);
|
|
ss := inttostr(s);
|
|
if length(ss) = 1 then
|
|
ss := '0' + ss;
|
|
c := c - (h * 3600 + m * 60 + s) * 100;
|
|
cc := inttostr(c);
|
|
if length(cc) = 1 then
|
|
cc := '0' + cc;
|
|
if Include_MicroSecs then
|
|
result := hh + ':' + mm + ':' + ss + '.' + cc
|
|
else
|
|
result := hh + ':' + mm + ':' + ss;
|
|
end;
|
|
|
|
|
|
// Show current position
|
|
procedure Tfmain.ImageEnView1DrawCanvas(Sender: TObject; ACanvas: TCanvas;
|
|
ARect: TRect);
|
|
begin
|
|
if Show_Position_By_Frame then
|
|
ACanvas.TextOut( 8, ImageEnView1.ClientHeight - 20, 'Position/Duration: ' + IntToStr( ImageEnView1.IO.DShowParams.Position ) + '/' + IntToStr(ImageEnView1.IO.DShowParams.Duration))
|
|
else
|
|
ACanvas.TextOut( 8, ImageEnView1.ClientHeight - 20, 'Position/Duration: ' + secs2str( ImageEnView1.IO.DShowParams.Position ) + '/' + secs2str(ImageEnView1.IO.DShowParams.Duration));
|
|
end;
|
|
|
|
end.
|