Como alterar o tema de um form específico em runtime (Delphi)
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
Posts
28/09/2023
Lyncon Oliveira
; Application: TUniGUIApplication;
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;
...
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);
Clique aqui para fazer login e interagir na Comunidade :)