Добавьте кнопку скорости над TCustomRichEdit

Я пытаюсь создать TCustomRichEdit с несколькими кнопками скорости над ним. Как я могу выполнить это поведение? Высота компонента должна быть равна кнопкам + RichEdit.

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

В настоящее время у меня есть следующий код:

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;

Это рисует кнопку скорости на RichEdit (поскольку RichEdit является родителем), мне нужно, чтобы кнопка была выше RichEdit. RichEdit не рисует себя так, как должен после этого фрагмента кода.


person A1rPun    schedule 12.06.2012    source источник
comment
Создайте панель с RichEdit и кнопками в качестве дочерних элементов.   -  person whosrdaddy    schedule 12.06.2012
comment
TToolbar звучит как правильное решение для меня. Но вы не можете использовать richedit в качестве родителя панели инструментов (или кнопок). Вам нужен другой контейнер, например. панель плюс панель инструментов (alTop), а затем расширенное редактирование (alClient).   -  person David Heffernan    schedule 12.06.2012
comment
связанные: stackoverflow.com/questions /10902749/   -  person Warren P    schedule 13.06.2012
comment
Использование панели в качестве контейнера было именно тем решением, которое я искал! Панель инструментов имеет все необходимые мне функции, поэтому я собираюсь использовать этот подход :)   -  person A1rPun    schedule 13.06.2012


Ответы (2)


Используйте TToolbar.

Также поставьте TImageList и TActionList в форму.

Назначьте ImageList вашему ActionList и ToolBar.

Затем вы можете добавить некоторые так называемые стандартные действия в свой список действий (выпадающее меню на кнопке «Новое действие»).

В категории Format вы найдете TRichEditBold, TRichEditItalic и TRichEditUnderline. Выберите их и нажмите OK.

Затем вы добавляете 3 кнопки инструментов на панель инструментов и назначаете им свои действия.

Все, например состояние нажатия, когда выбрано что-то, имеющее это состояние и автоматически устанавливающее полужирный, курсивный или подчеркнутый шрифт, будет обрабатываться без написания какого-либо кода.

person Stefan Glienke    schedule 12.06.2012
comment
Я думаю (исходя из имени класса в предоставленном коде), что вопрос заключается в создании компонента с панелью инструментов над RichEdit). Не отрицаю, но я думаю, что вы неправильно прочитали вопрос. :-) - person Ken White; 13.06.2012
comment
Я не ошибся, но я предлагаю сделать это так, а не добавлять кнопки в сам RichEdit, потому что на самом деле в этом нет никакой пользы. Использование фрейма, как указал Уоррен, довольно хорошо справляется со своей задачей и ведет себя как компонент. - person Stefan Glienke; 13.06.2012
comment
Это действительно не ответ на мой вопрос, а лучшее решение моей проблемы. Я собираюсь сделать это так:) - person A1rPun; 13.06.2012
comment
После того, как вы проедете несколько миль по этой дороге, потеряете несколько волос и проведете несколько бессонных ночей, сражаясь с TRichEdit, возможно, вы захотите бросить все это и посмотреть на TRichView. Это на самом деле работает все время, в отличие от TRichEdit. trichview.com - person Warren P; 14.06.2012

Подумайте о том, чтобы сделать рамку. Фрейм — это обычный способ создания «составных элементов управления», не требующий никакого кодирования, в вашем случае это можно сделать только с помощью конструктора форм и инспектора свойств.

Нажмите «Файл» -> «Создать» -> «Фрейм» (возможно, вам придется нажать «Файл» -> «Создать» -> «Другое», а затем найти фрейм, если его еще нет в вашем меню новых элементов).

Теперь добавьте кнопки и Rich Edit. Установите якоря в расширенном редактировании на верх + левый + правый + нижний (все четыре включены).

Теперь вы можете разместить этот «фрейм» в любом месте вашего приложения, и он будет действовать как единый элемент управления.

Что мне не нравится во фреймах, так это то, что вы не можете запретить тому, кто создает экземпляр фрейма, редактировать его макет, по умолчанию им разрешено перемещать элементы управления внутри фрейма и добавлять дополнительные элементы управления, и это на самом деле мило. боли о фреймах.

Второй подход, на который вы могли бы обратить внимание, - это "составной элемент управления". Унаследуйте от TPanel и добавьте RIch Edit и свои кнопки, написав все это в коде. Код высоты и макета вы можете написать так, как вам нравится. Разница между этим и тем, что вы предложили, заключается в том, что вы пытаетесь заставить Rich Edit содержать другие элементы управления, что, как ясно сказал Дэвид, невозможно.

person Warren P    schedule 13.06.2012
comment
Я думаю, что речь идет о создании компонента (а не фрейма) на основе имени класса в примере кода. Рама — это здорово, но не во всех случаях она заменяет компонент. - person Ken White; 13.06.2012
comment
Спасибо Уоррен за другое решение;) - person A1rPun; 13.06.2012
comment
Согласованный. Но, возможно, пользователь на самом деле хочет повторного использования компонентов, для чего и были созданы фреймы. Визуальное создание составных компонентов из нескольких отдельных визуальных компонентов (элементов управления). - person Warren P; 13.06.2012