Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Abfangen einer Message ans eigene Programm (https://www.delphipraxis.net/11203-abfangen-einer-message-ans-eigene-programm.html)

Luckie 2. Nov 2003 10:36

Re: Abfangen einer Message ans eigene Programm
 
Dann sollte mein Link dir helfen.

absoluter_beginna 2. Nov 2003 10:40

Re: Abfangen einer Message ans eigene Programm
 
ja, danke :thuimb:

Luckie 2. Nov 2003 12:11

Re: Abfangen einer Message ans eigene Programm
 
So, habe mal auf die Schnelle was zusammen geschustert:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WndProc(var msg: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  bShow: Boolean = False;

procedure TForm1.WndProc(var msg: TMessage);
var
  s: string;
begin
  case msg.Msg of
    WM_MOUSEMOVE:
      begin
        // leider gibt es keine Funktion, die den numerischen Wert der
        // Konstante umwandelt, deswegen alles von Hand und das macht es so
        // aufwendig
        s := 'WM_MOUSEMOVE';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
      end;
    WM_ACTIVATE:
      begin
        s := 'WM_ACTIVATE';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
      end;
    WM_CLOSE:
      begin
        s := 'WM_CLOSE';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
        Sleep(2000); // 2 Sekunden warten, wir wollen noch was sehen.
      end;
    WM_LBUTTONDOWN:
      begin
        s := 'WM_LBUTTONDOWN';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
      end;
    WM_LBUTTONUP:
      begin
        s := 'WM_LBUTTONUP';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
      end;
    WM_MOVING:
      begin
        s := 'WM_MOVING';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
      end;
    WM_SHOWWINDOW:
      begin
        s := 'WM_SHOWWINDOW';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
        bShow := True;
      end;
    WM_SIZE:
      begin
        // vor WM_SHOWWINDOW existiert das Memo noch nicht!!!
        if bShow = True then
        begin
          s := 'WM_SIZE';
          Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
        end;
      end;
    WM_SYSCOMMAND:
      begin
        s := 'WM_SYSCOMMAND';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
      end;
    WM_PAINT:
      begin
        s := 'WM_PAINT';
        Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
      end;
  end;
  // weiterleiten an die in der VCL eingebaute WndProc,
  // sonst reagiert unser Programm nicht mehr auf die abgefangenen Nachrichten
  inherited;
end;
Im Memo wird die Konstate angezeigt und ihr nummerischer Wert.

absoluter_beginna 2. Nov 2003 12:49

Re: Abfangen einer Message ans eigene Programm
 
Ich danke dir!
Funktioniert auch (wer hätte das gedacht? :zwinker: )
Und wie kann ich einstellen, dass er damit erst startet, wenn ich auf einen Button clicke? (und dann auch wieder damit aufhört bei nochmaligem Klicken?)

Luckie 2. Nov 2003 12:59

Re: Abfangen einer Message ans eigene Programm
 
Hmpf, Grundlagen.
Delphi-Quellcode:
var
  bShow: Boolean = False;
  bStart: Boolean = False;
Delphi-Quellcode:
procedure TForm1.WndProc(var msg: TMessage);
var
  s: string;
begin
  if bStart = True then
  begin
    case msg.Msg of
      WM_MOUSEMOVE:
        begin
          // leider gibt es keine Funktion, die den numerischen Wert der
          // Konstante umwandelt, deswegen alles von Hand und das macht es so
          // aufwendig
          s := 'WM_MOUSEMOVE';
          Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg));
        end;
[..]
    // weiterleiten an die in der VCL eingebaute WndProc,
    // sonst reagiert unser Programm nicht mehr auf die abgefangenen Nachrichten
  end;
  inherited;
end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  bStart := not bStart;
end;

absoluter_beginna 2. Nov 2003 13:27

Re: Abfangen einer Message ans eigene Programm
 
Das war ja auch meine Idee. Nur muss ich wohl irgendwo nen Fehler eingebaut haben. Hat nämlich erst nicht funktioniert. Aber jetzte. Nochmals vielen Dank! :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz