MessageDlgを常に手前にするには


churi  2004-06-28 14:39:44  No: 9673  IP: [192.*.*.*]

皆様、いつもお世話になっております。

TCP/IP通信で相手先との接続に失敗した場合に、
MessageDlgを使用してメッセージを表示していますが、
MessageDlg表示前に、別アプリを触っていると、
MessageDlgがファームの後ろに隠れてしまします。
常にフォームを手前に表示させる方法を教えて下さい。
下記にソースを示します。

  Fm_Main.ClientSocket.Address := 192.168.0.10;
  Fm_Main.ClientSocket.Port := 1000;
  try
    Fm_Main.ClientSocket.Open;
  except
    MessageDlg ( '通信エラー', mtError ,[mbOK] , 0 );
  end;

以上、宜しくお願い致します。

編集 削除
さわ  2004-06-28 17:35:44  No: 9674  IP: [192.*.*.*]

強引な気もしますが…これなら行けると思います。

procedure TForm1.xOnshow(Sender: TObject);
begin
  SetWindowPos(TForm(Sender).Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE);
end;

//でしゃばるMessageDlg
function TForm1.xMessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
begin

  with CreateMessageDialog(Msg, DlgType, Buttons) do
  try
    HelpContext := HelpCtx;
    Position := poScreenCenter;
    OnShow := xOnshow;
    ShowModal;
  finally
    free;
  end;
end;

編集 削除
LupinⅢ  URL  2004-06-28 18:20:51  No: 9675  IP: [192.*.*.*]

MessageDlgを自前で作成するとかはどうでしょう?

編集 削除
ふぐちゃん  2004-06-28 18:32:05  No: 9676  IP: [192.*.*.*]

MessageDlgを表示する前に、
SetForegroundWindow(Fm_Main.Handle);
と「おまじない」を入れてもダメでしょうか?

Fm_Mainは最前面ウィンドウですか?

編集 削除
churi  2004-06-28 18:59:44  No: 9677  IP: [192.*.*.*]

皆様、回答ありがとうございます。

ふぐさんの「あまじない」を試してみたところ、
うまくいっているように見えたのですが、Fm_Mainの
最大化・最小化を繰返し続けていると、MessageDlgが
表示されない時があります。
このようなご経験はありますでしょうか?
もしご存知でしたら、ご教授宜しくお願い致します。

編集 削除
スタテツ  2004-06-29 21:57:22  No: 9678  IP: [192.*.*.*]

LupinⅢさんに一票。
procedure TForm1.Button1Click(Sender: TObject);
var str,title:string;
begin
str:='てすと';
title:='タイトル';
MessageBox(
  Handle, // handle of owner window
  PChar(str), // address of text in message box
  PChar(title), // address of title of message box
  MB_OK  or MB_SYSTEMMODAL or
  MB_TOPMOST// style of message box
);
end;

>MessageDlgがファームの後ろに隠れてしまします。
>常にフォームを手前に表示させる方法を教えて下さい。
↑そのまま解釈しますと、意味が錯誤しますけど。
ダイアログを最前面に保持って事でいいんですよね?

編集 削除