メッセージの色


宇治抹茶  2009-06-14 18:46:07  No: 34763  IP: 192.*.*.*

表示するメッセージの色を変更する方法に関しての質問です。
messagedlgなどの関数を表示する文字列の色を変更することは可能
でしょうか?
大文字Aなら赤、小文字aなら青など同じ文字列内で個別に色を変更したい
です。
例えば
messagedlg(moji1+moji2)であればmoji1を赤で表示し、moji2を青に
表示したいのです。

編集 削除
みんみん  2009-06-14 22:39:26  No: 34764  IP: 192.*.*.*

メッセージダイアログをカスタマイズしたいなら
CreateMessageDialog関数などがいいかもしれませんよ。

質問のような場合は、上の関数とTLabelの動的生成でいけると思います。

編集 削除
宇治抹茶  2009-06-15 15:07:48  No: 34765  IP: 192.*.*.*

captionにて文字列をくっつけてみたのですが、うまくいきません。
moji1:='A';
moji2:='B';
with moji1 do begin
        Font.color := clRed;
end;
with moji2 do begin
        Font.color := clAqua;
end;
with TLabel.Create(Self) do begin 
      Parent  := Self;               
      Caption := moji1+moji2;
end;
文字が表示されないのです。
というかくっつけなくて片方だけでも表示されません。

編集 削除
宇治抹茶  2009-06-15 15:47:03  No: 34766  IP: 192.*.*.*

すみません書き忘れました。
      Msgdlg := CreateMessageDialog(moji2,mtWarning, [mbOK]);
としてcaption:=moji1+Msgdlg;
とするとMsgdlg だけ表示しました。

編集 削除
宇治抹茶  2009-06-15 15:48:52  No: 34767  IP: 192.*.*.*

重ね重ね申し訳ないです。
caption:=moji1+Msgdlg;は
caption:=moji1+IntToStr(Msgdlg.ShowModal);
でした。

編集 削除
Manbon  2009-06-15 16:47:50  No: 34768  IP: 192.*.*.*

CreateMessageDialogはこんな感じで使用できます。
参考までに・・・

var
  MsgDlg : TForm;
  DlgType: TMsgDlgType;
  i: Byte;
begin
  DlgType := mtInformation;
  MsgDlg := CreateMessageDialog('かきくけこ', DlgType, [mbOK]);
  with MsgDlg do begin
    try
      Caption := 'あいうえお';
      TButton(Components[2]).Caption := 'おーけー';

      for i := 0 to ComponentCount - 1 do begin
        if Components[i] is TLabel then begin
          (Components[i] as TLabel).WordWrap := False;
          with (Components[i] as TLabel).Font do begin
            Charset := DEFAULT_CHARSET;
            Color := clRed;
            Size := 10;
          end;
          Break;
        end;
      end;

      ShowModal;
    finally
      Free;
    end;
  end;
end;

編集 削除
宇治抹茶  2009-06-15 17:33:14  No: 34769  IP: 192.*.*.*

なるほどー。使い方ありがとうございました。
あとはかきくけこの’か’を赤で’き’を青にしたいのです。
これは無理なのでしょうか?

編集 削除
みんみん  2009-06-15 22:56:34  No: 34770  IP: 192.*.*.*

const
  msg1 ='か';
  msg2 ='き';
var
  Dlg :TForm;
  Lbl :TLabel;
  i   :Integer;
begin
  Dlg :=CreateMessageDialog(msg1, mtInformation, [MBOK]);
  with Dlg do begin
    try
      for i :=0 to ComponentCount -1 do
        if Components[i] is TLabel then
        begin
          Lbl :=Components[i] as TLabel;
          Lbl.AutoSize :=True;
          Lbl.WordWrap :=False;
          Lbl.Font.Color :=clRed;
          Break;
        end;

      with TLabel.Create(Dlg) do begin
        Parent :=Dlg;
        Left :=Lbl.Left + Lbl.Width;
        Top  :=Lbl.Top;
        Caption :=msg2;
        Font.Color :=clBlue;
      end;

      ShowModal;
    finally
      Free;
    end;
  end;
end;

編集 削除