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/)
-   -   Delphi VST.ColumnHeaders kein property "Name" unterstützt? (https://www.delphipraxis.net/120269-vst-columnheaders-kein-property-name-unterstuetzt.html)

richard_boderich 8. Sep 2008 12:35


VST.ColumnHeaders kein property "Name" unterstützt
 
Hallo zusammen!

Ich habe grad mal eine Frage zu den VST Columnheadern. Ich vermisse dort das property "Name" in den Columnheadern.

Ich würde nähmlich statt der Case Columnindex-Abfrage

Delphi-Quellcode:
 case column of
  0: ...tu was
gerne so abfragen

Delphi-Quellcode:
 if column.name='test' then
  begin

  ...tu was
  end;
würde ich persönlich für sauberer halten und ist vorteilhaft, wenn man später nochmal die Spaltenabfolge ändert oder nachträglich Spalten einfügt. Er zeichnet dann halt immer in die Spalte in die er auch zeichnen soll. Meine Frage ist nun, da der VST kein Columnname bietet, ob ich die jeweilige "Tag" Eigenschaft dazu missbrauchen könnte? In den VST Doku steht dort bei mir jedoch das diese ein undokumentiertes property ist. Weis jmand ob ich Tag ohne Probleme verwenden kann?

denke mir das so (ungetestet)

Delphi-Quellcode:
case vst.Header.Columns[column].Tag of
5: ...tu was
end;

OG Karotte 8. Sep 2008 12:48

Re: VST.ColumnHeaders kein property "Name" unterst
 
Die Spaltenüberschrift gibst Du doch im Quellcode / Propertyeditor an, dann müsste doch auch über Column.Text o.ä daran zu kommen sein :gruebel:. Hab gerad' kein Delphi da, aber da ich Teile meines Headers (insbesondere mehrzeiligen Text) selbst zeichne, bin ich da auch irgendwie ran gekommen.
Ich werd' heut' abend mal schauen ob ich was finde...

richard_boderich 8. Sep 2008 12:59

Re: VST.ColumnHeaders kein property "Name" unterst
 
Klar kannst du das auch über die Eigenschaft Text machen, jedoch finde ich das sehr ungünstig, gerade wenn du lange Columnbeschriftungen hast.
Die Frage ist ob ich die Property "Tag" einfach so verwenden kann, oder ob ich da irgendwas im VST durcheinader haue.

Apropo mehrzeiligen Text im VST. Hast du zufällig eine Lösung wie ich mehrzeiligen Text bei fester Rowheight horizontal in der Zelle zentrieren kann?

itashadow 8. Sep 2008 13:04

Re: VST.ColumnHeaders kein property "Name" unterst
 
also bei mir funktioniert folgendes
Delphi-Quellcode:
vst.Header.Columns[0].Text

OG Karotte 8. Sep 2008 13:04

Re: VST.ColumnHeaders kein property "Name" unterst
 
Zitat:

Zitat von richard_boderich
Klar kannst du das auch über die Eigenschaft Text machen, jedoch finde ich das sehr ungünstig, gerade wenn du lange Columnbeschriftungen hast.

Sorry, da hab' ich wohl "Text" und "Name" verwechselt...

Zitat:

Zitat von richard_boderich
Apropo mehrzeiligen Text im VST. Hast du zufällig eine Lösung wie ich mehrzeiligen Text bei fester Rowheight horizontal in der Zelle zentrieren kann?

Wenn ich mich recht erinnere, hab' ich sowas mal gemacht...
Auch das kann ich aber erst heut' Abend nachschauen...

toms 8. Sep 2008 13:07

Re: VST.ColumnHeaders kein property "Name" unterst
 
Hallo Richard, die Tag Eigenschaft kannst du ohne Probleme verwenden. Ist ja ein "Published Property"

OG Karotte 8. Sep 2008 19:27

Re: VST.ColumnHeaders kein property "Name" unterst
 
Zitat:

Zitat von richard_boderich
Apropo mehrzeiligen Text im VST. Hast du zufällig eine Lösung wie ich mehrzeiligen Text bei fester Rowheight horizontal in der Zelle zentrieren kann?

Hat ein wenig länger gedauert und mein Ansatz bezog sich damals nur auf den Spaltenkopf, es sollte aber auch genauso für die einzelne Zelle gehen (ungetestet, aus meinem "Originalcode" übernommen und mit Sicherheit Überarbeitungsbedürftig) :wink: :

Delphi-Quellcode:
procedure TfrmMain.MyVSTBeforeCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node:
PVirtualNode; ItemRect: TRect; var CustomDraw: Boolean);

var
  S: WideString;
  MyData: PTMyNodeData;
  TheRect: TRect;

begin
  MyNodeData := Sender.GetNodeData(Node); // Daten holen
  S := System.Copy(MyNodeData.Text, 1, Length(MyNodeData.Text)); // Text holen
  // <-- hier Berechnung für TheRect (Ausmasse der zubefüllenden Zelle; müsste ItemRect entspr.) einfügen
  Windows.DrawTextW(TargetCanvas.Handle, PWideChar(S), Length(S),
                    TheRect, DT_EXPANDTABS or DT_SINGLELINE or DT_END_ELLIPSIS or
                    DT_CENTER or DrawTextBiDiModeFlagsReadingOnly); // Text ausgeben (DT_CENTER => Zentriert im 'TheRect')
  CustomDraw := True; // Damit der VST die Zelle nicht nochmal zeichnet ???
end;
Hoffe das war es, was Du meintest ???


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