Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Nachrichtenfunktion für Threat erstellen und umleiten

  Alt 2. Sep 2009, 11:06
Also hab in Erinnerung an frühere Versuche über einen Thread ein Fenster zu schließen folgendes erstmal probiert, was aber erstmal noch nicht die erhoffte Reaktion gezeigt hat:

der Thread jetzt umgebaut:
Delphi-Quellcode:
unit SteuerkartenKontrollThread;

interface

uses Windows, Classes;

Type TControlCardControlThread = class(TThread)
  private
    FFensterHandle: HWND;
  protected
    procedure Execute; override;
  public
    constructor create(MainHwnd: HWND); reintroduce;
    destructor destroy; override;
end;

implementation
uses Steuerkarte;

constructor TControlCardControlThread.create(MainHwnd: HWND);
begin
  inherited create(false);
  FFensterHandle := MainHwnd;
end;

destructor TControlCardControlThread.Destroy;
begin
  inherited destroy;
end;

procedure TControlCardControlThread.Execute;
var c: integer;
begin
  repeat
  c := GetTickCount;
  if ReadDigitalChannel(2) then PostMessage(FFensterHandle,WM_Nothalt,0,0); // einfache Postmessage an die Hauptform und somit in die Nachrichtenschleife in die ich ja eigentlich will.
  c := {interval}50 - (GetTickCount - c);
  if c > 0 then Sleep(c);
until Terminated;
end;

end.
Aufruf in der ControlerBoard-Klasse:
Delphi-Quellcode:
...
const WM_Nothalt = WM_User + 1;
...
procedure NothaltMessage(var MSG: TMessage);message WM_Nothalt;
...

constructor TControlerBoard.create;
var iIndex: integer;
begin
  inherited create;
  Eingangswaechter := TControlCardControlThread.create(Bedienform.Handle); //Initialisierung des Threads mit Übergabe des MainFormHandels
  for iIndex := 1 to 2 do Diodenhelligkeit[iIndex] := 150;
  bKamerabeleuchtung_angeschaltet := false;
  FbAnalogSignalOn := false;
end;

{////////////////////////////////////////////////////////////////////////////////////}
{/                                 Nothaltfunktion                                  /}
{////////////////////////////////////////////////////////////////////////////////////}

function TControlerBoard.Nothalt;
begin
  try
    Spleissgeraet_ausschalten; // Spleißgerät
    Stromversorgung_Verschiebetische_ausschalten; // Stromversorgung Verschiebetische
    result := true
  except
    // doFehlerevent
    result := false;
  end;
end;

procedure TControlerBoard.NothaltMessage(var MSG: TMessage);
begin
  Nothalt;
end;
irgendwo scheint noch ein kleiner Fehler zu liegen, weil darauf noch nicht reagiert wird.
2. Account Sero
  Mit Zitat antworten Zitat