1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
unit Unit29;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
System.Threading, System.IOUtils,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,
FMX.StdCtrls, FMX.Controls.Presentation,
FMX.ScrollBox, FMX.Memo;
type
TForm29 = class(TForm)
btnOccurences: TButton;
Texte: TEdit;
Label1: TLabel;
FichierPdf: TEdit;
EllipsesEditButton1: TEllipsesEditButton;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
AniIndicator1: TAniIndicator;
btnThread: TButton;
procedure EllipsesEditButton1Click(Sender: TObject);
procedure btnOccurencesClick(Sender: TObject);
procedure btnThreadClick(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
procedure UpdateMemo(aLine: String);
procedure FinThread;
end;
var
Form29: TForm29;
implementation
{$R *.fmx}
uses Unit30;
procedure TForm29.btnOccurencesClick(Sender: TObject);
var
dir, Cherche: String;
begin
dir := FichierPdf.Text;
Cherche := Texte.Text;
// Début d'une animation
AniIndicator1.Visible := True;
AniIndicator1.Enabled := True;
TTask.Run(
procedure
var
PdfFileName: TFileName;
Files: TArray<String>;
begin
Files := TDirectory.GetFiles(dir, '*.pdf',
System.IOUtils.TSearchOption.soAllDirectories);
for PdfFileName in Files do
begin
// fait défiler tous les pdf
TThread.Synchronize(nil,
procedure
begin
UpdateMemo(PdfFileName);
end);
if isTexteinPDF(Cherche, PdfFileName) then
// occurrence trouvée
TThread.Synchronize(nil,
procedure
begin
UpdateMemo(Cherche + ' trouvé dans ' + PdfFileName);
end);
end;
// arrêt d'une animation
TThread.Synchronize(nil,
procedure
begin
FinThread;
end);
end);
end;
// Utilisation via un Thread "métier"
procedure TForm29.btnThreadClick(Sender: TObject);
var
SThread: TSearchInPDFFiles;
begin
AniIndicator1.Visible:=True;
AniIndicator1.Enabled:=True;
SThread := TSearchInPDFFiles.Create;
SThread.dir := FichierPdf.Text;
SThread.Texte := Texte.Text;
SThread.UpdateResult := procedure(AFile: String)
begin
UpdateMemo(AFile);
end;
SThread.EndOfThread := procedure
begin
FinThread;
end;
SThread.Start;
end;
procedure TForm29.EllipsesEditButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
FichierPdf.Text := ExtractFileDir(OpenDialog1.FileName);
end;
end;
// pour pouvoir les utiliser dans le thread
procedure TForm29.FinThread;
begin
AniIndicator1.Enabled := False;
AniIndicator1.Visible := False;
end;
procedure TForm29.UpdateMemo(aLine: String);
begin
Memo1.Lines.Add(aLine);
Memo1.Repaint;
end;
end. |
Partager