AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ableitung von TObject muss Windows Messages Empfangen...

Ableitung von TObject muss Windows Messages Empfangen...

Ein Thema von Kedariodakon · begonnen am 17. Okt 2005 · letzter Beitrag vom 18. Okt 2005
Antwort Antwort
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#1

Ableitung von TObject muss Windows Messages Empfangen...

  Alt 17. Okt 2005, 17:53
So Jungens hier hab ich mal ein etwas kniffliges Problem (Zu mindest fuer mich)!
Ich habe eine Klasse welche Windowsmessages empfangen muß...

Die Kommunikation über Messages habe ich mir nicht einfallen lassen und kann sie daher nicht entfernen...
Das Object initalisiert später eine dll, welche das Handle und die Messages bekommt welche sie später zurücksendet...

Hier seh ich nun 2 Möglichkeiten:
1. Globale Windowsmessages...
2. Die Möglichkeit direkt Messages mit dem TObject zu empfangen...

Entschieden habe ich mich fuer Variante 2, da Globale Messages Das ganze System belasten würden... (Vor allem wo ich nicht genau sagen kann in welchem Umfang die Messages gesendet werden...)
TObject deshalb, da das Object universell einsetzbar sein muss/soll, (Programm, Konsolenanwendung, Dll...)

Nun meine Frage hat jemand eine Ahnung wie ich das anstelle?
Es muss doch eine Möglichkeit geben Irgendwas, Irgendwo, Irgendwie in Windows zu regestrieren um ein Handle zu haben und natuerlich auch die Möglichkeit dies zu deregestrieren...

Bin jetzt konnte ich nichts Sinvolles finden...

Wie das TApplication macht, bin ich auch nicht wirklich dahintergestiegen
Scheinbar hat das aber mit der Funktion RegisterClass zu tun, aber was da noch alles mitspielt konnt ich nicht erkennen/finden

Hat schonmal jemand sowas in der Art gemacht und kann mir da weiterhelfen?

Bye
Christian
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 17. Okt 2005, 17:54
Dein TObject muss einObject muss ganz einfach ein Nachfahre von TWinControl sein, dann hat es ein Handle..
Benjamin
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 17. Okt 2005, 17:55
Mit TObject Messages empfangen? Viel Spass Um sowas tun zu können, brauchst du ein Fenster.. also mindestens mal ein TWinControl, dann dürfte das schon eher gehen..

Hier im Forum gabs glaube ich auch mal ein paar Fragen und Antworten zu dem Thema. Kann mich leider nicht entsinnen wo
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 17. Okt 2005, 18:29
Zitat von BenjaminH:
Dein TObject muss einObject muss ganz einfach ein Nachfahre von TWinControl sein, dann hat es ein Handle..
TwinControl setzt einen Owner vooraus, und einer der Owner is dann die Form mit Handle ein eigegenes hat es IMHO nicht...

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 17. Okt 2005, 18:29
Hallo,
und hier hätten wir die Lösung
Delphi-Quellcode:
unit Unit1;

interface

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


const

  PM_MyMessage = WM_USER+1000;

type
  TMessageObject = class(TObject)
  private
    FWindowHandle: THandle;
    FOnMessage: TNotifyEvent;
  protected
     procedure DoMessage; virtual;
     procedure WndProc(var Msg: TMessage);
  public
    constructor Create;
    destructor Destroy; override;
    property Handle : THandle read FWindowHandle;
    property OnMessage : TNotifyEvent read FOnMessage write FOnMessage;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FMessageObject : TMessageObject;
    procedure OnMessage(Sender : TObject);
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMessageObject }

constructor TMessageObject.Create;
begin
  inherited Create;
  FWindowHandle:=AllocateHWnd(WndProc);
end;

destructor TMessageObject.Destroy;
begin
  DeallocateHWnd(FWindowHandle);
  inherited Destroy;
end;

procedure TMessageObject.DoMessage;
begin
  If Assigned(FOnMessage) then
    FOnMessage(Self);
end;

procedure TMessageObject.WndProc(var Msg: TMessage);
begin
  With Msg do
    If Msg = PM_MyMessage then
      Try
        DoMessage;
      Except
        Application.HandleException(Self);
      end
    else
      Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;

{ TForm1 }

procedure TForm1.OnMessage(Sender: TObject);
begin
  ShowMessage('Yes');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMessageObject:=TMessageObject.Create;
  FMessageObject.OnMessage:=OnMessage;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FMessageObject.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMessage(FMessageObject.Handle,PM_MyMessage,0,0);
end;

end.
Ich habe etwas bei TTimer abgeguckt
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 17. Okt 2005, 18:33
du kannst auch TObject nehmen und mit AllocateHWnd ein unsichtbares Fenster erzeugen, und die Nachrichten dafür dann an deine Procedure schicken. Allerdings funktioniert das nicht in einer Consolenanwendung wenn du dort die Windowmessages nicht verarbeitest (Nachrichtenschleife). Also in einer standardconsolenanwendung kannst du dein Object mit den Messages vergessen (außer du machst es in nem Thread, oder machst dem Programmierer begreiflich warum er in einer Konsolenanwendung jedesmal eine Nachrichtenschleife braucht)
Hier findest du den Ansatz:
http://www.delphipraxis.net/internal...=391495#391495

da war Jens wohl schneller, aber das Problem mit der Konsolenanwendung besteht und wird auch nicht einfach so verschwinden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 17. Okt 2005, 18:37
Danke an die letzten beiden Poster (Jens Schumann, SirThornberry) Das hilft mir schon mal sehr weiter!
Wuerde sowas in einem Dienst laufen, falls es dort anwendung finden sollte?

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 17. Okt 2005, 18:40
in einem Dienst sollte es laufen, allerdings braucht der Dienst dann auch eine Nachrichtenschleife. Um die kommst du nicht herum wenn du mit windowmessages arbeiten willst/musst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 18. Okt 2005, 15:20
Ein paar sachen sind mir noch unklar:

1.
Delphi-Quellcode:
//...
  Application.HandleException(Self);
//...
Was macht das genau? die Exception weiterreichen? Warum? Zweck?

2.
Delphi-Quellcode:
//...
  Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
//...
Ich nehme mal an Result ist das Msg.Result Richtig?
DefWindowProc reicht die Message weiter da sie nicht bearbeitet wurde oder?

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Ableitung von TObject muss Windows Messages Empfangen...

  Alt 18. Okt 2005, 18:18
DefWindowProc ist die Windowprocedure von Windows. Wenn man also sich nicht um die Abarbeitung einer bestimmten Message kümmern will im Programm leitet man die Message dort hinn weiter und somit wird das Standardzeugs ausgeführt (zum Beispiel wenn man wm_paint nicht selbst verarbeiten will malt windows das Fenster standardmäßig). Ja, result ist Msg.Result
Dadurch das im Beispielquelltext ganz oben " With Msg do" steht braucht man später nicht mehr das "msg." davor schreiben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:35 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