last Free Pascal version used to compile was 3.3.1 trunk r42041
last Lazarus version used to compile was 2.1 trunk r61292
may not work on older release versions.
all units in this repository are independent from outside. but may require each other. for example uTimeCodeEdit requires uModalEditor and uTimeCode.
Some graphics and drawing routines
Common routines to work with files.
Common routines to work with GUI.
Common routines to work with numbers.
Common routines to work with strings.
same as uListViewUtils below. but for (Check)ListBox.
Utility to work with the standard ListView. DragDrop sorting items, delete, save, load, etc all supporting multi-select. usage example;
uses
..., uListViewUtils;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
ListView1.OnDragDrop := @ListViewUtils.DragDrop;
ListView1.OnDragOver := @ListViewUtils.DragOver;
ListView1.OnMouseDown := @ListViewUtils.MouseDown;
ListView1.OnMouseMove := @ListViewUtils.MouseMove;
{$ifdef LINUX}
ListView1.DragMode := dmManual;
{$endif};
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
ListViewUtils.DeleteItems(ListView1);
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
ListViewUtils.MoveItemsUp(ListView1);
end;
...
A minimal generic list with virtual methods. mainly for small list of records. see uGenericSubtitleFile for an example.
A dialog form to work with anything you like. it's ChildSizing is set. It only contains OK and Cancel buttons.
just create your controls after you've called create constructor and set parent and owner of your newly created controls to TModalEditor instance.
the layout is top to bottom so the creation order matters.
also see uTimeCodeEdit for an example of a descendant class.
A simple dialog form to edit a float number.
A TimeCode and TimeCode List parser.
it can parse a TimeCode string written in twelve forms like HH:MM:SS.ms
or M:S.ms
or SS.ms
etc.
there is ability to initialize TTimeCode with different separators like HH:MM:SS;ms.
you can also control precision of the milliseconds part. like 1 or 10 etc.
an example from BitHesab console project:
uses
..., uTimeSlice;
...
procedure TBitHesab.ParseParams;
var
...
TC: TTimeCode;
begin
...
if HasOption('d', 'duration') then
begin
s := GetOptionValue('d', 'duration');
TC.ValueAsString := s;
FDuration := Trunc(TC.ValueAsDouble);
if FDuration = 0 then
Fatal(rsWrongDur)
else
begin
b1 := ForceInRange(FDuration, MinDur, MaxDur);
if b1 then
Warn(rsClipping + 'duration');
end;
end;
end;
A dialog form to work with uTimeCode unit. an example function from one private project is:
uses
..., uTimeCodeEdit;
...
procedure TFFTimeCodeListFilter.ItemNew(Sender: TObject);
var
tce: TTimeCodeEdit;
begin
tce := TTimeCodeEdit.Create(nil);
try
if tce.ShowModal = mrOk then
FList.Items.Add(tce.Value);
finally
tce.Free;
end;
end;
A dialog form to define format for further TimeCode inputs. such as paste from clipboard, read from file etc.
an usage example from SubzBor project:
procedure TSBMain.DefineUserInputsFormat;
var
fd: TTimeCodeFormatDialog;
begin
SBDatas.TaskDlg.Execute(Self.Handle); //this just shows some information text
fd := TTimeCodeFormatDialog.Create(Self);
try
fd.Value.TimeCodeFormat := FFormatSettings; //optional, you can prepare it with some previously stored setting
fd.ShowModal;
if fd.ModalResult = mrOK then
FFormatSettings := fd.Value.TimeCodeFormat;
finally
fd.Free;
end;
FInputsFormatDefined := True;
end;
A TimeSlice and TimeSlice List parser based on uTimeCode unit.
Here 00:00:00.000-00:00:00.001
is considered a valid slice of the time (a TimeSlice).
with a start and an ending TimeCode. when (start >= 0) and (end > start).
an example function from one private project is:
uses
..., uTimeSlice;
...
function TimeSliceListToFFTimeLine(const ATimeSliceList: String): String;
var
sl: TStringList;
ts: TTimeSlice;
s: String;
i: Integer;
begin
Result := EmptyStr;
sl := TStringList.Create;
try
sl.Text := ATimeSliceList;
if sl.Count = 0 then Exit;
Result := ':enable=';
for i := 0 to sl.Count-1 do
begin
ts.ValueAsString := sl[i];
if i < 1 then
s := EmptyStr
else
s := '+';
Result := Result+s+'between(t\,'+FloatRound(ts.Value.StartPos.ValueAsDouble,3).ToString;
Result := Result+'\,'+FloatRound(ts.Value.EndPos.ValueAsDouble,3).ToString+')';
end;
finally
sl.Free;
end;
end;
which converts from:
00:00:20.000-00:00:40.001
00:01:20.000-00:01:40.001
to:
:enable=between(t\,20\,40.001)+between(t\,80\,100.001)
A dialog form to work with uTimeCode and uTimeSlice units. without delay support. usage is the same as uTimeSliceEditEx.pas below.
A dialog form to work with uTimeCode and uTimeSlice units. an usage example from SubzBor project:
uses
..., uTimeSliceEditEx;
...
procedure TSBMain.AddTimeSliceClick(Sender: TObject);
var
tse: TTimeSliceEditEx;
begin
tse := TTimeSliceEditEx.Create(Self);
try
tse.ShowModal;
if tse.ModalResult = mrOk then
TimeSlicesList.Items.Add(tse.Value);
finally
tse.Free;
end;
end;
procedure TSBMain.EditTimeSliceClick(Sender: TObject);
var
tse: TTimeSliceEditEx;
begin
tse := TTimeSliceEditEx.Create(Self);
try
if TimeSlicesList.ItemIndex >= 0 then
begin
tse.Value := TimeSlicesList.Items[TimeSlicesList.ItemIndex];
tse.ShowModal;
if tse.ModalResult = mrOk then
TimeSlicesList.Items[TimeSlicesList.ItemIndex] := tse.Value;
end;
finally
tse.Free;
end;
end;
A simple TLabel which opens it's Caption in systems default browser on click.
usage example:
uses
..., uUrlLabel;
...
procedure TSBAbout.FormCreate(Sender: TObject);
var
AUrl: TUrlLabel;
begin
AUrl := TUrlLabel.Create(Self);
with AUrl do
begin
Parent := ContactBox;
Font.Color := clBlue;
Caption := 'http://www.google.com';
//set positioning and spacing properties here
end;
end;
One can also directly use TCustomUrlLabel
and handle the OnClick
event to do a custom action.
procedure TProject1.OpenInputFile(Sender: TObject);
begin
...
end;
procedure TProject1.FormCreate(Sender: TObject);
begin
FileName := TCustomUrlLabel.Create(TopContainer);
with FileName do
begin
Parent := TopContainer;
...
OnClick := @OpenInputFile;
end;
end;
An extended version that has a property called URL is also included. see FaSubrip's FormCreate
for example.