UseIntfForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:2k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit UseIntfForm;
  2. interface
  3. uses
  4.   SysUtils, Windows, Messages, Classes, Graphics, Controls,
  5.   Forms, Dialogs, StdCtrls, Buttons, TypInfo;
  6. type
  7.   TFormUseIntf = class(TForm)
  8.     BtnChange: TButton;
  9.     lbClasses: TListBox;
  10.     cbModal: TCheckBox;
  11.     Label1: TLabel;
  12.     procedure BtnChangeClick(Sender: TObject);
  13.     procedure FormCreate(Sender: TObject);
  14.     procedure FormDestroy(Sender: TObject);
  15.   public
  16.     HandlesPackages: TList;
  17.     procedure LoadDynaPackage (PackageName: string);
  18.   end;
  19. var
  20.   FormUseIntf: TFormUseIntf;
  21. implementation
  22. {$R *.DFM}
  23. uses
  24.   IntfColSel;
  25. procedure TFormUseIntf.BtnChangeClick(Sender: TObject);
  26. var
  27.   AComponent: TComponent;
  28.   ColorSelect: IColorSelect;
  29. begin
  30.   AComponent := TComponentClass (ClassesColorSelect
  31.     [LbClasses.ItemIndex]).Create (Application);
  32.   // if the interface is available
  33.   if not Supports (AComponent, IColorSelect) then
  34.     ShowMessage ('Interface not supported')
  35.   else
  36.   begin
  37.     // access to the interface
  38.     ColorSelect := AComponent as IColorSelect;
  39.     // initialize the data
  40.     ColorSelect.SelColor := Color;
  41.     if cbModal.Checked then
  42.     begin
  43.       if ColorSelect.Display (True) then
  44.         Color := ColorSelect.SelColor;
  45.       AComponent.Free;
  46.       ColorSelect := nil;
  47.     end
  48.     else
  49.       // modeless execution
  50.       ColorSelect.Display(False);
  51.   end;
  52. end;
  53. procedure TFormUseIntf.FormCreate(Sender: TObject);
  54. var
  55.   I: Integer;
  56. begin
  57.   // loads all runtime packages
  58.   HandlesPackages := TList.Create;
  59.   LoadDynaPackage ('IntfFormPack.bpl');
  60.   LoadDynaPackage ('IntfFormPack2.bpl');
  61.   // add class names and select the first
  62.   for I := 0 to ClassesColorSelect.Count - 1 do
  63.     lbClasses.Items.Add (ClassesColorSelect [I].ClassName);
  64.   lbClasses.ItemIndex := 0;
  65. end;
  66. procedure TFormUseIntf.LoadDynaPackage(PackageName: string);
  67. var
  68.   Handle: HModule;
  69. begin
  70.   // try to load the package
  71.   Handle := LoadPackage (PackageName);
  72.   if Handle > 0 then
  73.     // add to the list for later removal
  74.     HandlesPackages.Add (Pointer(Handle))
  75.   else
  76.     ShowMessage ('Package ' + PackageName + ' not found');
  77. end;
  78. procedure TFormUseIntf.FormDestroy(Sender: TObject);
  79. var
  80.   I: Integer;
  81. begin
  82.   // unlaod all packages
  83.   for I := 0 to HandlesPackages.Count - 1 do
  84.     UnloadPackage (Cardinal (HandlesPackages [I]));
  85.   // free the lists
  86.   HandlesPackages.Free;
  87. end;
  88. end.