![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Вывести информацию о пакетеDelphi , Файловая система , DLL и PlugInsАвтор: Xavier Pacheco program PkgInfo; uses Forms, Dialogs, SysUtils, PkgMain in 'PkgMain.pas' {PackInfoForm}; {$R *.RES} var OpenDialog: TOpenDialog; begin if (ParamCount > 0) and FileExists(ParamStr(1)) then PkgName := ParamStr(1) else begin OpenDialog := TOpenDialog.Create(Application); OpenDialog.DefaultExt := '*.bpl'; OpenDialog.Filter := 'Packages (*.bpl)|*.bpl|Delphi 3 Packages ' + '(*.dpl)|*.dpl'; if OpenDialog.Execute then PkgName := OpenDialog.FileName; end; if PkgName <> '' then begin Application.Initialize; Application.CreateForm(TPackInfoForm, PackInfoForm); Application.Run; end; end. unit PkgMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TPackInfoForm = class(TForm) GroupBox1: TGroupBox; DsgnPkg: TCheckBox; RunPkg: TCheckBox; BuildCtl: TRadioGroup; GroupBox2: TGroupBox; GroupBox3: TGroupBox; Button1: TButton; Label1: TLabel; DescEd: TEdit; memContains: TMemo; memRequires: TMemo; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); end; var PackInfoForm: TPackInfoForm; PkgName: string; // This is assigned in project file implementation {$R *.DFM} procedure PackageInfoCallback(const Name: string; NameType: TNameType; Flags: Byte; Param: Pointer); var AddName: string; Memo: TMemo; begin Assert(Param <> nil); AddName := Name; case NameType of ntContainsUnit: Memo := TPackInfoForm(Param).memContains; ntRequiresPackage: Memo := TPackInfoForm(Param).memRequires; else Memo := nil; end; if (Memo <> nil) then begin if Memo.Text <> '' then AddName := ', ' + AddName; Memo.Text := Memo.Text + AddName; end; end; procedure TPackInfoForm.FormCreate(Sender: TObject); var PackMod: HMODULE; Flags: Integer; begin // Since we only need to get into the package's resources, // LoadLibraryEx with LOAD_LIBRARY_AS_DATAFILE provides a speed- // efficient means for loading the package. PackMod := LoadLibraryEx(PChar(PkgName), 0, LOAD_LIBRARY_AS_DATAFILE); if PackMod = 0 then Exit; try GetPackageInfo(PackMod, Pointer(Self), Flags, PackageInfoCallback); finally FreeLibrary(PackMod); end; Caption := 'Package Info: ' + ExtractFileName(PkgName); DsgnPkg.Checked := Flags and pfDesignOnly <> 0; RunPkg.Checked := Flags and pfRunOnly <> 0; if Flags and pfNeverBuild <> 0 then BuildCtl.ItemIndex := 1; DescEd.Text := GetPackageDescription(PChar(PkgName)); end; procedure TPackInfoForm.Button1Click(Sender: TObject); begin Close; end; end. Программа на языке Delphi для отображения информации о файле пакета (.bpl или .dpl). Программа позволяет пользователю выбрать файл пакета с помощью диалогового окна "Открыть" и затем извлечь и отобразить информацию о пакете, включая его описание, является ли он только для дизайна или может быть запущен, нужно ли его собирать или нет, а также какие модули он содержит. Разбивка кода:
Примечание: код предполагает, что у вас есть файл пакета Delphi (.bpl или .dpl) в системном пути. Если нет, то вам может потребоваться изменение фильтра диалогового окна "Открыть" и/или добавление дополнительного кода для обработки различных типов файлов или директорий. В статье представлен пакет PkgInfo для отображения информации о пакете на языке программирования Delphi, включая его содержимое, зависимости и другие параметры. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: DLL и PlugIns ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |