Почему я не могу установить шрифты на TSpeedButtons в Delphi 7 с включенными темами? - PullRequest
1 голос
/ 19 октября 2010

Происходит очень странная вещь:

У меня была целая куча TFrame (возможно, это TCustomFrame, не помню, потому что я сделал промежуточный класс между 40 нечетными кадрами и родительским), который я наследовал, чтобы составить часть конфигурации «действительно крутого» Редактор формул HL7. Что было странно, но не в том, что DFM в кадре продолжал добавлять OldCreateOrder, PixelsPerInch и TextHeight в DFM, хотя я никогда не реализовывал эти свойства в базовом классе.

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

Итак ... Я избавился от всех своих DFM, я изменил все кадры на панели, и все работает нормально (на моем компьютере под управлением XP в ВМ без тем), , но для моего коллеги, чтобы Слева от меня (собственно под управлением Windows 7) не имеет значения, что я делаю с TSpeedButtons на этих панелях, у них всегда один и тот же шрифт Sans 10pt Bold, который будет работать, но у меня есть некоторые странные символы для операций над множествами, которые Я хотел бы сохранить и CalcTextWidth полностью не удается.

Я пробовал:

  • ParentFont := true and false;
  • Flat := true and false;
  • Parent.Font := Whatever;

Достаточно сказать, что я попробовал все старые трюки. Единственное, что работает, это просто удаление XP Manifest (я уже упоминал, что это Delphi 7). И это не вариант, потому что когда-нибудь в этом году мы собираемся перенести все на D2009, и это ... не будет вариантом!

Редактировать

Действительно странная вещь в том, что, используя TFrame и DFM, он работает (даже с древним компилятором). Использование TPanel не работает.

Должно быть некоторое различие между темами на TPanel (или TCustomPanel, которые не работали) и темами на TFrame.

Кроме того, у меня есть TGroupBox между кнопками и панелью TPanel. Может быть, это вызывает проблему. Я мог бы изменить это довольно легко.

Редактировать 2

использует кнопки, extctrls, stdctrls

(для Delphi 7 поместите XPManifest в форму)

procedure TForm1.FormCreate(Sender: TObject);
var
  Panel : TPanel;
  Grp : TGroupBox;
  Btn : TSpeedButton;
begin
  Panel := TPanel.Create(Self);
  Panel.Parent := self;
  Panel.Align := alClient;

  Grp := TGroupBox.Create(Panel);
  Grp.Parent := Panel;
  Grp.Align := alClient;

  Btn := TSpeedButton.Create(Grp);
  Btn.Parent := Grp;

  Btn.Width := 117;
  Btn.Font.Name := 'Symbol';
  Btn.Caption := 'Here is some text';


end;

В Windows XP отлично, пробовал на 2008 Server R2 и просто показывает жирный шрифт без шрифта.

Я пробовал это без групповой рамки между ними, и, похоже, это работает.

(работа с фреймом работает, но слишком много кода для публикации)

Ответы [ 4 ]

2 голосов
/ 19 октября 2010

Delphi 7 был выпущен в августе 2002 года. Vista вышла в 2007 году, а Windows 7 - в 2009 году. Я думаю, что система компилятора и разработки от 2002 года будет работать со всеми новыми возможностями Vista / 7 - это немногоожидать.Обновите, и вы, вероятно, увидите, что все работает.

Конечно, обновление компилятора, особенно для большого приложения, никогда не бывает легким.

Я чувствую к вам, но я бы не назвал этоошибка в VCL.

1 голос
/ 19 октября 2010

Я постараюсь сначала ответить на этот вопрос для вас:

Что было странно, но не в точку, было то, что DFM на раме держался на добавление OldCreateOrder, PixelsPerInch и TextHeight в DFM, хотя Я никогда не реализовывал эти свойства в базовом классе.

Это может быть связано либо с

  1. Наследование фреймов (ваш файл DFM содержит неправильное ключевое слово: object вместо inherited, см. это сообщение в блоге )

  2. Ваш файл .DPR, в котором комментарий позади вашего блока Frame является неправильным (комментарий на самом деле не является комментарием, это подсказка IDE Delphi, чтобы сказать ему, какой конструктор фреймов, форм или модулей данных ему нужно выбрать )

Дайте нам знать, если это поможет; затем сосредоточьтесь на проблеме TSpeedButton.

- Йерун

0 голосов
/ 20 октября 2010

ОК, вот ответ, который сработал:

groupbox.ParentBackground := false

Не уверен, почему фон группового блока меняет передний план кнопки скорости.

0 голосов
/ 19 октября 2010

Хорошо, я напишу ответ на свой вопрос, потому что сегодняшний ответ не является обновлением.

Просто переопределите функцию Paint в TSpeedButton, вы все равно не будете использовать ее в форме.

Затем, когда вы, наконец, обновите все 12 миллионов строк кода до D2009, если проблема возникнет снова, вы можете оставить этот код в качестве одной из тех функций классного вспомогательного класса, если вам не нужен подкласс TSpeedButton.

...