Domanda

Sono sempre problemi di disegno utilizzando OnAfterItemPaint evento quando viene eseguita scorrimento orizzontale.

Fondamentalmente quello che voglio ottenere è la fusione di cellule effetto selezionato, diciamo per esempio 1 del testo per la colonna 1 e 2, un altro testo per la colonna 3 e 4, ecc ... Finora VT non ha alcun supporto per colonna di fusione, quindi devo disegnare manualmente.

C'è una soluzione o di un altro evento che dovrei usare, invece?

Utilizzo: Delphi 7 + VirtualTreeview 4.8.5

Origine evento:

begin
  TargetCanvas.TextOut(ItemRect.Left+ VT1.OffsetX, ItemRect.Top,
    '1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF');
end;

Prima di scorrimento:

alt text http://a.imagehost.org/0869/screen1.gif

Dopo scorrimento (Scorri a destra, poi Scorri a sinistra):

alt text http://a.imagehost.org/0645/screen2.gif

È stato utile?

Soluzione

E 'difficile dire che cosa si vuole raggiungere, ma visto che avete un lungo testo che si estende su più colonne io non sono sicuro che si utilizza l'evento corretto - di solito si desidera che il testo deve essere troncato se è troppo lungo per la sua colonna .

In ogni caso, la cosa migliore è quello di leggere la sezione 5.2 "cicli di verniciatura e stadi" nel VirtualTreeView.pdf file di documentazione, e trovare l'evento corretto da utilizzare per ciò che si vuole dipingere. Per OnAfterItemPaint si afferma:

  

Il dopo la tappa di vernice voce è utilizzata per aggiungere cose specifiche nodo come cornici e simili   che riguardano tutte le colonne di quel nodo ed è chiamata una volta per ogni nodo.

quindi credo che è probabilmente non quello che si desidera utilizzare.

Modifica

OK, se si sta andando per la fusione di cellule è sufficiente rimuovere l'aggiunta di VT1.OffsetX (e aggiungere VT1.TextMargin invece) per ottenere il comportamento corretto. Questo presuppone, naturalmente, si desidera avviare l'output di testo nella prima colonna (indice 0), altrimenti si deve calcolare la posizione del testo orizzontale dal la larghezza delle colonne.

Ma dalla descrizione delle fasi di verniciatura ho ancora preferisco usare l'evento BeforeItemPaint e impostare il parametro CustomDraw var a True a saltare qualsiasi pittura di default.

Altri suggerimenti

Hai provato questo:

TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];

Si fa più o meno quello che ti serve. Essi unico problema potrebbe essere che non è possibile specificare quali colonne è abilitata per. Probabilmente si può aggirare questo limite impostando la celltext ad uno spazio bianco per le colonne che non si vuole estendersi in.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top