Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Часть строки Hint'a выделить жирным


Автор: Delphist 6.4.2006, 15:16
Есть Hint в котором хранится строка. Как часть слов выделить жирным, а часть осавить по умолчанию. Желательно это сделать без Application.OnShowHint :=

Автор: Snowy 6.4.2006, 15:25
Самому рисовать. Через OnShowHint.
Штатных средств нет.

Автор: Delphist 6.4.2006, 17:15
Цитата(Snowy @ 6.4.2006, 15:25)
Самому рисовать. Через OnShowHint.
Штатных средств нет.

Примерчик не мог дать.

Автор: Snowy 6.4.2006, 19:59
Выбирай: http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&section=664

Автор: Snowy 6.4.2006, 23:07
Вот набросал небольшой пример.
Чтобы долго не возиться, реализовал только однострочные хинты.
Включить жирный - *. Отключить аналогично.
Hint = 'Этот *хинт*, местами *жирный*';
Код
unit SHint;

interface

uses
  Windows, Messages, SysUtils, Classes,
  Graphics, Controls, Forms;

type
  TSHint = class(THintWindow)
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    function CalcHintRect(MaxWidth: Integer; const AHint: string; AData: Pointer): TRect; override;
  end;

implementation

constructor TSHint.Create(AOwner: TComponent);
begin
  inherited;
  Canvas.Font.Name := 'Courier New';
end;

function TSHint.CalcHintRect(MaxWidth: Integer; const AHint: string; AData: Pointer): TRect;
begin
  result := inherited CalcHintRect(MaxWidth,
            StringReplace(AHint, '*', '', [rfReplaceAll]), AData);
end;

procedure TSHint.Paint;
var
  s: string;
  i, x: integer;
  b: boolean;
begin
  s := Caption; b := false; x := 1;
  for i := 1 to length(s) do
  begin
    if s[i] = '*' then b := not b
    else begin
      if b then Canvas.Font.Style := [fsBold]
      else Canvas.Font.Style := [];
      Canvas.TextOut(x, 1, s[i]);
      x := x + Canvas.TextWidth(s[i]) + 1;
    end;
  end;
  SendMessage(Handle, WM_NCPAINT, 0, 0);
end;

initialization
  HintWindowClass := TSHint;
end.

Для использования, просто подключить модуль к своей программе.

Автор: Delphist 7.4.2006, 12:44
Цитата(Snowy @ 6.4.2006, 23:07 Найти цитируемый пост)
Вот набросал небольшой пример.

А как сделать для многострочного hint'a
Добавлено @ 12:49
Цитата(Snowy @ 6.4.2006, 23:07 Найти цитируемый пост)
    x := x + Canvas.TextWidth(s[i]) + 1;

Не совсем красиво получается расположение букв.

Автор: Snowy 7.4.2006, 12:55
Уж как набросал.
Переделай, как тебе больше нравится.
Мне лениво дорабатывать.
Я всего лишь показал куда копать.
Дальше сам...

Автор: Sunvas 9.4.2006, 01:26
button1.Hint:='Первая строка'+#13+'вторая строка';

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)