AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TApplicationevents.onmessage

Ein Thema von Mattze · begonnen am 6. Mai 2016 · letzter Beitrag vom 9. Mai 2016
 
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.005 Beiträge
 
Delphi 12 Athens
 
#4

AW: TApplicationevents.onmessage

  Alt 6. Mai 2016, 06:39
Wofür brauchst du da eigentlich OnMessage? Ein Beispiel:
Delphi-Quellcode:
  TOnFinished = procedure(const ACancelled: Boolean; const AFolder: string; const AFolderSize: Int64) of object;

  TTest = class(TThread)
  private
    FFolder: string;
    FFolderSize: Int64;
    FOnFinished: TOnFinished;
    function GetFolderSize(const AFolder: string): Int64;
    procedure SetOnFinished(const Value: TOnFinished);
    procedure DoFinished;
  protected
    procedure Execute; override;
  public
    constructor Create(const AFolder: string);
    property OnFinished: TOnFinished read FOnFinished write SetOnFinished;
  end;

  TfrmTest = class(TForm)
    btnStart: TButton;
    btnStop: TButton;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
  private
    FThread: TTest;
    procedure CalculationFinished(const ACancelled: Boolean; const AFolder: string; const AFolderSize: Int64);
  public
    { Public-Deklarationen }
  end;

var
  frmTest: TfrmTest;

implementation

{$R *.dfm}

{ TTest }

constructor TTest.Create(const AFolder: string);
begin
  inherited Create(False);
  FFolder := AFolder;
end;

procedure TTest.DoFinished;
begin
  if Assigned(FOnFinished) then
    FOnFinished(FFolderSize = -1, FFolder, FFolderSize);
end;

procedure TTest.Execute;
begin
  inherited;
  FFolderSize := GetFolderSize(FFolder);
  Synchronize(DoFinished);
end;

function TTest.GetFolderSize(const AFolder: string): Int64;
var
  SearchResult: TSearchRec;
  SubFolderSize: Int64;
begin
  Result := 0;
  if FindFirst(IncludeTrailingPathDelimiter(AFolder) + '*.*', faAnyFile, SearchResult) = 0 then
  begin
    repeat
      if Copy(SearchResult.Name, 1, 1) <> '.then
      begin
        if SearchResult.Attr and faDirectory > 0 then
          Inc(Result, GetFolderSize(IncludeTrailingPathDelimiter(AFolder) + SearchResult.Name))
        else
          Inc(Result, SearchResult.Size);
      end;
      if Terminated then
        Exit(-1);
    until FindNext(SearchResult) <> 0;
    FindClose(SearchResult);
  end;
end;

procedure TTest.SetOnFinished(const Value: TOnFinished);
begin
  FOnFinished := Value;
end;

{ TfrmTest }

procedure TfrmTest.btnStartClick(Sender: TObject);
begin
  FThread := TTest.Create('c:\');
  FThread.OnFinished := CalculationFinished;
  btnStart.Enabled := False;
  btnStop.Enabled := True;
end;

procedure TfrmTest.btnStopClick(Sender: TObject);
begin
  FThread.Free;
  btnStart.Enabled := True;
  btnStop.Enabled := False;
end;

procedure TfrmTest.CalculationFinished(const ACancelled: Boolean; const AFolder: string; const AFolderSize: Int64);
begin
  if not ACancelled then
    ShowMessage(AFolder + ': ' + IntToStr(AFolderSize));
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz