2017-12-05 3 views
1

私はdelphiのイベントに慣れていないので、dwsXPlatform.TCollectFileProgressEventをdwsXPlatform.CollectFilesと組み合わせて使用​​する方法については苦労しています。dwsXPlatform.CollectFiles TCollectFileProgressEventの使い方

DWScriptリポジトリにはサンプルもテストコードもありません。

type 
     TForm1 = class(TForm) 
       btn1: TButton; 
       mmoDirList: TMemo; 
       mmoOnCollectFiles: TMemo; 
       procedure btn1Click(Sender: TObject); 
     private 
       OnCollectFileProgressEvent: TCollectFileProgressEvent; 
     end; 
{...} 
procedure TForm1.btn1Click(Sender: TObject); 
begin 
     mmoDirList.Clear; 
     CollectFiles('c:\MyDelphiFiles', '*.pas', mmoDirList.Lines, True, OnCollectFileProgressEvent); 
end; 

答えて

1

はドキュメントTCollectFileProgressEventによれば、以下のようにdseclaredれる:

TCollectFileProgressEvent = procedure (const directory : String; var skipScan : Boolean) of object; 

レッツ分割その3個に:

1)TCollectFileProgressEvent

2)プロシージャ(const directory:String; VAR skipScan:Boolean)を対象

第1の部分TCollectFileProgressEventの

3)は、イベントの種類の名前です。あなたは、あなたの事例では何も必要ありません。

第二部手順は....あなたがイベント

「オブジェクトの」第三の部分を宣言するべきかのレシピは、あなたの手順は、クラスに配置する必要があることを意味します。

私はあなたにいくつかのコードをお見せしましょう:

TForm1 = class(TForm) 
    btn1: TButton; 
    mmoDirList: TMemo; 
    mmoOnCollectFiles: TMemo; 
    procedure btn1Click(Sender: TObject); 
    private 
    procedure CollectFileProgress(const directory : String; var skipScan : Boolean); 
    end; 


{ TForm1 } 

procedure TForm1.btn1Click(Sender: TObject); 
begin 
    mmoDirList.Clear; 
    CollectFiles('c:\MyDelphiFiles', '*.pas', mmoDirList.Lines, True, CollectFileProgress); 
end; 

procedure TForm1.CollectFileProgress(const directory: String; var skipScan: Boolean); 
begin 
    mmoDirList.Lines.Add(directory); 
end; 
+1

はイェンスあなたがドキュメントに私をポイントしてくださいすることができます+ありがとう? –

+0

本当にいないドキュメントは、私は、イベントをGoogleで検索し、あなたにDWScriptを必要としないちなみにオンライン https://github.com/EricGrange/DWScript/blob/master/Source/dwsXPlatform.pas ソースコードを見つけましたこれを行うには、ビルドを機能だけで使うことができます –

0

を【解決しよう】

unit MainFormU; 

interface 

uses 
     Winapi.Windows, 
     Winapi.Messages, 
     System.SysUtils, 
     System.Variants, 
     System.Classes, 
     Vcl.Graphics, 
     Vcl.Controls, 
     Vcl.Forms, 
     Vcl.Dialogs, 
     Vcl.StdCtrls, 
     dwsXPlatform; 

type 
     TForm1 = class(TForm) 
       btn1: TButton; 
       mmoDirList: TMemo; 
       mmoOnCollectFiles: TMemo; 
    chkEnableOnCollectEvent: TCheckBox; 
       procedure btn1Click(Sender: TObject); 
       procedure OnCollectFileProgressEvent(const aDirectory: string; var aSkipScan: Boolean); 
     private 
       FOnCollectFiles: TCollectFileProgressEvent; 
     end; 

var 
     Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.btn1Click(Sender: TObject); 
begin 
     mmoDirList.Clear; 
     mmoOnCollectFiles.Clear; 

     if chkEnableOnCollectEvent.Checked then 
       FOnCollectFiles := OnCollectFileProgressEvent 
     else 
       FOnCollectFiles := nil; 

     // procedure CollectFiles(const directory: UnicodeString; 
     //        fileMask: UnicodeString; 
     //        list: TStrings; 
     //        recurseSubdirectories: Boolean = False; 
     //        onProgress: TCollectFileProgressEvent = nil); 

     CollectFiles('c:\MyFolder\', '*.pas', mmoDirList.Lines, True, FOnCollectFiles); 
end; 

procedure TForm1.OnCollectFileProgressEvent(const aDirectory: string; var aSkipScan: Boolean); 
begin 
     if aDirectory = 'c:\MyFolder\SkipThisFolder\' then begin 
       ShowMessage('Folder ' + aDirectory + ' was skipped!'); 
       aSkipScan := True; 
     end; 

     mmoOnCollectFiles.Lines.Add(aDirectory); 
end; 

end.