Einzelnen Beitrag anzeigen

David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#1

VirtualStringTree zeigt immer Scrollbars

  Alt 26. Mär 2013, 18:36
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 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 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 vstVerfuegbareDrawText , weil ich dort einen Eintrag hervorheben will mit TargetCanvas.Font.Style := [fsBold];
  Mit Zitat antworten Zitat