Zitat von
weltaran:
Kann ich gezielt auf die Botschaften an das TreeView reagieren oder muss ich alle Botschaften abfangen und dann irgendwie herausbekommen, ob sie an die TreeView gerichtet waren?
Geht beides. Du kannst entweder "Application.OnMessage" behandeln und dann prüfen, ob das
Handle der Message (Msg.hwnd) dem
Handle des Zielobjektes entspricht.
Einfacher ist es aber, die WindowProc des entsprechenden Steuerelements umzubiegen.
Beispiel (es nur wird die linke Maustaste verschluckt aber das Prinzip sollte klar werden):
Delphi-Quellcode:
unit MyTreeView;
interface
uses
SysUtils, Classes, Controls, ComCtrls, Messages;
type
TMyTreeView =
class(TTreeView)
private
{ Private-Deklarationen }
OldWndProc: TWndMethod;
procedure MyWindowProc(
var Message: TMessage);
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
constructor Create(AOwner: TComponent);
override;
destructor Destroy();
override;
published
{ Published-Deklarationen }
end;
implementation
{ TMyTreeView }
constructor TMyTreeView.Create(AOwner: TComponent);
begin
inherited;
// Messagebehandlung zur Designzeit nicht umbiegen
if not (csDesigning
in ComponentState)
then
begin
OldWndProc := WindowProc;
WindowProc := MyWindowProc;
end;
end;
destructor TMyTreeView.Destroy;
begin
if not (csDesigning
in ComponentState)
then
WindowProc := OldWndProc;
inherited;
end;
procedure TMyTreeView.MyWindowProc(
var Message: TMessage);
begin
if (
Message.Msg <> WM_LBUTTONDOWN)
and
(
Message.Msg <> WM_LBUTTONUP)
and
(
Message.Msg <> WM_LBUTTONDBLCLK)
then
begin
OldWndProc(
Message);
end;
end;
end.
Bis neulich ...