Como alterar o tema de um form específico em runtime (Delphi)
Boa tarde, estava criando um form para exibir uma mensagem qualquer de forma mais personalizada do que o MessageDlg do próprio Delphi, ai cheguei num ponto em que não estou conseguindo avançar.
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?
Caso precise disponibilizo o form inteiro mediante solicitação.
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
Curtidas 0
Respostas
Lyncon Oliveira
28/09/2023
Veja que o in
......
é de um tipo do próprio uniGUI, que tenho que passar para criar o form corretamente (não sei se removendo o parâmetro e substituindo seu uso por "nil" funcionaria no Delphi (puro, sem ser uniGUI), mas para não funcione sugiro utilizar "TApplication" no lugar de "TUniGUIApplication", e passar "Application" no momento de chamar a função)
; Application: TUniGUIApplication;
GOSTEI 0
Lyncon Oliveira
28/09/2023
peço desculpas, não havia tentado compilar antes de publicar aqui, onde se encontram:
e
peço que substitua por, respectivamente, os seguintes códigos:
e
...
...
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
Lyncon Oliveira
28/09/2023
Perdão, novamente, pela pressa e desatenção não percebi que não estava compilando novamente, após alterar o trecho:
por
Irá compilar (ainda não sei como definir o tema);
...
...
...
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