La classe padre (TOpenTextFileDialog) del componente TSaveTextFileDialog aggiunge un insieme di componenti VCL per implementare le proprietà Encodings
e EncodingIndex
, è possibile disattivare gli stili Vcl su queste Vcl controlla utilizzando la proprietà StyleElements
. sfortunatamente questi componenti sono privati quindi è necessario un piccolo trucco per accedere e disabilitare gli stili Vcl.
Qui ci sono due opzioni.
Utilizzo di un helper di classe.
È possibile introdurre una funzione di supporto per ottenere il componente Pannello che contiene i controlli Vcl della finestra di dialogo.
type
TOpenTextFileDialogHelper=class helper for TOpenTextFileDialog
function GetPanel : TPanel;
end;
function TOpenTextFileDialogHelper.GetPanel: TPanel;
begin
Result:=Self.FPanel;
end;
allora si può scrivere un metodo per disabilitare Stili VCL in questo modo:
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;
E infine utilizzare in questo modo
DisableVclStyles(SaveTextFileDialog1.GetPanel);
SaveTextFileDialog1.Execute;
RTTI
Un'altra opzione è utilizzare RTTI per accedere ai componenti Vcl privati.
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;
Ooh questa finestra di dialogo è disgustosa. Non rispetta nemmeno i temi di Windows! Povero spettacolo di Emba. –