type
TOpenTextFileDialogHelper=class helper for TOpenTextFileDialog
function GetPanel : TPanel;
end;
function TOpenTextFileDialogHelper.GetPanel: TPanel;
begin
Result:=Self.FPanel;
end;
然后你可以写一个方法来禁用Vcl样式,像这样:
procedure DisableVclStyles(const Control : TControl);
var
i : Integer;
begin
if Control=nil then
Exit;
Control.StyleElements:=[];
if Control is TWinControl then
for i := 0 to TWinControl(Control).ControlCount-1 do
DisableVclStyles(TWinControl(Control).Controls[i]);
end;
var
LRttiContext : TRttiContext;
LRttiField :TRttiField;
begin
LRttiContext:=TRttiContext.Create;
for LRttiField in LRttiContext.GetType(SaveTextFileDialog1.ClassType).GetFields do
if LRttiField.FieldType.IsInstance and LRttiField.FieldType.AsInstance.MetaclassType.ClassNameIs('TPanel') then
DisableVclStyles(TPanel(LRttiField.GetValue(SaveTextFileDialog1).AsObject));
SaveTextFileDialog1.Execute;
end;
1条答案
按热度按时间edqdpe6u1#
TSaveTextFileDialog组件的父类(TOpenTextFileDialog)添加了一组Vcl组件来实现
Encodings
和EncodingIndex
属性,您可以使用StyleElements
属性禁用这些Vcl控件上的Vcl样式。不幸的是,这些组件是私人的,所以你需要一个小黑客,以获得访问和禁用VCL样式。这里你有两个选择。
使用类助手。
您可以引入一个helper函数来获取Panel组件,该组件包含对话框的Vcl控件。
然后你可以写一个方法来禁用Vcl样式,像这样:
最后用这种方法
RTTI
另一种选择是使用RTTI来访问私有Vcl组件。