![]() |
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 |
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 ... |
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 |
Re: TreeView: Nur als Anzeigeobjekt
Zitat:
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:
Bis neulich ...
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz