MessageDlgを常に手前にするには


churi  2004-06-28 23:39:44  No: 9673

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

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-29 02:35:44  No: 9674

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

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-29 03:20:51  No: 9675

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


ふぐちゃん  2004-06-29 03:32:05  No: 9676

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

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


churi  2004-06-29 03:59:44  No: 9677

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

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


スタテツ  2004-06-30 06:57:22  No: 9678

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加