home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2006 February (Special)
/
Chip-Special_2006-02_Nero-7.bin
/
vypalovaci_utility
/
subtitle_workshop
/
SubtitleWorkshop251.exe
/
PascalScripts
/
Example.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2004-02-10
|
12KB
|
221 lines
// -------------------------------------------------------------------------- //
// Subtitle Workshop - Pascal scripts sample //
// Copyright ⌐ 2001-2004 URUSoft //
// http://www.urusoft.net //
// //
// This sample will go through all the subtitles in the file and will delete //
// all the ones which's text length is longer than 20 characters. This is //
// just a small sample of what you can do with Pascal Scripts in Subtitle //
// Workshop. //
// //
// This code uses only few of the functions available. A list of all the //
// available functions/procedures and their explanation is below. Just note //
// that in every function that use the "Num" parameter, it refers to the //
// subtitle number. //
// //
// Declaration : function IsOriginalLoaded: Boolean; //
// Use : returns true if the original file is loaded //
// //
// Declaration : function IsTranslatedLoaded: Boolean; //
// Use : returns true if the translated file is loaded //
// //
// Declaration : procedure EnableWorkArea; //
// Use : enables the working area (when no file is loaded) //
// //
// Declaration : function GetSubtitleCount: Integer; //
// Use : retrieves the total number of subtitles that are loaded //
// //
// Declaration : function IsSubtitleSelected(const Num: Integer): Boolean; //
// Use : returns true if a subtitle is selected, and false if not //
// //
// Declaration : function GetSubtitleText(const Num: Integer): String; //
// Use : returns the text of a subtitle //
// //
// Declaration : procedure SetSubtitleText(const Num: Integer; //
// const Text: String); //
// Use : sets the text of a specified subtitle to the value you pass //
// //
// Declaration : function GetSubtitleTrans(const Num: Integer): String; //
// Use : returns the translation of a subtitle //
// //
// Declaration : procedure SetSubtitleTrans(const Num: Integer; //
// const Text: String); //
// Use : sets the translation of a subtitle to the value you pass //
// //
// Declaration : function GetSubtitleInitialTime(const Num: Integer): Integer;//
// Use : returns the initial time of a subtitle, in milliseconds //
// //
// Declaration : procedure SetSubtitleInitialTime(const Num: Integer; //
// const InitialTime: Integer);//
// Use : sets the initial time of a subtitle to the value you pass, //
// in milliseconds //
// //
// Declaration : function GetSubtitleFinalTime(const Num: Integer): Integer; //
// Use : returns the final time of a subtitle, in milliseconds //
// //
// Declaration : procedure SetSubtitleFinalTime(const Num: Integer; //
// const FinalTime: Integer); //
// Use : sets the final time of a subtitle to the value you pass, //
// in milliseconds //
// //
// Declaration : procedure InsertSubtitle(const Pos: Integer; //
// const InitialTime, //
// FinalTime: Integer; //
// const Text, Translation: String); //
// Use : inserts a subtitle. Position is where you want to insert it. //
// //
// Declaration : procedure DeleteSubtitle(const Num: Integer); //
// Use : deletes the specified subtitle //
// //
// Declaration : function MsgBox(const AMsg, BCap1, BCap2, BCap3: String; //
// const IconInd: Integer): Integer; //
// Use : displays a message box. AMsg is the text. BCap1 is the //
// text of the first button. BCap2 and BCap3 are the text of //
// the second and third buttons respectively. If you want them //
// to be hidden, just pass '' (blank string) as the parameter. //
// IconInd is the icon index used by the MessageBox() function, //
// the constants are defined in Delphi's Windows.pas //
// (eg. MB_ICONERROR, MB_ICONQUESTION, etc). //
// //
// Date and time functions available: //
// //
// function FormatDateTime(const Format: String; //
// DateTime: TDateTime): String; //
// function GetYear: Integer; //
// function MyGetMonth: Integer; //
// function MyGetDay: Integer; //
// function MyGetHour: Integer; //
// function MyGetMinute: Integer; //
// function MyGetSecond: Integer; //
// function MyGetDate: String; //
// function MyGetTime: String; //
// function MyGetDateTime: String; //
// //
// -------------------------------------------------------------------------- //
program DeleteShortSubs;
// -----------------------------------------------------------------------------
const MB_ICONQUESTION = $00000020;
// -----------------------------------------------------------------------------
var
// We declarate the variables that are going to be our controls
Form : TForm;
Pnl : TPanel;
Chk : TCheckBox;
Btn1 : TButton;
Btn2 : TButton;
// -----------------------------------------------------------------------------
procedure Btn1Click(Sender: TObject);
var
a: Integer;
begin
for a := GetSubtitleCount-1 downto 0 do
begin
if Length(GetSubtitleText(a)) > 20 then
begin
if Chk.Checked then
begin
case MsgBox('Do you want to delete subtitle number ' + IntToStr(a) + '?', '&Yes', '&No', '&Cancel', MB_ICONQUESTION) of
1: DeleteSubtitle(a);
2: SetSubtitleText(a, 'YOU DECIDED NOT TO DELETE THIS SUBTITLE! :)');
3: exit;
end;
end else
DeleteSubtitle(a);
end;
end;
end;
// -----------------------------------------------------------------------------
var
n : Integer;
begin
// Enable working area if no file is loaded
if IsOriginalLoaded = False then EnableWorkArea;
// "now" is a Delphi function to get current date and time
// For more information on "FormatDateTime" refer to Delphi's help
InsertSubtitle(0,1000,2000, 'We insert new subtitle, in position 0 (first node)', 'This is the translation');
InsertSubtitle(1,3000,4000, 'We insert new subtitle, in position 1 (second node)', 'This is the translation');
InsertSubtitle(2,5000,6000, FormatDateTime('c', now), 'This is the translation');
n := GetSubtitleCount;
InsertSubtitle(n, GetSubtitleFinalTime(n-1)+1000, GetSubtitleFinalTime(n-1)+3000,
'We insert new subtitle, in position ' + IntToStr(n) + ' (last node)', 'This is the translation');
// Create the main form. It's not mandatory to create one - I do it here just
// to show you what can be done.
Form := TForm.Create(Application);
try
Form.Font.Name := 'Tahoma';
Form.Font.Size := 8;
Form.Caption := 'Delete long subtitles';
Form.BorderStyle := bsDialog;
Form.BorderIcons := [];
Form.Position := poScreenCenter;
Form.Width := 206;
Form.Height := 107;
// Create panel, to make the form look nicer
Pnl := TPanel.Create(Application);
Pnl.Left := 8;
Pnl.Top := 8;
Pnl.Height := 35;
Pnl.Width := 185;
Pnl.Parent := Form;
// Create the "Show confirmation" checkbox
Chk := TCheckBox.Create(Application);
Chk.Parent := Pnl;
Chk.ParentFont := True;
Chk.Top := 8;
Chk.Left := 8;
Chk.Height := 17;
Chk.Width := 169;
Chk.Caption := 'Confirm each deletion';
// Create Ok button
Btn1 := TButton.Create(Application);
Btn1.Parent := Form;
Btn1.Default := True;
Btn1.Caption := '&Ok';
Btn1.ModalResult := mrOk;
Btn1.OnClick := @Btn1Click;
Btn1.Top := 50;
Btn1.Left := 8;
Btn1.Width := 88;
Btn1.Height := 25;
Btn1.Font.Style := Btn1.Font.Style + [fsBold];
// Create Cancel button
Btn2 := TButton.Create(Application);
Btn2.Parent := Form;
Btn2.Caption := '&Cancel';
Btn2.ModalResult := mrCancel;
Btn2.Top := 50;
Btn2.Left := 104;
Btn2.Width := 88;
Btn2.Height := 25;
// Show the form, as modal, so that you can't use Subtitle Workshop while
// the form is loaded.
Form.ShowModal;
finally
// Free everything from memory
Chk.Free;
Pnl.Free;
Btn1.Free;
Btn2.Free;
Form.Free;
end;
end.