• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 261
  • Last Modified:

Changing the Font Color in a TMessageDlg?

Hi

Is there a way to change the font color in a TMessageDlg, and if so, how??

I am using D1 and WFW 3.11
0
jdthedj
Asked:
jdthedj
  • 3
  • 2
  • 2
1 Solution
 
MatveyCommented:
TMessageDlg?? Are you sure there is such thing?

I know there's the MessageDlg function, but not a TMessageDlg type (??)

In the Dialogs unit sources in the CreateMessageDialog body you see the following lines:

    Font.Name := 'MS Sans Serif';
    Font.Height := -11;
    Font.Style := [fsBold];

You can try and recreate it so you add the color definition. You'll have to copy all this function and rewrite this section as you want.
0
 
jdthedjAuthor Commented:
Hi Matvey - thanx for replying.  You're quite right it is a function not a type.  I'm experimenting with the Dialogs unit to see what I can come up with.
0
 
MatveyCommented:
I think it's easier to just create your own new form and make it a good-looking dialog. You know how to do that, right? Just place a red-font label on a form and some buttons and there you go...
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
JaccoCommented:
Matvey is right, but there is a smart way around this and reuse some code of the VCL anyway. Just use the CreateMessageDlg function and adjust the resulting form. (If you alter a lot you can also adjust the Width/Height of the form).

Here is a silly example on how to do it:

function MyMessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
var
  iCount : Integer;
begin
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
      HelpContext := HelpCtx;
      for iCount:=0 to ComponentCount-1 do begin
        if Components[iCount] is TLabel then begin
          TLabel(Components[iCount]).Font.Color := clRed;
          TLabel(Components[iCount]).Font.Name := 'Times New Roman';
          TLabel(Components[iCount]).Font.Size := 14;
        end;
        if Components[iCount] is TButton then begin
          TButton(Components[iCount]).Font.Color := clBlue;
        end;
      end;
      Result:=ShowModal;
    finally
      Free;
    end;
end;

Regards Jacco
0
 
JaccoCommented:
The color of the font of the button is not changed this way.

There is one (or no) TImage named "image" (for the icon)
There is one TLabel named "message" (for the text)
There are X buttons named:

'Yes'
'No'
'OK'
'Cancel'
'Abort'
'Retry'
'Ignore'
'All'
'Help'

So you can also use the FindComponent method to find the components and change them.

Example:

function MyMessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
var
  iCount : Integer;
begin
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
      HelpContext := HelpCtx;
      with TLabel(FindComponent('message')) do begin
        Font.Color := clYellow;
      end;
      if FindComponent('image')<>nil then
        with TImage(FindComponent('image')) do begin
          Left:=0;
          Top:=0;
        end;
      if FindComponent('ok')<>nil then
        with TButton(FindComponent('ok')) do begin
          Caption := 'Go ahead';
        end;
      Result:=ShowModal;
    finally
      Free;
    end;
end;





This way you can even add Buttons
0
 
JaccoCommented:
I think Borland made the CreateMessageDlg function available public for other units for the purpose of extension.

Regards Jacco
0
 
jdthedjAuthor Commented:
Hi Jacco - Thanks for the answer.  I really got sick of the "default" font - it would be better even if it was black, not that sickly "purple" color.

Hi Matvey - Thanks for your further comments.
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 3
  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now