AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Nachrichtenfunktion für Threat erstellen und umleiten
Thema durchsuchen
Ansicht
Themen-Optionen

Nachrichtenfunktion für Threat erstellen und umleiten

Ein Thema von BAMatze · begonnen am 2. Sep 2009 · letzter Beitrag vom 3. Sep 2009
Antwort Antwort
BAMatze

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

Nachrichtenfunktion für Threat erstellen und umleiten

  Alt 2. Sep 2009, 08:28
Hallo und guten Tag an alle,

Habe jetzt in Ergänzung zu diesem Thread die Problematik, dass meine Nachrichten vom Threat in den Hauptthread "umgeleitet" werden müssen. Habe mir dazu schon einen Teil von Luckie´s Tut Win32Api angeschaut. Dabei ist mir zumindest erstmal eine Idee gekommen, wie ich glaube das Problem lösen zu können und wollte (bevor ich Stunden mit Umsetzung und Troubleshooting verbringe, um dann eventuell heraus zu finden, dass der Weg nicht funktioniert) nachfragen, ob der Weg umsetzbar ist oder eventuell total falsch oder elegantere Lösungen existieren.

Delphi-Quellcode:
function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam):
lresult; stdcall;
var
x, y : integer; //Variablen für Fensterposition
begin
Result := 0;
case uMsg of
WM_CREATE:
begin
{Fenster zentrieren}
x := GetSystemMetrics(SM_CXSCREEN); //Screenhöhe & -breite
y := GetSystemMetrics(SM_CYSCREEN);
{Fenster auf neue Position verschieben}
MoveWindow(hWnd, (x div 2) - (WindowWidth div 2),
(y div 2) - (WindowHeight div 2),
WindowWidth, WindowHeight, true);
end;
else
Result := DefWindowProc(hWnd,uMsg,wParam,lParam);
end;
end;
Außzug aus dem Tutorial

Also wenn ich das richtig verstanden habe (ist in dem anfangs genannten Thread so gesagt worden) existiert eine solche Nachrichtenfunktion nicht für den TThread. Diese muss ich nach dem Muster aus dem Tut implementieren und dann eigentlich nur die hWnd von meinem Hauptthreat übergeben und in der Case-Abfrage meine eigenen WM´s dort definieren (also WM_User+1: schicke eine Nachricht an Hauptthreat, dass irgenwas hier im Thread passiert ist).
Ist an dem, wie ich das verstanden hab eventuell noch ein Denkfehler oder habe ich da etwas falsch verstanden, weil eigentlich scheint es nicht schwer zu sein (was mich generell stutzig macht ).

[Edit] OT t->d umgewandelt(hoffe hab alle gefunden )[/Edit]
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#2

Re: Nachrichtenfunktion für Threat erstellen und umleiten

  Alt 2. Sep 2009, 08:32
OT: Ich mag jetzt nicht kleinlich klingen, aber es heisst Thread (von Faden) und nicht threat (Bedrohung).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
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, 10: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
BAMatze

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

Re: Nachrichtenfunktion für Threat erstellen und umleiten

  Alt 2. Sep 2009, 10:27
Fehler gefunden, hab das aus der TControlerBoard-Klasse in die MainForm kopiert und dort funktioniert es wie gewünscht, nur die Problematik, dass sofort beim Laden des Programmes darauf reagiert wird, ist leider nicht gegeben. Nachrichtenschleife scheint in dem Zeitraum nicht abgearbeitet zu werden.
2. Account Sero
  Mit Zitat antworten Zitat
BAMatze

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

Re: Nachrichtenfunktion für Threat erstellen und umleiten

  Alt 3. Sep 2009, 07:44
Hallo und guten Tag an alle,

keine Angst, dies ist kein Push. Wollte nur bemerken, dass nachdem ich meinen restlichen Quellcode für das Laden des Programmes gründlich auseinander genommen hab, ist mir folgendes aufgefallen:

Delphi-Quellcode:
// irgendwo in einer meiner Klassen habe ich folgende Dummheit begangen, welche zu dem Fehler führte

if Bewegtsich(1) or Bewegtsich(2) then
    begin
      repeat
        //application.processmessages; // <--- hier lag das Problem, warum das Programm die Nachrichtenschleife blockiert
      until (not Bewegtsich(1) ) and (not Bewegtsich(2));
Das Application.Processmessages hatte ich irgendwann mal auskommentiert, als ich das Problem hatte, dass mein SplashScreen bei dem eine For-Schleife für das Ein- und Ausblenden zuständig ist auch die ProzessMessages aufrief. Dies führte zu einem regelmäßigen Freeze des Splash´s und das Programm lief nicht mehr weiter. deswegen hatte ich dass damals auskommentiert.
Nachdem ich das Application.Processmessages wieder aktiviert hatte, konnte ich auch ohne Probleme wieder beim Laden des Programmes von meinem Thread in mein Hauptprogramm eingreifen.
Die Kommunikation zwischen Thread und Hauptprogramm habe ich über 2 WM_User-Messages gelöst, das eine sagt dem Hauptprogramm, dass ein Nothalt ausgelöst werden soll, die andere dass der Nothalt gelöst werden kann.

Sicher sind das keine "neuen" Erkenntnisse, habe es lediglich hier ergänzt, damit andere die über die SuFu hier her kommen auch wissen, wie ich das Problem ohne neue Nachrichtenfunktion lösen konnte.

MfG
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz