Изменить шрифт в середине заголовка вкладки

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

Я хочу указать в заголовке вкладки, что страница, связанная с вкладкой, имеет контент. Если на странице есть контент в dbgrid, я хочу следовать за заголовком с обмоткой, представленной буквой n, которая отображается в виде прямоугольника. Так что теперь вместо заголовка «История пациента» будет написано «История пациента» + небольшое заполненное поле.

Поскольку символ представляет собой букву «n» с типом шрифта «крыло», я хочу изменить тип шрифта в середине подписи и добавить букву «n», в результате чего в конце подписи появится небольшое заполненное поле.

Tabsheet.caption := 'Patient History ' + changefonttypetowinding + 'n'.

Выполнимо?


person Donald Adams    schedule 05.03.2011    source источник
comment
Подобные вещи отлично работают с Unicode (Delphi 2009+).   -  person Andreas Rejbrand    schedule 05.03.2011
comment
Рекомендация: если вы не готовы перейти на Unicode, воспользуйтесь простым предложением Андреаса использовать *. Если это работа по контракту, скажите им, что черный квадрат может выглядеть хорошо, если они заплатят вам за переход на DelphiXE (укажите примерную стоимость). Они также могут получить его, если не возражают против того, чтобы это выглядело забавно, с решением для розыгрыша владельца. Или они могут получить * прямо сейчас без дополнительных затрат.   -  person Chris Thornton    schedule 05.03.2011


Ответы (2)


Здесь вы находитесь на территории, которую может привлечь владелец, и это не совсем тривиально, если принять во внимание темы. Если вы пойдете по этому пути, я бы не стал возиться с Wingdings, я бы просто покрасил коробку в TCanvas.FillRect.

Лично я бы посмотрел на Unicode Delphi и использовал U + 2587 (▇) или один из его друзей.

person David Heffernan    schedule 05.03.2011
comment
Должно быть два ответа, так как здесь есть два совершенно разных решения. И я бы проголосовал за каждого... ;-› - person Chris Thornton; 05.03.2011
comment
@Chris Очень мило, что ты так сказал! На самом деле я бы не рассматривал ничего, кроме U + 2587! - person David Heffernan; 05.03.2011

Поскольку вы не используете версию Delphi с поддержкой Unicode, вы ограничены рисованием владельцем или набором символов "ANSI", как указал Дэвид. (Я предлагаю вам перейти на Delphi 2009+. Unicode — это лучшее, что когда-либо случалось с цифровым миром. С Unicode вы получаете десятки тысяч символов (теоретически, на шрифт!) вместо 127 или 255. Это включает в себя всевозможные языки, а также технические и математические символы и различные дингбаты.Есть даже бензольное кольцо: U+232C БЕНЗОЛЬНОЕ КОЛЬЦО: ⌬)

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

Если вы очень, очень хотите черный квадрат, тогда вы должны сделать рисунок владельца. Вы можете сделать это следующим образом:

// Please don't do this -- see comments below
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
const
  Padding = 8;
  SqSize = 6;
var
  capt: string;
  r: TRect;
begin
  capt := TTabControl(Control).Tabs[TabIndex];
  r := Rect;
  r.Left := r.Left + Padding;
  DrawText(Control.Canvas.Handle, capt, length(capt), r, DT_SINGLELINE or DT_LEFT or DT_VCENTER or DT_END_ELLIPSIS);
  r.Left := r.Right - Padding - SqSize;
  r.Right := r.Left + SqSize;
  r.Top := (r.Bottom - r.Top - SqSize) div 2;
  r.Bottom := r.Top + SqSize;
  FillRect(Control.Canvas.Handle, r, GetStockObject(BLACK_BRUSH));
end;

Обратите внимание, однако, что это отключит визуальные темы! Это будет выглядеть ужасно! Пожалуйста, не делайте этого!

person Andreas Rejbrand    schedule 05.03.2011
comment
+1 Я знал, что вы не сможете устоять перед искушением написать какой-нибудь код, который рисует владелец!! - person David Heffernan; 05.03.2011
comment
+1 за код. Однако я бы добавил один или два дополнительных голоса, если бы мог, за последнюю строку вашего ответа. Отрисовка владельца уродлива с включенными темами, если вы не знаете, что делаете. - person Ken White; 05.03.2011
comment
@ Дэвид, ты меня знаешь! Но на этот раз это больше иллюстрирует, почему вы не должны пытаться нарисовать его владельцем. - person Andreas Rejbrand; 05.03.2011