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