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/)
-   -   VirtualStringTree zeigt immer Scrollbars (https://www.delphipraxis.net/173974-virtualstringtree-zeigt-immer-scrollbars.html)

David Martens 26. Mär 2013 17:36

VirtualStringTree zeigt immer Scrollbars
 
Hi,

nach längerem mal wieder eine Frage.

Ich habe mehrere VirtualStringTree auf meinem Formular.
Die sind auf mehrere Tabs verteilt. Im ersten Tab werden Einträge ausgewählt in weiteren dann speziellen Aufgaben zugeteilt.
Die ausgewählten Einträge des ersten Tags werden dabei auf die andere kopiert. Das geht auch alles, ABER im letzten VirtualStringTree sind dann immer die blöden Scrollbars zu sehen.
Ich habe das VirtualStringTree per Copy&Paste vom Zweite genommen, so wie die anderen auch. Die Spalten erstelle ich zur Laufzeit.

Hier die Einstellungen im
Delphi-Quellcode:
FormCreate
(identisch für alle):
Delphi-Quellcode:
  vstVerfuegbare.NodeDataSize := SizeOf(TTreeData);
  vstVerfuegbare.Header.Columns.Clear;
  vstVerfuegbare.Header.Columns.Add.Text := 'Bla';
  vstVerfuegbare.Header.Columns.Add.Text := 'Blupp';
  vstVerfuegbare.Header.Columns[0].Width := TextGroesse(vstVerfuegbare.Header.Columns[0].Text, vstVerfuegbare.Header.Font).cx + 20;
  vstVerfuegbare.Header.AutoSizeIndex := 0;
  vstVerfuegbare.Header.Columns[1].Width := TextGroesse(vstVerfuegbare.Header.Columns[1].Text, vstVerfuegbare.Header.Font).cx + 20;
  vstVerfuegbare.Repaint;
Nur zur Erklärung von
Delphi-Quellcode:
TextGroesse
.
Delphi-Quellcode:
function TextGroesse(const Text : string; Font : TFont = nil) : TSize;
// Die einzige, mir gekannte, verlässlich Methode die Breite und Höhe des Textes zu ermitteln,
// TCanvas.TextWidth() macht das nicht immer richtig.
var
  DC : hDC;
  F : hFont;
begin
  F := 0;
  DC := GetDC(0);
  try
    if Font <> nil then
      F := SelectObject(DC, Font.Handle);
    if not GetTextExtentPoint32(DC, Text, Length(Text), Result) then
    begin
      Result.cx := 0;
      Result.cy := 0;
    end;
  finally
    if F <> 0 then
      SelectObject(DC, F);
    ReleaseDC(0, DC);
  end;
end;
Der einzige Unterschied gesteht in der zusätzlichen Methode
Delphi-Quellcode:
vstVerfuegbareDrawText
, weil ich dort einen Eintrag hervorheben will mit
Delphi-Quellcode:
TargetCanvas.Font.Style := [fsBold];

Gollum 27. Mär 2013 07:54

AW: VirtualStringTree zeigt immer Scrollbars
 
Hallo,

die Scrollbars kannst Du auch ausblenden:
Delphi-Quellcode:
  vstVerfuegbare.ScrollBarOptions.Scrollbars:=ssNone;

Zitat:

vstVerfuegbare.Header.Columns[0].Width := TextGroesse(vstVerfuegbare.Header.Columns[0].Text, vstVerfuegbare.Header.Font).cx + 20;
vstVerfuegbare.Header.AutoSizeIndex := 0;
Wenn Du den AutoSizeIndex benutzt, erübrigt es sich, die Breite von Column[0] zu berechnen. Das macht der Tree dann von alleine.

David Martens 27. Mär 2013 10:30

AW: VirtualStringTree zeigt immer Scrollbars
 
Danke, ich habe die ScrollBarOptions auf
Delphi-Quellcode:
ssVertical
gesetzt, das hilft schon.

Aber trotz
Delphi-Quellcode:
vstVerfuegbare.Header.AutoSizeIndex := 0;
muss ich immer noch
Delphi-Quellcode:
vstVerfuegbare.Header.Columns[1].Width
setzen, sonst ist die zweite Spalte nur ganz klein.

Gruß David

Edit:
Ich habe mich jetzt mal 2 Stunden durchgesteppt und den Fehler gefunden. ;( Asche auf mein Haupt. Ein
Delphi-Quellcode:
vstVerfuegbare.EndUpdate;
war nicht für diesen VST, sondern für einen anderen und damit war dieser VST immer im Status
Delphi-Quellcode:
tsUpdating
. Somit auch kein Neuzeichnen der Scrollbars.


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