AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie verhindert man das FocusRect bei einem TTreeNode?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie verhindert man das FocusRect bei einem TTreeNode?

Ein Thema von Codehunter · begonnen am 15. Apr 2006 · letzter Beitrag vom 16. Apr 2006
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Wie verhindert man das FocusRect bei einem TTreeNode?

  Alt 15. Apr 2006, 21:40
Ich hab schon alles probiert was mir so einfällt. Ein doppeltes DrawFocusRect (da XOR-Farbe), ein FillRect darüber usw. Sogar in die VCL-Quellen vom TCustomTreeView hab ich geschaut aber nix gefunden. Hat jemand eine Idee?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Wie verhindert man das FocusRect bei einem TTreeNode?

  Alt 16. Apr 2006, 08:17
Die Allgemeinheit deiner Fragestellung lässt viele Lösungen zu. Beispielsweise verschwindet das Fokus-Rechteck, wenn du den selektierten Knoten auf nil setzt. Vielleicht solltest du die Randbedingungen etwas genauer beschreiben.

PS: Eine sehr filigrane Steuerung ermöglicht übrigens das Ereignis OnAdvancedCustomDrawItem().

Frohe Ostern

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Wie verhindert man das FocusRect bei einem TTreeNode?

  Alt 16. Apr 2006, 13:51
Ich verwende derzeit OnCustomDrawItem um einen andersfarbigen Balken für selektierte Knoten zu zeichnen. Dabei bin ich auf verschiedene Probleme gestoßen. Wenn ich z.B. das NodeRect verwende das über die gesamte Client-Breite vom TreeView geht (also GetNodeRect(FALSE) ) und dabei ShowLines vom TreeView TRUE ist, übermalt das System den von mir gezeichneten Hintergrund im Bereich der Linien. Also hab ich die Linien eben abgeschaltet, ebenso die Node-Buttons.

Das FocusRect ist jetzt das letzte Problem. Scheinbar wird das erst gezeichnet wenn OnCustomDrawItem schon abgearbeitet ist.

Delphi-Quellcode:
procedure TForm1.treProductsCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
   Rect1, Rect2: TRect;
  BackColor: TColor;
begin
   if Node.StateIndex = 3 then begin
     BackColor:= $00DCC2B9;
    Rect1:= Node.DisplayRect(TRUE);
    Rect2:= Node.DisplayRect(FALSE);
    Rect1.Right:= Rect2.Right;
    Rect1.Left:= Rect1.Left - 34;
    with treProducts.Canvas do begin
      Brush.Color:= BackColor;
      FillRect(Rect2);
    end;
  end;
end;
Das Hintergrund-Rechteck rücke ich deswegen um 34 Pixel nach links weil ich Images und StateImages für jeden Node verwende. Der Hintergrundbalken soll die beiden Images noch mit umfassen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:31 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