Einzelnen Beitrag anzeigen

Grendel
(Gast)

n/a Beiträge
 
#4

Re: TreeView: Nur als Anzeigeobjekt

  Alt 8. Jul 2005, 11:07
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 ...
  Mit Zitat antworten Zitat