he implementado un auto-crecimiento TMemo como un buen ejemplo de LiveBindings (uno de los pocos ejemplos útiles que podría subir por LiveBindings en VCL).
una cita de mi Delphi XE2 Desarrollo Fundamentos Manual didáctico:.
"Para construir este ejemplo, colocar un componente TMemo en un formulario VCL, abra la propiedad LiveBindings, y seleccione la opción‘Nueva LiveBinding’Escoge . TBindExpression elección abierta BindExpressionMemo11 en el inspector de objetos y establecer SourceComponent a Memo1 y SourceExpression a Lines.Count * 22. para obtener un mejor resultado en tiempo de ejecución, establecido SourceExpression a la expresión más exacta
Font.Size - 4 + (Lines.Count + 1) * -1 * (Font.Height - 3)
Finalmente, en el controlador de eventos OnChange del TMemo, escriba una línea de código:
BindingsList1.Notify (Sender, '');
Eso es todo. Compila y ejecuta para ver el memo creciente en acción.
[pantalla]
Inicialmente, el control TMemo será de dos líneas de alta (la línea con el contenido, y una línea siguiente), y cada vez que pulsa enter o el ajuste de texto nos avanza a la siguiente línea, la Control TMemo crecerá en altura (crece hacia abajo en realidad, así que asegúrese de dejar suficiente espacio en el formulario para el TMemo se expanda en sí) "
Groetjes, Bob Swart
Debería haberlo pensado. Estoy demasiado acostumbrado a trabajar con TStringLists, que realizan saltos de línea en CRLF, que nunca se me ocurrió que la propiedad WordWrap en realidad pondría líneas envolventes en diferentes cadenas .Lines. ¡Gracias! –
Font.Height tiene un número negativo que cuenta el número de píxeles en una línea de texto. También podría llamar a Canvas.TextExtent para calcular el alto del texto. –