Происходит очень странная вещь:
У меня была целая куча 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 и просто показывает жирный шрифт без шрифта.
Я пробовал это без групповой рамки между ними, и, похоже, это работает.
(работа с фреймом работает, но слишком много кода для публикации)