622 lines
15 KiB
ObjectPascal
622 lines
15 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a Copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvPainterQBU.PAS, released on 2002-06-15.
|
|
|
|
The Initial Developer of the Original Code is Jan Verhoeven [jan1 dott verhoeven att wxs dott nl]
|
|
Portions created by Jan Verhoeven are Copyright (C) 2002 Jan Verhoeven.
|
|
All Rights Reserved.
|
|
|
|
Contributor(s): Robert Love [rlove att slcdug dott org].
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.sourceforge.net
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvPainterQBForm.pas 10612 2006-05-19 19:04:09Z jfudickar $
|
|
|
|
unit JvPainterQBForm;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF UNITVERSIONING}
|
|
JclUnitVersioning,
|
|
{$ENDIF UNITVERSIONING}
|
|
SysUtils, Classes, Windows, Messages, Graphics, Controls,
|
|
Forms, Dialogs, StdCtrls, ExtCtrls, Menus, ComCtrls,
|
|
JvDrawImage, JvComponent;
|
|
|
|
type
|
|
TPainterQBForm = class(TJvForm)
|
|
Bevel1: TBevel;
|
|
qbpresets: TComboBox;
|
|
presetspop: TPopupMenu;
|
|
AddBackdrop1: TMenuItem;
|
|
DeleteBackdrop1: TMenuItem;
|
|
Panel1: TPanel;
|
|
QBList: TListBox;
|
|
UpdateBackdrop1: TMenuItem;
|
|
redradio: TRadioButton;
|
|
greenradio: TRadioButton;
|
|
blueradio: TRadioButton;
|
|
trkred: TScrollBar;
|
|
trkgreen: TScrollBar;
|
|
trkblue: TScrollBar;
|
|
trkfactor: TScrollBar;
|
|
Shape1: TShape;
|
|
Shape2: TShape;
|
|
Shape3: TShape;
|
|
procedure QBListClick(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
{$IFDEF VCL}
|
|
procedure qbpresetsDrawItem(Control: TWinControl; Index: Integer;
|
|
Rect: TRect; State: TOwnerDrawState);
|
|
{$ENDIF VCL}
|
|
procedure qbpresetsClick(Sender: TObject);
|
|
procedure SetLabels;
|
|
procedure AddBackdrop1Click(Sender: TObject);
|
|
procedure DeleteBackdrop1Click(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure trkRedChange(Sender: TObject);
|
|
procedure trkGreenChange(Sender: TObject);
|
|
procedure trkBlueChange(Sender: TObject);
|
|
procedure trkFactorChange(Sender: TObject);
|
|
procedure UpdateBackdrop1Click(Sender: TObject);
|
|
procedure redradioClick(Sender: TObject);
|
|
procedure greenradioClick(Sender: TObject);
|
|
procedure blueradioClick(Sender: TObject);
|
|
procedure QuickBack;
|
|
{$IFDEF VisualCLX}
|
|
procedure qbpresetsDrawItem(Sender: TObject; Index: Integer;
|
|
Rect: TRect; State: TOwnerDrawState; var Handled: Boolean);
|
|
{$ENDIF VisualCLX}
|
|
private
|
|
FPainterForm: TJvDrawImage;
|
|
public
|
|
function StrToQuickBack(S: string): Boolean;
|
|
procedure SetDrawImage(ADrawImage: TJvDrawImage);
|
|
end;
|
|
|
|
var
|
|
QBFile: string;
|
|
QBDRed, QBDBlue, QBDGreen: Byte;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
const
|
|
UnitVersioning: TUnitVersionInfo = (
|
|
RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_32/run/JvPainterQBForm.pas $';
|
|
Revision: '$Revision: 10612 $';
|
|
Date: '$Date: 2006-05-19 21:04:09 +0200 (ven., 19 mai 2006) $';
|
|
LogPath: 'JVCL\run'
|
|
);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
implementation
|
|
|
|
uses
|
|
JvConsts, JvResources, JvTypes;
|
|
|
|
{$R *.dfm}
|
|
|
|
type
|
|
TColorProc = function(OutLoop, InLoop: Integer): Integer;
|
|
|
|
var
|
|
RedBack, GreenBack, BlueBack: TColorProc;
|
|
QBFuncs: array [0..50] of TColorProc;
|
|
ImgDrawFactor: Byte;
|
|
QBRedFn, QBGreenFn, QBBlueFn: Integer;
|
|
ApplDir: string;
|
|
|
|
function BGProd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Outer * Inner mod ImgDrawFactor;
|
|
end;
|
|
|
|
function BGSum(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer + Inner) mod ImgDrawFactor;
|
|
end;
|
|
|
|
function BGSub(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer - Inner) mod ImgDrawFactor;
|
|
end;
|
|
|
|
function BGXor(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer xor Inner) mod ImgDrawFactor;
|
|
end;
|
|
|
|
function BGAnd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer and Inner) mod ImgDrawFactor;
|
|
end;
|
|
|
|
function BGOutXor(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Outer xor ImgDrawFactor;
|
|
end;
|
|
|
|
function BGInXor(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Inner xor ImgDrawFactor;
|
|
end;
|
|
|
|
function BGOutAnd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Outer and ImgDrawFactor;
|
|
end;
|
|
|
|
function BGInAnd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Inner and ImgDrawFactor;
|
|
end;
|
|
|
|
function BGOutMod(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Outer mod ImgDrawFactor;
|
|
end;
|
|
|
|
function BGInMod(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Inner mod ImgDrawFactor;
|
|
end;
|
|
|
|
function BGProdXor(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer * Inner) xor ImgDrawFactor;
|
|
end;
|
|
|
|
function BGSumXor(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer + Inner) xor ImgDrawFactor;
|
|
end;
|
|
|
|
function BGSubXor(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer - Inner) xor ImgDrawFactor;
|
|
end;
|
|
|
|
function BGProdAnd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer * Inner) and ImgDrawFactor;
|
|
end;
|
|
|
|
function BGSumAnd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer + Inner) and ImgDrawFactor;
|
|
end;
|
|
|
|
function BGSubAnd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer - Inner) and ImgDrawFactor;
|
|
end;
|
|
|
|
function BGInner(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Inner;
|
|
end;
|
|
|
|
function BGOuter(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Outer;
|
|
end;
|
|
|
|
function BGOutRed(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := QBDRed * Outer;
|
|
end;
|
|
|
|
function BGInRed(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := QBDRed * Inner;
|
|
end;
|
|
|
|
function BGOutGreen(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := QBDGreen * Outer;
|
|
end;
|
|
|
|
function BGInGreen(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := QBDGreen * Inner;
|
|
end;
|
|
|
|
function BGOutBlue(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := QBDBlue * Outer;
|
|
end;
|
|
|
|
function BGInBlue(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := QBDBlue * Inner;
|
|
end;
|
|
|
|
function BGInModOut(Inner, Outer: Integer): Integer;
|
|
begin
|
|
if Outer < ImgDrawFactor then
|
|
Outer := ImgDrawFactor;
|
|
Result := Inner mod Outer;
|
|
end;
|
|
|
|
function BGOutModIn(Inner, Outer: Integer): Integer;
|
|
begin
|
|
if Inner < ImgDrawFactor then
|
|
Inner := ImgDrawFactor;
|
|
Result := Outer mod Inner;
|
|
end;
|
|
|
|
function BGOutModIn2(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Outer mod (2 + Inner) mod (2 + Outer + Inner);
|
|
end;
|
|
|
|
function BGModMod(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer mod ImgDrawFactor) * (Inner mod ImgDrawFactor);
|
|
end;
|
|
|
|
function BGModModXor(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer mod ImgDrawFactor) xor (Inner mod ImgDrawFactor);
|
|
end;
|
|
|
|
function BGMod3(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer mod ImgDrawFactor) mod ((Inner mod ImgDrawFactor) + 1);
|
|
end;
|
|
|
|
function BGModModSub(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer mod ImgDrawFactor) - (Inner mod ImgDrawFactor);
|
|
end;
|
|
|
|
function BGModModAdd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer mod ImgDrawFactor) + (Inner mod ImgDrawFactor);
|
|
end;
|
|
|
|
function BGModModAnd(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer mod ImgDrawFactor) and (Inner mod ImgDrawFactor);
|
|
end;
|
|
|
|
function BGModModOr(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer mod ImgDrawFactor) or (Inner mod ImgDrawFactor);
|
|
end;
|
|
|
|
function BGXOr3(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := Outer xor ImgDrawFactor xor Inner;
|
|
end;
|
|
|
|
function BGXOr3Mod(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer xor Inner mod ImgDrawFactor) xor (Inner mod ImgDrawFactor);
|
|
end;
|
|
|
|
function BGSubXorSum(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer - Inner) xor (Outer + Inner);
|
|
end;
|
|
|
|
function BGSubProdSum(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer - Inner) * (Outer + Inner);
|
|
end;
|
|
|
|
function BGProdProdSum(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer * Inner) * (Outer + Inner);
|
|
end;
|
|
|
|
function BGDrawXor(Inner, Outer: Integer): Integer;
|
|
begin
|
|
Result := (Outer - ImgDrawFactor) xor (ImgDrawFactor + Inner);
|
|
end;
|
|
|
|
// end of functions used in Quick Background
|
|
|
|
procedure SetQBFuncs;
|
|
begin
|
|
QBFuncs[0] := BGProd;
|
|
QBFuncs[1] := BGSum;
|
|
QBFuncs[2] := BGSub;
|
|
QBFuncs[3] := BGXor;
|
|
QBFuncs[4] := BGAnd;
|
|
QBFuncs[5] := BGOutAnd;
|
|
QBFuncs[6] := BGInAnd;
|
|
QBFuncs[7] := BGOutXor;
|
|
QBFuncs[8] := BGInXor;
|
|
QBFuncs[9] := BGOutMod;
|
|
QBFuncs[10] := BGInMod;
|
|
QBFuncs[11] := BGProdXor;
|
|
QBFuncs[12] := BGSumXor;
|
|
QBFuncs[13] := BGSubXor;
|
|
QBFuncs[14] := BGProdAnd;
|
|
QBFuncs[15] := BGSumAnd;
|
|
QBFuncs[16] := BGSubAnd;
|
|
QBFuncs[17] := BGInner;
|
|
QBFuncs[18] := BGOuter;
|
|
QBFuncs[19] := BGOutRed;
|
|
QBFuncs[20] := BGInRed;
|
|
QBFuncs[21] := BGOutGreen;
|
|
QBFuncs[22] := BGInGreen;
|
|
QBFuncs[23] := BGOutBlue;
|
|
QBFuncs[24] := BGInBlue;
|
|
QBFuncs[25] := BGInModOut;
|
|
QBFuncs[26] := BGOutModIn;
|
|
QBFuncs[27] := BGOutModIn2;
|
|
QBFuncs[28] := BGModMod;
|
|
QBFuncs[29] := BGModModXor;
|
|
QBFuncs[30] := BGMod3;
|
|
QBFuncs[31] := BGModModSub;
|
|
QBFuncs[32] := BGModModAdd;
|
|
QBFuncs[33] := BGModModAnd;
|
|
QBFuncs[34] := BGModModOr;
|
|
QBFuncs[35] := BGXOr3;
|
|
QBFuncs[36] := BGXOr3Mod;
|
|
QBFuncs[37] := BGSubXorSum;
|
|
QBFuncs[38] := BGSubProdSum;
|
|
QBFuncs[39] := BGProdProdSum;
|
|
QBFuncs[40] := BGDrawXor;
|
|
end;
|
|
|
|
procedure TPainterQBForm.QuickBack;
|
|
var
|
|
Bmp: TBitmap;
|
|
I, J: Integer;
|
|
Line: PJvRGBArray;
|
|
begin
|
|
RedBack := QBFuncs[QBRedFn];
|
|
GreenBack := QBFuncs[QBGreenFn];
|
|
BlueBack := QBFuncs[QBBlueFn];
|
|
Bmp := TBitmap.Create;
|
|
try
|
|
Bmp.Assign(FPainterForm.Picture.Bitmap);
|
|
Bmp.PixelFormat := pf24bit;
|
|
for I := 0 to Bmp.Height - 1 do
|
|
begin
|
|
Line := Bmp.ScanLine[I];
|
|
for J := 0 to Bmp.Width - 1 do
|
|
begin
|
|
Line[J].rgbRed := QBDRed + RedBack(I, J);
|
|
Line[J].rgbGreen := QBDGreen + GreenBack(I, J);
|
|
Line[J].rgbBlue := QBDBlue + BlueBack(I, J);
|
|
end;
|
|
end;
|
|
FPainterForm.Preview(Bmp);
|
|
finally
|
|
Bmp.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TPainterQBForm.QBListClick(Sender: TObject);
|
|
var
|
|
Index: Integer;
|
|
begin
|
|
Index := QBList.ItemIndex;
|
|
if redradio.Checked then
|
|
QBRedFn := Index;
|
|
if greenradio.Checked then
|
|
QBGreenFn := Index;
|
|
if blueradio.Checked then
|
|
QBBlueFn := Index;
|
|
SetLabels;
|
|
QuickBack;
|
|
end;
|
|
|
|
procedure TPainterQBForm.FormShow(Sender: TObject);
|
|
begin
|
|
SetLabels;
|
|
end;
|
|
|
|
{$IFDEF VCL}
|
|
procedure TPainterQBForm.qbpresetsDrawItem(Control: TWinControl;
|
|
Index: Integer; Rect: TRect; State: TOwnerDrawState);
|
|
{$ENDIF VCL}
|
|
{$IFDEF VisualCLX}
|
|
procedure TPainterQBForm.qbpresetsDrawItem(Sender: TObject; Index: Integer;
|
|
Rect: TRect; State: TOwnerDrawState; var Handled: Boolean);
|
|
{$ENDIF VisualCLX}
|
|
var
|
|
S: string;
|
|
P: Integer;
|
|
begin
|
|
S := qbpresets.Items[Index];
|
|
P := Pos('=', S);
|
|
S := Copy(S, 1, P - 1);
|
|
qbpresets.Canvas.TextRect(Rect, Rect.Left, Rect.Top, S);
|
|
{$IFDEF VisualCLX}
|
|
Handled := True;
|
|
{$ENDIF VisualCLX}
|
|
end;
|
|
|
|
procedure TPainterQBForm.qbpresetsClick(Sender: TObject);
|
|
begin
|
|
if qbpresets.ItemIndex >= 0 then
|
|
StrToQuickBack(qbpresets.Items[qbpresets.ItemIndex]);
|
|
end;
|
|
|
|
procedure TPainterQBForm.SetLabels;
|
|
begin
|
|
redradio.Caption := QBList.Items[QBRedFn];
|
|
greenradio.Caption := QBList.Items[QBGreenFn];
|
|
blueradio.Caption := QBList.Items[QBBlueFn];
|
|
end;
|
|
|
|
procedure TPainterQBForm.AddBackdrop1Click(Sender: TObject);
|
|
var
|
|
S: string;
|
|
begin
|
|
S := InputBox(RsPainterQuickBackdrops, RsEnterName, '');
|
|
if S = '' then
|
|
Exit;
|
|
S := S + '=' +
|
|
IntToStr(QBRedFn) + ',' +
|
|
IntToStr(QBGreenFn) + ',' +
|
|
IntToStr(QBBlueFn) + ',' +
|
|
IntToStr(QBDRed) + ',' +
|
|
IntToStr(QBDGreen) + ',' +
|
|
IntToStr(QBDBlue) + ',' +
|
|
IntToStr(ImgDrawFactor);
|
|
qbpresets.Items.Append(S);
|
|
qbpresets.Items.SaveToFile(QBFile);
|
|
end;
|
|
|
|
procedure TPainterQBForm.DeleteBackdrop1Click(Sender: TObject);
|
|
begin
|
|
if qbpresets.ItemIndex >= 0 then
|
|
begin
|
|
qbpresets.Items.Delete(qbpresets.ItemIndex);
|
|
qbpresets.Items.SaveToFile(QBFile);
|
|
end;
|
|
end;
|
|
|
|
procedure TPainterQBForm.FormCreate(Sender: TObject);
|
|
begin
|
|
ImgDrawFactor := 255;
|
|
QBDRed := 0;
|
|
QBDBlue := 0;
|
|
QBDGreen := 0;
|
|
QBRedFn := 0;
|
|
QBGreenFn := 0;
|
|
QBBlueFn := 0;
|
|
SetQBFuncs;
|
|
QBFile := ApplDir + 'PainterQB.txt';
|
|
if FileExists(QBFile) then
|
|
qbpresets.Items.LoadFromFile(QBFile);
|
|
end;
|
|
|
|
procedure TPainterQBForm.trkRedChange(Sender: TObject);
|
|
begin
|
|
QBDRed := trkred.Position;
|
|
QuickBack;
|
|
end;
|
|
|
|
procedure TPainterQBForm.trkGreenChange(Sender: TObject);
|
|
begin
|
|
QBDGreen := trkgreen.Position;
|
|
QuickBack;
|
|
end;
|
|
|
|
procedure TPainterQBForm.trkBlueChange(Sender: TObject);
|
|
begin
|
|
QBDBlue := trkblue.Position;
|
|
QuickBack;
|
|
end;
|
|
|
|
procedure TPainterQBForm.trkFactorChange(Sender: TObject);
|
|
begin
|
|
ImgDrawFactor := trkfactor.Position;
|
|
QuickBack;
|
|
end;
|
|
|
|
procedure TPainterQBForm.UpdateBackdrop1Click(Sender: TObject);
|
|
var
|
|
S: string;
|
|
P: Integer;
|
|
begin
|
|
if qbpresets.ItemIndex < 0 then
|
|
begin
|
|
ShowMessage(RsNoItemSelected);
|
|
Exit;
|
|
end;
|
|
S := qbpresets.Items[qbpresets.ItemIndex];
|
|
P := Pos('=', S);
|
|
S := Copy(S, 1, P - 1);
|
|
S := InputBox(RsPainterQuickBackdrops, RsEnterName, S);
|
|
if S = '' then
|
|
Exit;
|
|
S := S + '=' +
|
|
IntToStr(QBRedFn) + ',' +
|
|
IntToStr(QBGreenFn) + ',' +
|
|
IntToStr(QBBlueFn) + ',' +
|
|
IntToStr(QBDRed) + ',' +
|
|
IntToStr(QBDGreen) + ',' +
|
|
IntToStr(QBDBlue) + ',' +
|
|
IntToStr(ImgDrawFactor);
|
|
qbpresets.Items[qbpresets.ItemIndex] := S;
|
|
qbpresets.Items.SaveToFile(QBFile);
|
|
end;
|
|
|
|
function TPainterQBForm.StrToQuickBack(S: string): Boolean;
|
|
var
|
|
P: Integer;
|
|
List: TStringList;
|
|
begin
|
|
Result := False;
|
|
P := Pos('=', S);
|
|
if P = 0 then
|
|
Exit;
|
|
S := Copy(S, P + 1, Length(S));
|
|
List := TStringList.Create;
|
|
try
|
|
try
|
|
List.CommaText := S;
|
|
QBRedFn := StrToInt(List[0]);
|
|
QBGreenFn := StrToInt(List[1]);
|
|
QBBlueFn := StrToInt(List[2]);
|
|
QBDRed := StrToInt(List[3]);
|
|
trkred.Position := QBDRed;
|
|
QBDGreen := StrToInt(List[4]);
|
|
trkgreen.Position := QBDGreen;
|
|
QBDBlue := StrToInt(List[5]);
|
|
trkblue.Position := QBDBlue;
|
|
ImgDrawFactor := StrToInt(List[6]);
|
|
trkfactor.Position := ImgDrawFactor;
|
|
SetLabels;
|
|
QuickBack;
|
|
Result := True;
|
|
except
|
|
ShowMessage(RsErrorInPresets);
|
|
Result := False;
|
|
end;
|
|
finally
|
|
List.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TPainterQBForm.redradioClick(Sender: TObject);
|
|
begin
|
|
QBList.ItemIndex := QBRedFn;
|
|
end;
|
|
|
|
procedure TPainterQBForm.greenradioClick(Sender: TObject);
|
|
begin
|
|
QBList.ItemIndex := QBGreenFn;
|
|
end;
|
|
|
|
procedure TPainterQBForm.blueradioClick(Sender: TObject);
|
|
begin
|
|
QBList.ItemIndex := QBBlueFn;
|
|
end;
|
|
|
|
procedure TPainterQBForm.SetDrawImage(ADrawImage: TJvDrawImage);
|
|
begin
|
|
FPainterForm := ADrawImage;
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
initialization
|
|
RegisterUnitVersion(HInstance, UnitVersioning);
|
|
|
|
finalization
|
|
UnregisterUnitVersion(HInstance);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
end.
|