皆様、いつもお世話になっております。
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;
以上、宜しくお願い致します。
強引な気もしますが…これなら行けると思います。
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;
MessageDlgを自前で作成するとかはどうでしょう?
MessageDlgを表示する前に、
SetForegroundWindow(Fm_Main.Handle);
と「おまじない」を入れてもダメでしょうか?
Fm_Mainは最前面ウィンドウですか?
皆様、回答ありがとうございます。
ふぐさんの「あまじない」を試してみたところ、
うまくいっているように見えたのですが、Fm_Mainの
最大化・最小化を繰返し続けていると、MessageDlgが
表示されない時があります。
このようなご経験はありますでしょうか?
もしご存知でしたら、ご教授宜しくお願い致します。
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がファームの後ろに隠れてしまします。
>常にフォームを手前に表示させる方法を教えて下さい。
↑そのまま解釈しますと、意味が錯誤しますけど。
ダイアログを最前面に保持って事でいいんですよね?
ツイート | ![]() |