Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TreeView: Nur als Anzeigeobjekt (https://www.delphipraxis.net/49279-treeview-nur-als-anzeigeobjekt.html)

weltaran 8. Jul 2005 09:36


TreeView: Nur als Anzeigeobjekt
 
Hallo Leute!

Ich versuch gerade den TreeView als reines Anzeigeobjekt zu missbrauchen. Ich will also bestimmte Knoten Programmgesteuert auswählen, aber der Benutzer soll keine Möglichkeit haben selbst die Knoten auszuwählen. Wenn ich den TreeView disable dann werden alle Knoten grau dargestellt, der ausgewählte Knoten ist nicht mehr erkenntlich. Wenn ich stattdessen das darunterliegende Panel disable, dann sieht das ganze ähnlich aus, nur das die Knoten weiß hinterlegt sind.


Hat von euch jemand eine Idee?

Ciao

Grendel 8. Jul 2005 09:37

Re: TreeView: Nur als Anzeigeobjekt
 
Fang einfach die WM-Messages des Treeviews ab und lass Mouse-Klicks und Tatstatureingaben einfach untern Tisch fallen.

Bis neulich ...

weltaran 8. Jul 2005 09:45

Re: TreeView: Nur als Anzeigeobjekt
 
Das hört sich gut an, ich hab allerdings noch nie mit diesen Botschaften hantiert. Kannst du mir mit ein bisschen pseudocode weiterhelfen? 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? Sorry, hab verdammt wenig Plan auf dem Gebiet.


Ciao

Grendel 8. Jul 2005 10:07

Re: TreeView: Nur als Anzeigeobjekt
 
Zitat:

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 ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 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