Search code examples
delphidelphi-10.1-berlinmessagedialog

Colors of the TDialogService.MessageDialog


Can you explain how I can get used colors of the TDialogService.MessageDialog window?

MessageDialog

Update: Which created using this command:

  TDialogService.MessageDialog('Test3: Confirmation', MsgDlgType.mtConfirmation,
    [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0,
    procedure(const AResult: TModalResult)
    begin
    end);

I need color of the bottom panel (Button parent) and background color of the message. I need this color to make my own dialog looks like FMX default dialog.

Currently I have my own highly customizable dialog which looks like this:

Custom MessageDialog

And also where I can get icons which used in TDialogService.MessageDialog window?


Solution

  • Thanks to the answer of David Heffernan and Triber:

    procedure GetThemeBackgroud(AImage: TImage; ATheme: HTHEME; APartID: Integer);
    var
      stream: TMemoryStream;
      bitmap: Vcl.Graphics.TBitmap;
    begin
      bitmap := Vcl.Graphics.TBitmap.Create;
      try
        bitmap.Width := Round(AImage.Width);
        bitmap.Height := Round(AImage.Height);
        DrawThemeBackground(ATheme, bitmap.Canvas.Handle, APartID, 0,
                            Rect(0, 0, bitmap.Width, bitmap.Height), nil);
        stream := TMemoryStream.Create;
        try
          bitmap.SaveToStream(stream);
          AImage.Bitmap.LoadFromStream(stream);
        finally
          stream.Free;
        end;
      finally
        bitmap.Free;
      end;
    end;
    
    procedure GetThemeBackgroud;
    var
      theme: HTHEME;
    begin
      theme := OpenThemeData(0, 'TASKDIALOG');
      if theme <> 0 then
      try
        // Client color
        GetThemeBackgroud(imgClient, theme, TDLG_PRIMARYPANEL);
        // Bottom color
        GetThemeBackgroud(imgBottom, theme, TDLG_SECONDARYPANEL);
      finally
        CloseThemeData(theme);
      end;
    end;
    

    Here we should to add 2 TImages: client and buttons parents:

    enter image description here

    Now I should investigate of the system icons loading