git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@17 7f62d464-2af8-f54e-996c-e91b33f51cbe
290 lines
8.2 KiB
ObjectPascal
290 lines
8.2 KiB
ObjectPascal
unit FrmStartup;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, ComCtrls, ExtCtrls, JvSimpleXml, JvGIF, Jpeg;
|
|
|
|
const
|
|
WM_SHOWN = WM_USER + 1;
|
|
|
|
type
|
|
TFormStartup = class(TForm)
|
|
PanelClient: TPanel;
|
|
ProgressBar: TProgressBar;
|
|
PanelInner: TPanel;
|
|
LblComponents: TLabel;
|
|
LblPackages: TLabel;
|
|
LblComponentName: TLabel;
|
|
LblUnits: TLabel;
|
|
PaintBox: TPaintBox;
|
|
Image: TImage;
|
|
procedure FormShow(Sender: TObject);
|
|
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
|
procedure FormCreate(Sender: TObject);
|
|
private
|
|
{ Private-Deklarationen }
|
|
procedure LoadPackageFromXml(xml: TJvSimpleXMLElem);
|
|
procedure WMShown(var Msg: TMessage); message WM_SHOWN;
|
|
procedure WMEraseBkgnd(var Msg: TMessage); message WM_ERASEBKGND;
|
|
public
|
|
{ Public-Deklarationen }
|
|
end;
|
|
|
|
var
|
|
FormStartup: TFormStartup;
|
|
|
|
implementation
|
|
|
|
uses
|
|
DataModuleMain, Packages, Configuration;
|
|
|
|
{$R *.dfm}
|
|
|
|
function HexToInt(const Value: string): Integer;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
Result := 0;
|
|
for i := 1 to Length(Value) do
|
|
begin
|
|
case Value[i] of
|
|
'0'..'9':
|
|
Result := Result shl 4 + Ord(Value[i]) - Ord('0');
|
|
'A'..'F':
|
|
Result := Result shl 4 + Ord(Value[i]) - Ord('A');
|
|
'a'..'f':
|
|
Result := Result shl 4 + Ord(Value[i]) - Ord('a');
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TFormStartup.LoadPackageFromXml(xml: TJvSimpleXMLElem);
|
|
var
|
|
Name: string;
|
|
Description: string;
|
|
DcpBpiName: string;
|
|
Flags: Integer;
|
|
Package: TPackage;
|
|
|
|
i: Integer;
|
|
xmlReqs: TJvSimpleXMLElem;
|
|
xmlUnits: TJvSimpleXMLElem;
|
|
xmlComps: TJvSimpleXMLElem;
|
|
xmlActs: TJvSimpleXMLElem;
|
|
Comp: TComponentItem;
|
|
Pkg: IPackage;
|
|
R: TRect;
|
|
begin
|
|
R := Rect(PanelClient.ClientWidth - 5 - 24, 5, PanelClient.ClientWidth - 5, 5 + 24);
|
|
|
|
Name := xml.Properties.Value('Name', '');
|
|
Description := xml.Properties.Value('Description', '');
|
|
DcpBpiName := xml.Properties.Value('DcpBpiName', '');
|
|
Flags := HexToInt(xml.Properties.Value('Flags', '0'));
|
|
|
|
if Name <> '' then
|
|
begin
|
|
Package := TPackage.Create(PackageList, Name, Description, DcpBpiName, Flags);
|
|
Pkg := Package;
|
|
PackageList.AddPackage(Pkg);
|
|
|
|
{ read requires }
|
|
xmlReqs := xml.Items.ItemNamed['Requires'];
|
|
if xmlReqs <> nil then
|
|
for i := 0 to xmlReqs.Items.Count - 1 do
|
|
begin
|
|
if xmlReqs.Items[i].Name = 'Require' then
|
|
Package.AddRequire(
|
|
xmlReqs.Items[i].Properties.Value('Name', '')
|
|
);
|
|
end;
|
|
|
|
{ read units }
|
|
xmlUnits := xml.Items.ItemNamed['Units'];
|
|
if xmlUnits <> nil then
|
|
for i := 0 to xmlUnits.Items.Count - 1 do
|
|
begin
|
|
if xmlUnits.Items[i].Properties.Value('Name', '') = 'SysInit' then
|
|
Continue;
|
|
if xmlUnits.Items[i].Name = 'Unit' then
|
|
Package.AddUnit(TUnit.Create(
|
|
xmlUnits.Items[i].Properties.Value('Name', ''),
|
|
HexToInt(xmlUnits.Items[i].Properties.Value('Flags', '0'))
|
|
));
|
|
end;
|
|
|
|
{ read components }
|
|
PaintBox.Canvas.Brush.Color := clBtnFace;
|
|
xmlComps := xml.Items.ItemNamed['Components'];
|
|
if xmlComps <> nil then
|
|
for i := 0 to xmlComps.Items.Count - 1 do
|
|
begin
|
|
if xmlComps.Items[i].Name = 'Component' then
|
|
begin
|
|
Comp := TComponentItem.Create(
|
|
Pkg,
|
|
xmlComps.Items[i].Properties.Value('Palette', ''),
|
|
xmlComps.Items[i].Properties.Value('ClassName', ''),
|
|
xmlComps.Items[i].Properties.IntValue('ImageIndex', 1),
|
|
xmlComps.Items[i].Properties.Value('UnitName', '')
|
|
);
|
|
Package.AddComponent(Comp);
|
|
LblComponentName.Caption := Comp.ComponentClass;
|
|
LblComponentName.Update;
|
|
|
|
PaintBox.Canvas.FillRect(PaintBox.ClientRect);
|
|
DMMain.ImageListComponents.Draw(PaintBox.Canvas, 0, 0, Comp.ImageIndex);
|
|
end;
|
|
end;
|
|
|
|
{ read actions }
|
|
xmlActs := xml.Items.ItemNamed['Actionss'];
|
|
if xmlActs <> nil then
|
|
for i := 0 to xmlComps.Items.Count - 1 do
|
|
begin
|
|
if xmlActs.Items[i].Name = 'Actions' then
|
|
Package.AddAction(TActionItem.Create(
|
|
xmlActs.Items[i].Properties.Value('Category', ''),
|
|
xmlActs.Items[i].Properties.Value('ClassName', ''),
|
|
xmlActs.Items[i].Properties.Value('Resource', ''),
|
|
xmlComps.Items[i].Properties.Value('UnitName', '')
|
|
));
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
procedure TFormStartup.WMShown(var Msg: TMessage);
|
|
var
|
|
Doc: TJvSimpleXML;
|
|
Bmp, SliceBmp, MaskBmp: TBitmap;
|
|
Gif: TJvGIFImage;
|
|
i, k: Integer;
|
|
x, y, w, h: Integer;
|
|
UnitItem: IUnit;
|
|
begin
|
|
Doc := TJvSimpleXML.Create(nil);
|
|
try
|
|
Doc.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Config\packages.xml');
|
|
|
|
ProgressBar.Position := 0;
|
|
ProgressBar.Max := Doc.Root.Items.Count + 2;
|
|
Application.ProcessMessages;
|
|
Bmp := TBitmap.Create;
|
|
try
|
|
Gif := TJvGIFImage.Create;
|
|
try
|
|
Gif.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Config\packages.gif');
|
|
Bmp.Assign(Gif);
|
|
finally
|
|
Gif.Free;
|
|
end;
|
|
//Bmp.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Config\packages.bmp');
|
|
|
|
{ fill image list }
|
|
DMMain.ImageListComponents.Clear;
|
|
w := DMMain.ImageListComponents.Width;
|
|
h := DMMain.ImageListComponents.Height;
|
|
SliceBmp := TBitmap.Create;
|
|
MaskBmp := TBitmap.Create;
|
|
try
|
|
SliceBmp.Width := w;
|
|
SliceBmp.Height := h;
|
|
for y := 0 to Bmp.Height div h - 1 do
|
|
for x := 0 to Bmp.Width div w - 1 do
|
|
begin
|
|
SliceBmp.Canvas.CopyRect(Rect(0, 0, w, h), Bmp.Canvas, Rect(x * w, y * h, (x + 1) * w, (y + 1) * h));
|
|
SliceBmp.Transparent := True;
|
|
MaskBmp.Handle := SliceBmp.MaskHandle;
|
|
DMMain.ImageListComponents.Add(SliceBmp, MaskBmp);
|
|
MaskBmp.Handle := 0;
|
|
end;
|
|
finally
|
|
MaskBmp.Free;
|
|
SliceBmp.Free;
|
|
end;
|
|
finally
|
|
Bmp.Free;
|
|
end;
|
|
ProgressBar.StepBy(1);
|
|
|
|
LblComponentName.Caption := '';
|
|
LblPackages.Caption := 'Package count: 0';
|
|
LblComponents.Caption := 'Component count: 0';
|
|
LblUnits.Caption := 'Unit count: 0';
|
|
LblComponentName.Visible := True;
|
|
Application.ProcessMessages;
|
|
for i := 0 to Doc.Root.Items.Count - 1 do
|
|
begin
|
|
if Doc.Root.Items[i].Name = 'Package' then
|
|
LoadPackageFromXml(Doc.Root.Items[i]);
|
|
LblPackages.Caption := 'Package count: ' + IntToStr(PackageList.PackageCount);
|
|
LblComponents.Caption := 'Component count: ' + IntToStr(PackageList.ComponentCount);
|
|
LblUnits.Caption := 'Unit count: ' + IntToStr(PackageList.UnitCount);
|
|
ProgressBar.StepBy(1);
|
|
Application.ProcessMessages;
|
|
end;
|
|
finally
|
|
Doc.Free;
|
|
end;
|
|
|
|
LblComponentName.Caption := '';
|
|
PaintBox.Visible := False;
|
|
LblComponentName.Update;
|
|
{ Fill Unit.Components[] }
|
|
for i := 0 to PackageList.UnitCount - 1 do
|
|
begin
|
|
UnitItem := PackageList.Units[i];
|
|
for k := 0 to PackageList.ComponentCount - 1 do
|
|
if CompareText(UnitItem.Name, PackageList.Components[k].UnitName) = 0 then
|
|
UnitItem.AddComponent(PackageList.Components[k]);
|
|
end;
|
|
ProgressBar.StepBy(1);
|
|
Application.ProcessMessages;
|
|
|
|
Release;
|
|
end;
|
|
|
|
procedure TFormStartup.FormShow(Sender: TObject);
|
|
begin
|
|
PostMessage(Handle, WM_SHOWN, 0, 0);
|
|
end;
|
|
|
|
procedure TFormStartup.WMEraseBkgnd(var Msg: TMessage);
|
|
begin
|
|
Msg.Result := 1;
|
|
end;
|
|
|
|
procedure TFormStartup.FormCloseQuery(Sender: TObject;
|
|
var CanClose: Boolean);
|
|
begin
|
|
CanClose := False;
|
|
end;
|
|
|
|
procedure TFormStartup.FormCreate(Sender: TObject);
|
|
var
|
|
h: Integer;
|
|
R: TRect;
|
|
begin
|
|
if FileExists('Config\' + Config.StartupPicture) then
|
|
begin
|
|
h := ClientHeight;
|
|
Image.Align := alNone;
|
|
Image.Picture.LoadFromFile('Config\' + Config.StartupPicture);
|
|
if Image.Width > ClientWidth then
|
|
ClientWidth := Image.Width;
|
|
ClientHeight := h + Image.Height;
|
|
Image.Align := alTop;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
PackageList := TPackageList.Create(nil);
|
|
|
|
finalization
|
|
FreeAndNil(PackageList);
|
|
|
|
end.
|