AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

In Komponente Message vom Form abfangen

Ein Thema von jakobwenzel · begonnen am 27. Jun 2007 · letzter Beitrag vom 11. Aug 2007
Antwort Antwort
Benutzerbild von jakobwenzel
jakobwenzel

Registriert seit: 31. Aug 2005
Ort: Ingelheim am Rhein
141 Beiträge
 
FreePascal / Lazarus
 
#1

In Komponente Message vom Form abfangen

  Alt 27. Jun 2007, 20:53
Hallo zusammen!

ich habe folgendes Problem: Ich schreibe an einer nicht visuellen Komponente, die irgendwie mitkriegen muss, wenn in dem ansonsten leeren Formular Tasten gedrückt werden.
An die meisten Tasten komme ich ja, indem ich OnKeyDown/OnKeyUp "umbiege" (meinen Eventhandler reinschreiben und den alten bei Bedarf aufrufen), nur für Tab funktioniert das ja leider nicht.
Normalerweise würde man jetzt die Message "CMDialogKey" abfangen, aber da komme ich so von der Komponente aus nicht ran.

Eine mögliche Lösung wäre jetzt, das Formular von einem eigenen TForm-Nachfolger abzuleiten, der für diese Message ein Event bereitstellt. Aber solche Codeänderungen wollte ich eigentlich vermeiden.
Gibts da irgendeine Lösung?

Ein Crosspost

mfg jakobwenzel
Jakob Wenzel
"My store now sells Ninja Weapons!"
Comicverkäufer bei den Simpsons
  Mit Zitat antworten Zitat
Benutzerbild von jakobwenzel
jakobwenzel

Registriert seit: 31. Aug 2005
Ort: Ingelheim am Rhein
141 Beiträge
 
FreePascal / Lazarus
 
#2

Re: In Komponente Message vom Form abfangen

  Alt 11. Aug 2007, 12:08
*push*
Jakob Wenzel
"My store now sells Ninja Weapons!"
Comicverkäufer bei den Simpsons
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: In Komponente Message vom Form abfangen

  Alt 11. Aug 2007, 12:15
Wenn du die WndProc umbiegst bekommst du garantiert alle Tastendrücke mit

So in etwa: (Das beispiel ist jetzt für eine Progressbar, aber das musst du dann mit deinem Form machen )
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
      { Private-Deklarationen }
      OldProgressWndProc: TWndMethod;
      procedure ProgressWndProc(var Msg: TMessage);
   public
      { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.ProgressWndProc(var Msg: TMessage);
var
  dc: HDC;
  rect: TRect;
begin
   OldProgressWndProc (Msg);

   if Msg.Msg = WM_xyz then
// Auf irgendeine Nachricht (siehe msdn oder Luckie ^^) reagieren ....
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   OldProgressWndProc := ProgressBar1.WindowProc; // alte merken
   ProgressBar1.WindowProc := ProgressWndProc; // wndproc umbiegen
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von jakobwenzel
jakobwenzel

Registriert seit: 31. Aug 2005
Ort: Ingelheim am Rhein
141 Beiträge
 
FreePascal / Lazarus
 
#4

Re: In Komponente Message vom Form abfangen

  Alt 11. Aug 2007, 12:23
Vielen Dank, funktioniert perfekt!
Jakob Wenzel
"My store now sells Ninja Weapons!"
Comicverkäufer bei den Simpsons
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: In Komponente Message vom Form abfangen

  Alt 11. Aug 2007, 12:47
Wenn es viele Komponenten wären, dann wäre noch TApplicationEvent etwas für dich. Dadurch bekommst du dann alle Messages an dein Programm mit.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 14:57 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