Delphi VirtualTreeview.OnAfterItemPaint Ausgabe beim Scrollen?
-
19-09-2019 - |
Frage
Ich erhalte Fragen Zeichnung mit OnAfterItemPaint Ereignis, wenn das horizontale Scrollen durchgeführt wird.
Im Grunde, was ich will ausgewählten Zellen ist die Verschmelzung von Effekt erreichen, sagen wir zum Beispiel 1 Text für Spalte 1 & 2, einen anderen Text für die Spalte 3 und 4, etc ... Bisher VT hat keine Unterstützung für Spalte Verschmelzung, also muss ich es manuell ziehen.
Gibt es eine Abhilfe oder ein anderes Ereignis, dass ich stattdessen verwenden sollte?
Mit: Delphi 7 + VirtualTreeView 4.8.5
Ereignisquelle:
begin
TargetCanvas.TextOut(ItemRect.Left+ VT1.OffsetX, ItemRect.Top,
'1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF');
end;
Vor der Taste:
alt text http://a.imagehost.org/0869/screen1.gif
Nach blättern (Scroll rechts, dann Nach links):
Lösung
Es ist schwer zu sagen, was Sie erreichen wollen, aber zu sehen, dass Sie einen langen Text haben, dass Spannweiten mehr Spalten Ich bin mir nicht sicher, dass Sie das richtige Ereignis verwenden - in der Regel Du Text abgeschnitten werden soll, wenn es für seine Spalte zu lang ist .
Wie auch immer, das Beste ist, Abschnitt 5.2 „Male Zyklen und Phasen“ in dem VirtualTreeView.pdf Dokumentationsdatei, und finden Sie die richtige Veranstaltung für verwendet werden, was Sie malen wollen. Für OnAfterItemPaint
heißt es:
Die nach Artikel Lackstufe wird verwendet, Knoten spezielle Sachen wie Frames hinzufügen und dergleichen die Sorge um alle Spalten dieses Knotens und wird einmal pro Knoten genannt.
so dass ich denke, es ist wahrscheinlich nicht die, die Sie verwenden möchten.
Edit:
OK, wenn Sie sich für die Verschmelzung von Zellen gehen Sie brauchen nur die Zugabe von VT1.OffsetX
zu entfernen (und fügen Sie VT1.TextMargin
statt), um das richtige Verhalten zu erhalten. Dies setzt voraus, natürlich können Sie die Textausgabe in der ersten (Index 0) Spalte beginnen sollen, andernfalls müssen Sie die horizontale Textposition von den Spaltenbreiten berechnen.
Aber aus der Beschreibung der Farbstufen noch würde ich eher das BeforeItemPaint
Ereignis verwenden und die CustomDraw
var-Parameter auf True
gesetzt jede Standard-Malerei zu überspringen.
Andere Tipps
Haben Sie versucht, diese:
TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];
Es tut ziemlich viel, was Sie brauchen. Sie könnten nur Problem sein, dass Sie nicht angeben können, welche Spalten für aktiviert ist. Sie können sich wahrscheinlich dies durch Einschränkung umgehen, indem Sie den Celltext zu einem Leerzeichen für die Spalten Setzen Sie nicht in zu Spanne wollen.