Forum Delphi.cz

Delphi => Obecné => Téma založeno: Stanislav Hruška 08-04-2016, 15:17:37

Název: VirtualStringTree - Header - vlastná farba
Přispěvatel: Stanislav Hruška 08-04-2016, 15:17:37
Použil som toto riešenie
http://stackoverflow.com/questions/32396875/how-to-set-the-color-of-virtualstringtree-header (http://stackoverflow.com/questions/32396875/how-to-set-the-color-of-virtualstringtree-header)
Ale buď mám všetko v jednej farbe, alebo sú hlavičky v pôvodnom stave a pozadie podľa mňa. Viď prílohy.
Kód: Delphi [Vybrat]
  1. procedure TfrmDepositDefrayalSingly.vstItemsManuallyHeaderDrawQueryElements(Sender: TVTHeader;
  2.   var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements);
  3. begin
  4. //  if not Assigned(PaintInfo.Column) then -> Zmení sa pozadie, ale nie hlavička
  5.     Elements := [hpeBackground];
  6. end;
  7.  
  8. procedure TfrmDepositDefrayalSingly.vstItemsManuallyAdvancedHeaderDraw(Sender: TVTHeader;
  9.   var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements);
  10. begin
  11.   if hpeBackground in Elements then
  12.   begin
  13.     PaintInfo.TargetCanvas.Brush.Color := cGlobalVar.BasicColor;
  14.     PaintInfo.TargetCanvas.FillRect(PaintInfo.PaintRectangle);
  15.   end;
  16. end;
  17.  
Ako vykresliť (jednoducho) hlavičky? Úplne by mi postačil jednoduchý rámček dookola.
Dajú sa farebne upraviť aj bežce?
Název: Re:VirtualStringTree - Header - vlastná farba
Přispěvatel: Stanislav Hruška 08-04-2016, 15:24:17
Nevšimol som si sbalené príspevky. Tam ešte bolo
http://pastebin.com/59a7X4D1 (http://pastebin.com/59a7X4D1)
Název: Re:VirtualStringTree - Header - vlastná farba
Přispěvatel: Stanislav Hruška 08-04-2016, 15:50:49
Ale narazil som na tieto dva problémy:

// Nepozná Utils
    VirtualTrees.Utils.AlphaBlend(0, Canvas.Handle, Rect, Rect.TopLeft, bmConstantAlphaAndColor,
      BlendValue, ColorToRGB(BlendColor))
     
// VclStyleEnabled je protected
      if (Tree.VclStyleEnabled and (seClient in Tree.StyleElements)) then
Název: Re:VirtualStringTree - Header - vlastná farba
Přispěvatel: Stanislav Hruška 08-04-2016, 16:11:42

Tak som to skúsil. Procedúra ColorBlend sa nevolá, takže prvý problém nevstupuje do hry. Druhý som eliminoval je vymazaním. Neviem presne čo to znamená.
Ale hlavička je bez akýchkoľvek zmien.
Název: Re:VirtualStringTree - Header - vlastná farba
Přispěvatel: Radek Červinka 09-04-2016, 00:44:43
a kdyz v tom vstItemsManuallyAdvancedHeaderDraw

udelas neco jako

Kód: Delphi [Vybrat]
  1.   if hpeBackground in Elements then
  2.   begin
  3.     PaintInfo.TargetCanvas.Brush.Color := cGlobalVar.BasicColor;
  4.     PaintInfo.TargetCanvas.FillRect(PaintInfo.PaintRectangle);
  5.     PaintInfo.TargetCanvas.Brush.Color := clBlack; // nebo Pen.Color?
  6.     PaintInfo.TargetCanvas.FrameRect(PaintInfo.PaintRectangle);
  7.   end;
  8.  
Název: Re:VirtualStringTree - Header - vlastná farba
Přispěvatel: Stanislav Hruška 09-04-2016, 10:14:34
Už to mám 8)
Kód: Delphi [Vybrat]
  1. procedure TfrmDepositDefrayalSingly.vstItemsManuallyHeaderDrawQueryElements(Sender: TVTHeader;
  2.   var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements);
  3. begin
  4.   Elements := [hpeBackground];
  5. end;
  6.  
  7. procedure TfrmDepositDefrayalSingly.vstItemsManuallyAdvancedHeaderDraw(Sender: TVTHeader;
  8.   var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements);
  9. begin
  10.   if hpeBackground in Elements then
  11.   begin
  12.     PaintInfo.TargetCanvas.Brush.Color := cGlobalVar.BasicColor;
  13.     PaintInfo.TargetCanvas.FillRect(PaintInfo.PaintRectangle);
  14.  
  15.     if Assigned(PaintInfo.Column) then
  16.     begin
  17.       PaintInfo.TargetCanvas.Brush.Color := clGray;
  18.       PaintInfo.TargetCanvas.FrameRect(PaintInfo.PaintRectangle);
  19.     end;
  20.   end;
  21. end;
  22.  
  23.  
Název: Re:VirtualStringTree - Header - vlastná farba
Přispěvatel: Delfin 30-01-2019, 23:46:46
Aha, takze nakonec neslo o stylovanou, kolorizovanou kresbu. P.S. ten kod z pastebin je ode me :)