Agregue un botón de velocidad sobre un TCustomRichEdit

Estoy tratando de crear un TCustomRichEdit con algunos botones de velocidad encima. ¿Cómo puedo lograr este comportamiento? La altura del componente debe ser los botones + richedit.

[B][I][U]
+-------+
|A1REdit|
|       |
+-------+

Actualmente tengo el siguiente código:

private
  FBoldButton: TSpeedButton;

constructor TA1RichEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FBoldButton := TSpeedButton.Create(Self);
  FBoldButton.Parent := Self;
end;

destructor TA1RichEdit.Destroy;
begin
  FreeAndNil(FBoldButton);

  inherited;
end;

Esto pinta el botón de velocidad en richedit (porque richedit es el principal), necesito que el botón esté encima de richedit. Richedit no se pinta a sí mismo como debería ser después de este fragmento de código.

preguntado el 12 de junio de 12 a las 15:06

Haz un panel con richedit y botones como childs -

TToolbar suena como la solución correcta para mí. Pero no puede usar richedit como padre de la barra de herramientas (o botones). Necesita otro contenedor, por ejemplo, panel, más barra de herramientas (alTop) y luego edición enriquecida (alClient). -

¡Usar un panel como contenedor era de hecho la solución que estaba buscando! La barra de herramientas tiene toda la funcionalidad que necesito, así que voy a usar ese enfoque :) -

2 Respuestas

Utilizar TToolbar.

También ponga un TImageList y TActionList en su formulario.

Asigne ImageList a su ActionList y ToolBar.

Luego, puede agregar algunas de las llamadas acciones estándar a su lista de acciones (el menú desplegable en el botón "Nueva acción").

En los Format categoría que encontrarás TRichEditBold, TRichEditItalic y TRichEditUnderline. Selecciónelos y haga clic OK.

Luego agrega 3 botones de herramientas a su barra de herramientas y les asigna sus acciones.

Todo, como el estado presionado cuando se selecciona algo que tiene este estado y se configura automáticamente en negrita, cursiva o subrayado, se manejará sin escribir ningún código.

Respondido el 12 de junio de 12 a las 16:06

Creo (según el nombre de la clase en el código proporcionado) que la pregunta es sobre la creación de un componente con una barra de herramientas encima de una edición enriquecida). No votando negativamente, pero creo que has leído mal la pregunta. :-)- Ken White

No leí mal, pero mi sugerencia es hacerlo así en lugar de agregar los botones al editor enriquecido porque en realidad no hay ningún beneficio. Usar un marco como señaló Warren hace el trabajo bastante bien y se comporta como un componente. - Stefan Glienke

De hecho, esta no es la respuesta a mi pregunta, sino la mejor solución para mi problema. Voy a hacerlo así :) - A1rPun

Después de recorrer unas pocas millas por este camino, y perder algo de cabello, y tener algunas noches de insomnio luchando contra TRichEdit, es posible que desee deshacerse de todo e ir a ver TRichView. De hecho, funciona todo el tiempo, a diferencia de TRichEdit. trichview.com - Warren P

Considere hacer un Marco. Un marco es la forma habitual de hacer "controles compuestos" y no requiere ninguna codificación, en su caso se puede hacer solo con el diseñador de formularios y el inspector de propiedades.

Haga clic en Archivo -> Nuevo -> Marco (es posible que deba hacer clic en Archivo -> Nuevo -> otro y luego busque el marco si aún no está en su menú de elementos nuevos).

Ahora agregue los botones y Rich Edit. Establezca los anclajes en Rich Edit en Arriba + Izquierda + Derecha + Abajo (los cuatro activados).

Ahora puede colocar este "marco" en cualquier lugar de su aplicación y actuará como un único control.

Lo que no me gusta de los marcos es que no se puede impedir que alguien que crea una instancia de un marco edite su diseño; de forma predeterminada, se les permite mover los controles dentro del marco y agregar más controles, y esto es, de hecho, amable de un dolor sobre Marcos.

Un segundo enfoque que podría considerar es un "control compuesto". Herede de TPanel y agregue Rich Edit y sus botones, escribiéndolo todo en código. El código de altura y diseño es tuyo para escribir como quieras. La diferencia entre eso y lo que ha sugerido, es que está tratando de hacer que Rich Edit contenga otros controles, lo que, como dijo claramente David, no es posible.

Respondido el 13 de junio de 12 a las 02:06

Creo que la pregunta es sobre la creación de un componente (no un marco), según el nombre de la clase en el código de muestra. Un marco es genial, pero no es un reemplazo para un componente en todos los casos. - Ken White

Gracias Warren por otra solución;) - A1rPun

Acordado. Pero tal vez el usuario realmente quiera una reutilización similar a la de un componente, que es para lo que se crearon los marcos. Creación visual de "componentes compuestos" hechos de varios componentes visuales individuales (controles). - Warren P

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.