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

Delphi控件源码

开发平台:

Delphi

  1. unit VclToClxForm;
  2. interface
  3. uses
  4.   SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
  5.   QStdCtrls, QComCtrls {$IFDEF LINUX}, Libc{$ENDIF}  ;
  6. type
  7.   TForm1 = class(TForm)
  8.     lbFiles: TListBox;
  9.     btnSource: TButton;
  10.     btnReplace: TButton;
  11.     lvReplace: TListView;
  12.     cbRecurse: TCheckBox;
  13.     procedure btnSourceClick(Sender: TObject);
  14.     procedure btnReplaceClick(Sender: TObject);
  15.     procedure FormCreate(Sender: TObject);
  16.   private
  17.     ReplaceMap: TStringList;
  18.     CurrentDir: string;
  19.   public
  20.     procedure AddFilesToList (Filter, Folder: string; Recurse: Boolean);
  21.   end;
  22. var
  23.   Form1: TForm1;
  24. procedure GetSubDirs (Folder: string; sList: TStringList);
  25. implementation
  26. {$R *.xfm}
  27. procedure TForm1.AddFilesToList(Filter, Folder: string; Recurse: Boolean);
  28. var
  29.   sr: TSearchRec;
  30.   sDirList: TStringList;
  31.   i: Integer;
  32. begin
  33.   if FindFirst (Folder + Filter, faAnyFile, sr) = 0 then
  34.   repeat
  35.     lbFiles.Items.Add (Folder + sr.Name);
  36.   until FindNext(sr) <> 0;
  37.   FindClose(sr);
  38.   if Recurse then
  39.   begin
  40.     sDirList := TStringList.Create;
  41.     try
  42.       GetSubDirs (Folder, sDirList);
  43.       for i := 0 to sDirList.Count - 1 do
  44.         if (sDirList[i] <> '.') and (sDirList[i] <> '..') then
  45.         begin
  46.           Application.ProcessMessages;
  47.           AddFilesToList (Filter,
  48.             IncludeTrailingPathDelimiter (Folder + sDirList[i]),
  49.             Recurse);
  50.         end;
  51.     finally
  52.       sDirList.Free;
  53.     end;
  54.   end;
  55. end;
  56. procedure TForm1.btnSourceClick(Sender: TObject);
  57. var
  58.   Dir: string;
  59. begin
  60.   if SelectDirectory ('Choose Folder', '', Dir) then
  61.   begin
  62.     {$IFDEF LINUX}
  63.       if Dir [1] <> '/' then
  64.         Dir := '/' + Dir;
  65.     {$ENDIF}
  66.     CurrentDir := Dir; // change current
  67.     Dir := IncludeTrailingPathDelimiter(Dir);
  68.     AddFilesToList ('*.dpr', Dir, cbRecurse.Checked);
  69.     AddFilesToList ('*.pas', Dir, cbRecurse.Checked);
  70.     AddFilesToList ('*.dfm', Dir, cbRecurse.Checked);    
  71.   end;
  72. end;
  73. procedure TForm1.btnReplaceClick(Sender: TObject);
  74. var
  75.   StrFile: TStringList;
  76.   i, j: Integer;
  77.   FindStr, ReplaceStr: string;
  78. begin
  79.   strFile := TStringList.Create;
  80.   for i := 0 to lbFiles.Items.Count - 1 do
  81.   begin
  82.     // convert DFM to xfm
  83.     if SameText (ExtractFileExt(lbFiles.Items[i]), '.DFM') then
  84.       RenameFile (lbFiles.Items[i],
  85.         ChangeFileExt(lbFiles.Items[i], '.xfm'))
  86.     else
  87.     begin
  88.       strFile.LoadFromFile(lbFiles.Items[i]);
  89.       // for every string the the replace map
  90.       for j := 0 to ReplaceMap.Count - 1 do
  91.       begin
  92.         // replace units inside uses (followed by ',')
  93.         FindStr := ' ' + ReplaceMap.Names [j] + ',';
  94.         ReplaceStr := ReplaceMap.Values [ReplaceMap.Names [j]];
  95.         if ReplaceStr <> '' then
  96.           ReplaceStr := ' ' + ReplaceStr + ',';
  97.         strFile.Text := StringReplace (strFile.Text,
  98.           FindStr, ReplaceStr, [rfReplaceAll]);
  99.         // replace units at the end of uses (followed by ';')
  100.         FindStr := ' ' + ReplaceMap.Names [j] + ';';
  101.         ReplaceStr := ReplaceMap.Values [ReplaceMap.Names [j]];
  102.         if ReplaceStr <> '' then
  103.           ReplaceStr := ' ' + ReplaceStr + ';';
  104.         strFile.Text := StringReplace (strFile.Text,
  105.           FindStr, ReplaceStr, [rfReplaceAll]);
  106.       end;
  107.       // change DFM to xfm (lowercase)
  108.       strFile.Text := StringReplace (strFile.Text,
  109.         '.DFM', '.xfm', [rfReplaceAll]);
  110.       // change RES to res (lowercase)
  111.       strFile.Text := StringReplace (strFile.Text,
  112.         '.RES', '.res', [rfReplaceAll]);
  113.       strFile.SaveToFile(lbFiles.Items[i]);
  114.     end;
  115.   end;
  116.   strFile.Free;
  117. end;
  118. procedure TForm1.FormCreate(Sender: TObject);
  119. var
  120.   i: Integer;
  121.   Item: TListItem;
  122. begin
  123.   ReplaceMap := TStringList.Create;
  124.   ReplaceMap.LoadFromFile (ExtractFilePath(Application.ExeName) + 'remap.conf');
  125.   for i := 0 to ReplaceMap.Count - 1 do
  126.   begin
  127.     Item := lvReplace.Items.Add;
  128.     Item.Caption := ReplaceMap.Names [i];
  129.     Item.SubItems.Add (
  130.       ReplaceMap.Values [ReplaceMap.Names [i]]);
  131.   end;
  132.   {$IFDEF LINUX}
  133.   CurrentDir := '$HOME';
  134.   {$ESLEIF}
  135.   CurrentDir := 'C:';
  136.   {$ENDIF}
  137. end;
  138. {$IFDEF LINUX}
  139. procedure GetSubDirs (Folder: string; sList: TStringList);
  140. var
  141.   p: Pointer;
  142.   Scratch: TDirEnt;
  143.   StatBuf: TStatBuf;
  144.   PtrDirEnt: PDirEnt;
  145.   Mode: mode_t;
  146.   FName: string;
  147. begin
  148.   p := opendir(pChar(Folder));
  149.   if p = nil then
  150.     Exit;
  151.   try
  152.     readdir_r(p, @Scratch, PtrDirEnt);
  153.     while PtrDirEnt <> nil do
  154.     begin
  155.       FName := Folder + string(PtrDirEnt.d_name);
  156.       if lstat(PChar(FName), StatBuf) = 0 then
  157.       begin
  158.         Mode := StatBuf.st_mode;
  159.         if Mode and S_IFDIR <> 0 then
  160.           sList.Add (PtrDirEnt.d_name)
  161.       end;
  162.       readdir_r(p, @Scratch, PtrDirEnt);
  163.     end;
  164.   finally
  165.     closedir(p);
  166.   end;
  167. end;
  168. {$ENDIF}
  169. {$IFDEF MSWINDOWS}
  170. procedure GetSubDirs (Folder: string; sList: TStringList);
  171. var
  172.   sr: TSearchRec;
  173. begin
  174.   if FindFirst (Folder + '*.*', faDirectory, sr) = 0 then
  175.   try
  176.     repeat
  177.       if (sr.Attr and faDirectory) = faDirectory then
  178.         sList.Add (sr.Name);
  179.     until FindNext(sr) <> 0;
  180.   finally
  181.     FindClose(sr);
  182.   end;
  183. end;
  184. {$ENDIF}
  185. end.