function NewShowMessage(const Msg : String): Integer;
begin
with CreateMessageDialog(Msg, mtCustom, [mbOK]) do
try
Position := poOwnerFormCenter;
Result := ShowModal;
finally
Free;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
NewShowMessage('Test 입니다.');
end;
예전에 볼포에 올려놓은것인데..
문제가 있는부분 소나기님 소스 참조하여 수정해 올려봅니다.
var
MsgCanvas: TCanvas;
function ShowMessageCenter(const Msg : String): Integer;
var
ts: TSize;
x,y: Integer;
begin
if not Assigned(MsgCanvas) then
begin
MsgCanvas:=TCanvas.Create;
MsgCanvas.Font.Size:=9;
MsgCanvas.Font.Name:='MS Sans Serif';
end;
if Assigned(Screen.ActiveForm)then
begin
MsgCanvas.Handle:=GetDC(Screen.ActiveForm.Handle);
ts:=MsgCanvas.TextExtent(Msg);
if(ts.cx<102)then ts.cx:=102;
x:=Screen.ActiveForm.Left + (Screen.ActiveForm.Width-ts.cx)div 2 - 20 ;
y:=Screen.ActiveForm.Top + (Screen.ActiveForm.Height-92-ts.cy)div 2;
with CreateMessageDialog(Msg, mtCustom, [mbOK]) do
try
Left:=x;
Top:=y;
Result := ShowModal;
finally
Free;
end;
end
else
begin
ShowMessage(Msg);
end;
end;
MessageDlgPos함수를 이용하더라도 좌표가 마이너스인 경우에는 문제가 생깁니다.
제가 노트북에 듀얼모니터로 쓰고 있는데 보조 모니터가 왼쪽에 있거든요 (그놈의 좌표가 마이너스라서...)
MessageDlgPos 함수 코드입니다.
,
//MessageDlgPos 에서는 MessageDlgPosHelp를 호출하네요
function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer;
begin
Result := MessageDlgPosHelp(Msg, DlgType, Buttons, HelpCtx, X, Y, '');
end;
//MessageDlgPosHelp에 보면
function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
const HelpFileName: string): Integer;
begin
with CreateMessageDialog(Msg, DlgType, Buttons) do
try
HelpContext := HelpCtx;
HelpFile := HelpFileName;
if X >= 0 then Left := X; //요기에 보면 x,y좌표가 0보다 크거나 같은경우만 제대로 설정하고
if Y >= 0 then Top := Y; // 그렇지 않는경우 바꿔버립니다.
if (Y < 0) and (X < 0) then Position := poScreenCenter;
Result := ShowModal;
finally
Free;
end;
end;
오래전에 MesssageDlg 를 수정한것을 볼포에 올려놓은게 있는데요..
target=_blank>http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tip&no=54
를 참고하셔서 활용하시면 좋으실듯 합니다.