Найден баг в DelphiXE2 (Update3) VCL - хочется его как-нибудь обойти. Описание:
Берём простую форму:
| Код | unit Unit1;
interface
uses Winapi.Windows, Forms, Vcl.Menus, Vcl.XPStyleActnCtrls, System.Classes, Vcl.ActnPopup;
type TForm1 = class(TForm) PopupActionBar1: TPopupActionBar; procedure FormClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormClick(Sender: TObject); begin PopupActionBar1.Items.Add(TMenuItem.Create(nil)); PopupActionBar1.Items[0].Caption := 'TEST'; //!!! PopupActionBar1.Items[0].Default := True; //!!! PopupActionBar1.Popup(400, 400); end;
end.
|
В свойствах проекта выбираем кастомный стиль - Application -> Appearance - и ставим его по умолчанию.
Запускаем проект и жмём по форме. Результат - Stack overflow.
Ошибка таится в недрах VCL:
| Код | procedure TCustomMenuItem.CalcBounds; var AWidth, AHeight: Integer; NewTextBounds: TRect; ImageSize: TPoint; ImageOffset: Integer; begin if (ActionClient <> nil) and ActionClient.Default then Font.Style := Font.Style + [fsBold]; // <--- тут вызовется CalcBounds опять т.к. происходит смена шрифта! inherited CalcBounds; ...
|
Есть ли соображения как можно сделать Default айтем, но избежать ошибки? |