uSelPackages.pas 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. unit uSelPackages;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, Buttons, CheckLst;
  6. type
  7. TItemInfo=Class
  8. PackageFullName:String;
  9. end;
  10. TfrmSelPackages = class(TForm)
  11. btn_OK: TBitBtn;
  12. btn_Cancel: TBitBtn;
  13. lis_Units: TCheckListBox;
  14. lis_Packages: TListBox;
  15. Label2: TLabel;
  16. btn_ExtractUnit: TSpeedButton;
  17. OpenDialog1: TOpenDialog;
  18. btn_SelPackages: TSpeedButton;
  19. btn_Clear: TSpeedButton;
  20. chb_SelAll: TCheckBox;
  21. btn_Del: TSpeedButton;
  22. procedure btn_SelPackagesClick(Sender: TObject);
  23. procedure btn_ClearClick(Sender: TObject);
  24. procedure btn_ExtractUnitClick(Sender: TObject);
  25. procedure chb_SelAllClick(Sender: TObject);
  26. procedure btn_DelClick(Sender: TObject);
  27. procedure FormDestroy(Sender: TObject);
  28. private
  29. procedure DoGetPackageInfo(const PackageFile:String);
  30. procedure CheckAll(v:Boolean);
  31. procedure ClearList(aList:TStrings);
  32. public
  33. procedure PutUnitToList(const UnitName:string);
  34. procedure GetUnitList(aList:TStrings);
  35. end;
  36. var
  37. frmSelPackages: TfrmSelPackages;
  38. implementation
  39. {$R *.dfm}
  40. procedure PckageInfo(const Name: string; NameType: TNameType; Flags: Byte; Param: Pointer);
  41. begin
  42. if NameType=ntContainsUnit then
  43. begin
  44. if Flags<>3 then
  45. frmSelPackages.PutUnitToList(Name);
  46. end;
  47. end;
  48. procedure TfrmSelPackages.btn_SelPackagesClick(Sender: TObject);
  49. var i,idx:Integer;
  50. ItemInfo:TItemInfo;
  51. s:String;
  52. begin
  53. //self.OpenDialog1.InitialDir:=ExtractFilePath(paramStr(0));
  54. if self.OpenDialog1.Execute then
  55. begin
  56. for i:=0 to self.OpenDialog1.Files.Count-1 do
  57. begin
  58. s:=ExtractFileName(self.OpenDialog1.Files[i]);
  59. idx:=lis_Packages.Items.IndexOf(s);
  60. if idx=-1 then
  61. begin
  62. ItemInfo:=TItemInfo.Create;
  63. ItemInfo.PackageFullName:=self.OpenDialog1.Files[i];
  64. lis_Packages.Items.AddObject(s,ItemInfo);
  65. end;
  66. end;
  67. end;
  68. end;
  69. procedure TfrmSelPackages.btn_ClearClick(Sender: TObject);
  70. begin
  71. ClearList(self.lis_Packages.Items);
  72. end;
  73. procedure TfrmSelPackages.btn_ExtractUnitClick(Sender: TObject);
  74. var i:integer;
  75. ItemInfo:TItemInfo;
  76. begin
  77. self.lis_Units.Clear;
  78. for i:=0 to self.lis_Packages.Items.Count-1 do
  79. begin
  80. ItemInfo:=TItemInfo(self.lis_Packages.Items.Objects[i]);
  81. self.DoGetPackageInfo(ItemInfo.PackageFullName);
  82. end;
  83. end;
  84. procedure TfrmSelPackages.DoGetPackageInfo(const PackageFile: String);
  85. var h:HMODULE;
  86. f:Integer;
  87. begin
  88. h:=SafeLoadLibrary(PackageFile);//LoadPackage
  89. try
  90. f:=0;
  91. SysUtils.GetPackageInfo(h,nil,f,@PckageInfo);
  92. finally
  93. FreeLibrary(h);//UnLoadPackage
  94. end;
  95. end;
  96. procedure TfrmSelPackages.PutUnitToList(const UnitName: string);
  97. var idx:Integer;
  98. begin
  99. idx:=self.lis_Units.Items.IndexOf(UnitName);
  100. if idx=-1 then
  101. begin
  102. idx:=self.lis_Units.Items.Add(UnitName);
  103. self.lis_Units.Checked[idx]:=True;
  104. end;
  105. end;
  106. procedure TfrmSelPackages.chb_SelAllClick(Sender: TObject);
  107. begin
  108. CheckAll(self.chb_SelAll.Checked);
  109. end;
  110. procedure TfrmSelPackages.CheckAll(v: Boolean);
  111. var i:Integer;
  112. begin
  113. for i:=0 to self.lis_Units.Count-1 do
  114. self.lis_Units.Checked[i]:=v;
  115. end;
  116. procedure TfrmSelPackages.GetUnitList(aList: TStrings);
  117. var i:Integer;
  118. begin
  119. for i:=0 to self.lis_Units.Count-1 do
  120. begin
  121. if self.lis_Units.Checked[i] then
  122. aList.Add(self.lis_Units.Items[i]);
  123. end;
  124. end;
  125. procedure TfrmSelPackages.ClearList(aList: TStrings);
  126. var i:integer;
  127. begin
  128. for i:=0 to aList.Count-1 do
  129. aList.Objects[i].Free;
  130. aList.Clear;
  131. end;
  132. procedure TfrmSelPackages.btn_DelClick(Sender: TObject);
  133. var idx:Integer;
  134. begin
  135. idx:=lis_Packages.ItemIndex;
  136. if idx<>-1 then
  137. begin
  138. lis_Packages.Items.Objects[idx].Free;
  139. lis_Packages.DeleteSelected;
  140. end;
  141. end;
  142. procedure TfrmSelPackages.FormDestroy(Sender: TObject);
  143. begin
  144. ClearList(self.lis_Packages.Items);
  145. end;
  146. end.