Einzelnen Beitrag anzeigen

Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: VST eingebettete Controls erst bei MouseEnter sichtbar

  Alt 6. Mai 2017, 08:22
Moin,

für mich hat sich jetzt dieses Vorgehen bewährt, zuerst ein Objekt, das die Daten und zur Visualisierung ein Panel enthält:
Delphi-Quellcode:
  TFoodform = class(TBaseFoodform)
  private
    FPanel: TPanel;
    function GetPanel: TPanel;
    procedure SetPanel(const Value: TPanel);
  published
    property Panel: TPanel read GetPanel write SetPanel;
Das VST befindet sich auf einem Formular mit diesen Deklarationen:
Delphi-Quellcode:
type
  PTreeData = ^TFoodform;
  TFrmKostformen = class(TFrmStammBasis)
...
  private
    FoodformList: TFoodformlist;
...
In der Prozedur, die das VST mit Inhalt füllt, befindet sich dieser Code:
Delphi-Quellcode:
  for i := 0 to Foodformlist.Count - 1 do
  begin
    VST1.AddChild(nil, Foodformlist[i]);
    Foodformlist[i].Panel := TPanel.Create(nil);
    Foodformlist[i].Panel.Parent := VST1;
    Foodformlist[i].Panel.StyleElements := [];
    Foodformlist[i].Panel.Color := Foodformlist[i].Color;
    Foodformlist[i].Panel.Height := VST1.DefaultNodeHeight;
    Foodformlist[i].Panel.Visible := False;
  end;
Jetzt muss das nur noch zur Anzeige gebracht werden:
Delphi-Quellcode:
procedure TFrmKostformen.VST1AfterCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas;
  Node: PVirtualNode; Column: TColumnIndex; CellRect: TRect);
var
  data: PTreeData;
begin
...
  if Column=3 then
  begin
    data := Sender.GetNodeData(node);
    if assigned(data.Panel) then
    begin
      data.Panel.Visible := vsVisible in Node.States;
      Data.Panel.BoundsRect := Sender.GetDisplayRect(Node, Column, False);
    end;
  end;
end;
Ich habe das testweise auch mal mit einem TButton statt einem TPanel ausprobiert und kann da keine Probleme mit dem Zeichnen feststellen.
  Mit Zitat antworten Zitat