Fórum Como alterar o tema de um form específico em runtime (Delphi) #620559
28/09/2023
0
Observe, eu gostaria de mudar o tema apenas desse form, no momento de sua criação, para que ele tivesse um tema específico independente do tema que a aplicação estiver usando no momento.
Antes que eu me esqueça: a aplicação com o Framework uniGUI, mas estou aceitando soluções que possam ser aplicadas no próprio Delphi pois penso que talvez eu possa adaptá-las.
Alguém poderia me ajudar com isso?
//codigo da class que cria o form e chama para exibir a mensagem
class function TFMessageBox.Mensagem(Titulo, Msg: string; Tipo: TMyType; Botoes: array of TMyButtons; Application: TUniGUIApplication; Theme: string = FDataModulo.Theme; H: Integer = 150; W: Integer = 400): Boolean;
var
i: Integer;
frm: TFMessageBox;
begin
frm := TFMessageBox.Create(Application);
try
frm.Caption := Titulo;
frm.lbMessage.Caption := Msg;
frm.Height := H;
frm.Width := W;
if Theme <> FDataModulo.Theme then
if Theme in UniServerModule.ThemeManager.AllThemes then
frm.??? := Theme; // para testar pode comentar esse bloco e remover o parametro
for i := 0 to Length(Botoes) - 1 do
begin
case (Botoes[i]) of
mbPYes:
begin
frm.btYes.Visible := True;
frm.PnlYes.Visible := True;
end;
mbPNo:
begin
frm.btNo.Visible := True;
frm.PnlNo.Visible := True;
end;
mbPOk:
begin
frm.btOk.Visible := True;
frm.PnlOk.Visible := True;
end;
mbPCancel:
begin
frm.btCancel.Visible := True;
frm.PnlCancel.Visible := True;
end;
mbPClose:
frm.btClose.Visible := True;
else
begin
frm.btOk.Visible := True;
frm.PnlOk.Visible := True;
end;
end;
end;
case (Tipo) of
mtPQuestion:
begin
frm.ImgQuestion.Visible := True;
frm.ImgQuestion.Height := 70;
end;
mtPInformation:
begin
frm.ImgInformation.Visible := True;
frm.ImgInformation.Height := 70;
end;
mtPWarning:
begin
frm.ImgWarning.Visible := True;
frm.ImgWarning.Height := 70;
end;
mtPError:
begin
frm.ImgError.Visible := True;
frm.ImgError.Height := 70;
end;
mtPDelete:
begin
frm.ImgDelete.Visible := True;
frm.ImgDelete.Height := 70;
end
else
begin
frm.ImgInformation.Visible := True;
frm.ImgInformation.Height := 70;
end;
end;
frm.ShowModal;
case (frm.ModalResult) of
mrOk, mrYes:
result := True;
else
result := False;
end;
finally
if (frm <> nil) then
FreeAndNil(frm);
end;
end;
Caso precise disponibilizo o form inteiro mediante solicitação.
Lyncon Oliveira
Curtir tópico
+ 0Posts
28/09/2023
Lyncon Oliveira
; Application: TUniGUIApplication;
Gostei + 0
28/09/2023
Lyncon Oliveira
class function TFMessageBox.Mensagem(Titulo, Msg: string; Tipo: TMyType; Botoes: array of TMyButtons; Application: TUniGUIApplication; Theme: string = FDataModulo.Theme; H: Integer = 150; W: Integer = 400): Boolean;
...
e
if Theme <> FDataModulo.Theme then
if Theme in UniServerModule.ThemeManager.AllThemes then
frm.??? := Theme; // para testar pode comentar esse bloco e remover o parametro
...
peço que substitua por, respectivamente, os seguintes códigos:
class function TFMessageBox.Mensagem(Titulo, Msg: string; Tipo: TMyType; Botoes: array of TMyButtons; Application: TUniGUIApplication; Theme: string = ''ThemeOfDataModule''; H: Integer = 150; W: Integer = 400): Boolean;
...
e
if Theme = ''ThemeOfDataModule'' then
// frm.??? := FDataModulo.Theme
else if Theme in UniServerModule.ThemeManager.AllThemes then
//frm. := Theme;
...
Gostei + 0
28/09/2023
Lyncon Oliveira
if Theme = ''ThemeOfDataModule'' then
// frm.??? := FDataModulo.Theme
else if Theme in UniServerModule.ThemeManager.AllThemes then
//frm. := Theme;
...
por
if Theme = 'ThemeOfDataModule' then
// frm.??? := FDataModulo.Theme
else
for i := 0 to High(UniServerModule.ThemeManager.AllThemes) do
if UniServerModule.ThemeManager.AllThemes[i] = Theme then
begin
// frm.??? := Theme;
Break;
end;
...
Irá compilar (ainda não sei como definir o tema);
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)