Ho implementato un auto-coltivazione TMemo come un bel esempio di LiveBindings (uno dei pochi esempi utili potevo venire con per LiveBindings in VCL).
una citazione da mia Delphi XE2 Development Essentials manuale didattico:.
"Per costruire questo esempio, posizionare un componente TMemo su una forma VCL, aprire la proprietà LiveBindings, e selezionare l'opzione‘Nuovo LiveBinding’Scegli il . TBindExpression scelta Aprire BindExpressionMemo11 nel Inspector e impostare SourceComponent a Memo1 e SourceExpression a Lines.Count * 22. per ottenere un risultato migliore in fase di esecuzione, impostare SourceExpression l'espressione più precisa
Font.Size - 4 + (Lines.Count + 1) * -1 * (Font.Height - 3)
Infine, nel gestore eventi OnChange del TMemo, scrivere una riga di codice:
BindingsList1.Notify (Sender, '');
Questo è tutto. Compilati e corri a vedere il promemoria crescente in azione.alta
[Schermate]
Inizialmente, il controllo TMemo sarà due righe (la riga con i contenuti, e una linea successiva), e ogni volta che ha colpito entrare o word wrapping noi avanza alla riga successiva, la controllo TMemo crescerà in altezza (in crescita verso il basso in realtà, in modo da assicurarsi di lasciare sufficiente spazio sul modulo per la TMemo di espandersi) "
Groetjes, Bob Swart
fonte
2011-11-04 14:49:35
Avrei dovuto pensarci. Sono troppo abituato a lavorare con TStringLists, che fanno interruzioni di riga in CRLF, che non mi è mai venuto in mente che la proprietà WordWrap avrebbe effettivamente messo linee avvolte su stringhe .Lines diverse. Grazie! –
Font.Height contiene un numero negativo che conta il numero di pixel in una riga di testo. Puoi anche chiamare Canvas.TextExtent per calcolare l'altezza del testo. –