Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#23

Re: Abfangen einer Message ans eigene Programm

  Alt 2. Nov 2003, 13:11
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat