Как я могу изменить ориентацию метки на TPageControl? - PullRequest
3 голосов
/ 20 апреля 2009

Я новичок в Delphi (опять же - я использовал Delphi еще в 1994 году). У меня сейчас Delphi 2009 Pro.

Исходя из Java, я нахожу наследование объекта очень неясным.

Моим пользователям нужны страницы с вкладками с вкладками слева. Но TPageControl не позволяет изменять направление или ориентацию ярлыка вкладки. Они хотят, чтобы слова на вкладках читались сверху вниз с повернутыми буквами, чтобы они находились в «нормальной» ориентации. С помощью вкладок слева надписи читаются снизу вверх, а буквы повернуты на 90 градусов. слева, и есть тенденция наклонить голову влево, чтобы прочитать вкладки. Я обнаружил несколько улучшений стандартного TPageControl VCL, которые добавляют изображения, текст и изменения цвета для наведения и активного, но ничего, что позволяет управлять направлением или ориентацией шрифта на вкладках.

Таблицы управления страницей должны выглядеть примерно так:

P
а
г
е
1

P
а
г
е
2

P * * тысяча двадцать-один а
г
е
3

И так далее ...

Ответы [ 3 ]

8 голосов
/ 20 апреля 2009

1.) Установить свойства TPageControl:

TabPosition := tpLeft;
OwnerDraw := True;
TabWidth := 180;    //set to any adequate value because
                    // TPageControl doesn't have a measure event handler 

2.) Используйте следующий код OnDrawTab:

procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
  I: Integer;
  PageControl: TPageControl;
  TextFormat: TTextFormat;
  Text: string;
  TextRect: TRect;
begin
  PageControl := Control as TPageControl;

  Text := PageControl.Pages[TabIndex].Caption;

  for I := Length(Text) - 1 downto 1 do
  begin
    Text := Copy(Text, 1, I) + sLineBreak + Copy(Text, I+1, MaxInt);
  end;

  TextRect := Rect;
  TextRect.Left := TextRect.Left + 5;
  TextRect.Top := TextRect.Top + 3;

  TextFormat := [tfCenter];

  PageControl.Canvas.TextRect(
    TextRect,
    Text,
    TextFormat
    );
end;

3.) Скомпилируйте, начните и наслаждайтесь !

1 голос
/ 20 апреля 2009

Не столько самодельный ответ, но также хотел бы отметить, что Delphi - это основанная на компонентах платформа разработки, и есть несколько сторонних элементов управления VCL, которые предлагают некоторые очень гибкие опции в элементах управления рендерингом и темами.

Те, которые я использовал сам и рекомендовал бы:

  • Raize Controls .
  • JVCL Содержит лодку с множеством элементов управления и с открытым исходным кодом (лицензия MPL).

HTH и удачи

0 голосов
/ 20 апреля 2009

Как сказал Рентген: Вам нужно, чтобы владелец нарисовал вкладки. Это не так уж сложно, я делал это раньше, но у меня нет готового кода для публикации. Вам нужно получить холст вкладки и использовать метод TextOut.

...