Как изменить выбранный текстовый атрибут на жирный в TMemo в delphi 7?

Я использую TMemo для отображения нескольких строк.

Я хочу изменить атрибут выбранного текста в TMemo на полужирный, используя сочетание клавиш Ctrl+B.

Например, пользователь вводит «Привет, как дела?» в Tmemo я хочу, чтобы, когда пользователь выбирает «Как» и нажимает Ctrl + B, тогда только «Как» должно отображаться жирным шрифтом в этом TMemo.

Я использую Делфи 7.

Пожалуйста, совет, чтобы получить решение. Спасибо за помощь.


person Nalu    schedule 26.12.2011    source источник
comment
TMemo не поддерживает это из коробки, и для этого потребуется много работы. Возможно, вам лучше переключиться на TRichEdit и научиться работать с его форматированием.   -  person Marjan Venema    schedule 26.12.2011
comment
Никак не могу заставить TMemo сделать это. Тривиально с TRichEdit.   -  person David Heffernan    schedule 26.12.2011
comment
Любой намек, чтобы сделать это возможным с помощью TRichEdit? Благодарность   -  person Nalu    schedule 26.12.2011
comment
Я могу установить шрифт жирным шрифтом с помощью RichEdit. Может ли кто-нибудь помочь мне установить горячую клавишу Ctrl + B для вызова процедуры xyz.   -  person Nalu    schedule 26.12.2011
comment
@DavidHeffernan: Вы, наверное, правы. Я оставил эту возможность открытой, потому что набор компонентов TMS имеет подсветку, доступную в его компонентах заметок, и я не знал их происхождения навскидку. Проверил. Они происходят прямо из TCustomControl...   -  person Marjan Venema    schedule 26.12.2011
comment
@naren О горячей клавише попробуйте это на OnKeyDown событии if (((GetKeyState(VK_control) AND 128)=128) AND (key=Ord('B'))) then begin //ur procedure end;   -  person Shirish11    schedule 26.12.2011


Ответы (2)


Вы не можете форматировать текст в элементе управления заметками. Вам нужен расширенный контроль редактирования, TRichEdit.

Чтобы сделать текущий выбор жирным, вы делаете это:

RichEdit.SelAttributes.Style := RichEdit.SelAttributes.Style + [fsBold];

Предпочтительный способ вызова кода в ответ на сочетание клавиш, такое как CTRL+A, — использовать действия. Добавьте TActionList в форму и добавьте действие в этот список действий. Настройте обработчик событий OnExecute действия так, чтобы он указывал на код, выполняющий выделение выделенного текста полужирным шрифтом. Установите для свойства Shortcut значение Ctrl+A. Используйте действия, чтобы централизованно управлять пользовательскими событиями. Обычно также может быть кнопка инструмента, пункт меню и пункт контекстного меню, которые выполняют одно и то же действие, и именно здесь действия вступают в свои права.

person David Heffernan    schedule 26.12.2011

Вот часть написанной мной программы, использующей RichEdit; часть строки отображается черным цветом, часть синим и, возможно, частью жирным красным цветом. «Текст» — это поле RichEdit.

procedure TWhatever.InsertText (const atext, btext, ctext: string);
begin
 with RichEdit1 do
  begin
   selstart:= length (text);
   sellength:= 0;
   SelAttributes.Color:= clBlack; 
   seltext:= '[' + atext + '] ';

   selstart:= length (text);
   sellength:= 0;
   SelAttributes.Color:= clBlue;
   seltext:= btext + ' ';

   if ctext <> '' then
    begin   // trap non-existent answers
     selstart:= length (text);
     sellength:= 0;
     SelAttributes.Color:= clRed;
     SelAttributes.Style:= [fsBold];
     seltext:= ctext + ' ';
     SelAttributes.Style:= [];
    end;
   lines.add ('');  // new line
  end;
end;
person No'am Newman    schedule 26.12.2011
comment
Я могу установить шрифт жирным шрифтом с помощью RichEdit. Может ли кто-нибудь помочь мне установить горячую клавишу Ctrl + B для вызова процедуры xyz. - person Nalu; 26.12.2011
comment
Почему в этом ответе нет жирного шрифта? - person David Heffernan; 26.12.2011
comment
@David: Потому что я не заметил в вопросе «жирного шрифта»! Я отредактирую свой ответ. - person No'am Newman; 27.12.2011
comment
Чтобы заставить Ctrl + B работать как ярлык, я бы рекомендовал использовать TActionManager или TActionList для ваших событий (действий). Поместите свойство ярлыка в Ctrl + B, тогда, когда вы нажмете это на клавиатуре, ваше действие/событие сработает. - person ; 11.03.2012