Einzelnen Beitrag anzeigen

danieldelphi

Registriert seit: 12. Mär 2015
38 Beiträge
 
#1

Neues Event in Form oder Kommunikations zwischen Thread und Form

  Alt 1. Apr 2015, 14:19
Hallo zusammen,

ich habe folgendes Problem, ich habe eine Form, in der ich einen Thread starte, jetzt will ich am ende wissen ob der thread seine arbeit beendet hat und wenn ja will ich darauf reagieren, genauer gesagt einen neuen start des threads ermöglichen.
Etwas allgemeiner beschrieben kann man sagen ich habe eine Form die einen thread in einer anderen unit startet und dann am ende wieder mit der form kommunizieren soll, wie geht man dabei am besten vor? Kann ich auf den eventhandler des forms zugreifen und ein neues event starten? das problem dabei ist, dass ich dafür den thread iwie mit dem form kommunizieren lassen muss oder? denn beide unints in die uses klasse der anderen schreiben geht ja nicht.

Hier ei bisschen code des problems.

Delphi-Quellcode:
unit sterb;

interface

uses Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs,
  StdCtrls;

type
  TMyThread = class(TThread)
  procedure Execute; override;
end;

procedure sterb_schleife;



implementation

procedure TMyThread.Execute;
begin
  sterb_schleife();
end;


usw...

end
das form:
Delphi-Quellcode:

unit Checkdata;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, deklara, sterb, Grids, DirOutln, ShellAPI, ShlObj, registry,
  struktur, CheckLst, ExtCtrls;



type
  TForm2 = class(TForm)
    StartButton: TButton;
    Inputedit: TEdit;
    Outputedit: TEdit;
    Formatbox: TComboBox;
    Meldbox: TComboBox;
    Outputbtn: TButton;
    Inputbtn: TButton;
    dlgmanagerpath: TOpenDialog;
    Memo1: TMemo;
    countmemo: TMemo;
    reportbutton: TButton;
    reportedit: TEdit;
    Savereport: TSaveDialog;
    Label1: TLabel;
    Label2: TLabel;
    Helpbtn: TButton;
    Cancelbtn: TButton;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    CheckBox1: TCheckBox;
    procedure OutputbtnClick(Sender: TObject);
    procedure StartButtonClick(Sender: TObject);
    procedure MeldboxChange(Sender: TObject);
    procedure FormatboxChange(Sender: TObject);
    procedure InputbtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure reportButtonClick(Sender: TObject);
    procedure sep_rep();
    procedure sep_plau();
    procedure HelpbtnClick(Sender: TObject);
    procedure CancelbtnClick(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  end;

function BrowseDialog(const Title: string; const Flag: integer): string;
var
  Form2: TForm2;
implementation

{$R *.dfm}

[...]


procedure TForm2.StartButtonClick(Sender: TObject);
var
  fehler:string;
begin
  meldung := memo1.lines;
  dsnr :=countmemo.lines;
  if checkstart(fehler) then begin
    meldung.add('Durchlauf gestartet');
    sterbthread := sterb.TMyThread.Create(False);
    Cancelbtn.Enabled:=true;
    StartButton.Enabled:=false;
  end
  else
    ShowMessage(fehler);
end;

[..]
end
  Mit Zitat antworten Zitat