|
| Messagebox position Fra : Harald |
Dato : 15-06-03 19:18 |
|
Hej
Kan man sætte position på Application.MessageBox? Jeg har en MDI app. og vil
egentlig gerne have at MessageBox´en bliver centreret i forhold til det
aktuelle MDI vindue.
Mvh
HK
| |
Klaus Petersen (15-06-2003)
| Kommentar Fra : Klaus Petersen |
Dato : 15-06-03 19:35 |
|
> Kan man sætte position på Application.MessageBox?
Umiddelbart nej.
MessageBox benytter sig af windows api kommandoen, MessageBox, der ikke har
parametrer som kan styre positionen på den.
Selvfølgelig ville man nok kunne lave et hack, der gør det muligt.
| |
Ove Kjeldgaard (15-06-2003)
| Kommentar Fra : Ove Kjeldgaard |
Dato : 15-06-03 21:41 |
|
"Harald" <news@kroning.dk> wrote:
>Hej
>
>Kan man sætte position på Application.MessageBox? Jeg har en MDI app. og vil
>egentlig gerne have at MessageBox´en bliver centreret i forhold til det
>aktuelle MDI vindue.
>
Som der er skrevet i denne tråd så gør man det ikke bare lige med MessageBox.
Men check om MessageDlg eller MessageDlgPos ikke kan bruges.
--
Med venlig hilsen, Ove Kjeldgaard
Natur og Friluftsliv: < http://hiker.dk>
| |
Harald (15-06-2003)
| Kommentar Fra : Harald |
Dato : 15-06-03 22:18 |
|
"Ove Kjeldgaard" <ok@newmail.dk> skrev i en meddelelse
news:t7mpevoc29hlhd8ffba8go5a12hi57dgh0@4ax.com...
> "Harald" <news@kroning.dk> wrote:
>
> >Hej
> >
> >Kan man sætte position på Application.MessageBox? Jeg har en MDI app. og
vil
> >egentlig gerne have at MessageBox´en bliver centreret i forhold til det
> >aktuelle MDI vindue.
> >
>
> Som der er skrevet i denne tråd så gør man det ikke bare lige med
MessageBox.
>
> Men check om MessageDlg eller MessageDlgPos ikke kan bruges.
Der er 2 problemer med MessageDlg, Ja, Nej osv. knapper vises ikke på dansk
og den understøtter ikke XP Manifest.
Mvh
HK
| |
Harald (17-06-2003)
| Kommentar Fra : Harald |
Dato : 17-06-03 06:53 |
|
"Harald" <news@kroning.dk> skrev i en meddelelse
news:3eecb86f$0$76166$edfadb0f@dread11.news.tele.dk...
> Hej
>
> Kan man sætte position på Application.MessageBox? Jeg har en MDI app. og
vil
> egentlig gerne have at MessageBox´en bliver centreret i forhold til det
> aktuelle MDI vindue.
I behøver ikke ligge søvnløs mere over det, har fundet en løsning.
/HK
| |
Ove Kjeldgaard (17-06-2003)
| Kommentar Fra : Ove Kjeldgaard |
Dato : 17-06-03 16:53 |
|
"Harald" <news@kroning.dk> wrote:
>
>I behøver ikke ligge søvnløs mere over det, har fundet en løsning.
>
Må vi ikke høre lidt om løsningen?
--
Med venlig hilsen, Ove Kjeldgaard
Natur og Friluftsliv: < http://hiker.dk>
| |
Harald (18-06-2003)
| Kommentar Fra : Harald |
Dato : 18-06-03 12:26 |
|
"Ove Kjeldgaard" <ok@newmail.dk> skrev i en meddelelse
news:49euev82k3f5a5rhckvn9c3f0s7kd72tbo@4ax.com...
> "Harald" <news@kroning.dk> wrote:
> >
> >I behøver ikke ligge søvnløs mere over det, har fundet en løsning.
> >
>
> Må vi ikke høre lidt om løsningen?
Jo, alle mine MDI forme er baseret på en MDIGrundForm og i denne har jeg
følgende:
const
mbMessage = WM_USER+10;
-----------
p_msgCaption: PChar;
procedure ChangeMessageBoxPosition(var Msg: TMessage); message
mbMessage;
function MDIMessageBox(const Text, Caption: PChar; Flags: Longint =
MB_OK): Integer;
--------------
og de 2 funktioner:
function TMDIGrundForm.MDIMessageBox(const Text, Caption: PChar; Flags:
Longint = MB_OK): Integer;
begin
PostMessage(Handle, mbMessage, 0, 0);
p_msgCaption:=Caption;
result:=Application.MessageBox(Text, p_msgCaption, Flags);
end;
procedure TMDIGrundForm.ChangeMessageBoxPosition(var Msg: TMessage);
var
MbHwnd: longword;
MbRect: TRect;
x, y, w, h: integer;
Point : TPoint;
begin
MbHwnd:=FindWindow(MAKEINTRESOURCE(WC_DIALOG), p_msgCaption);
if (MbHwnd<>0) then
begin
Point.X:=0;Point.Y:=0;
Point:=ClientToScreen(Point);
GetWindowRect(MBHWnd, MBRect);
w:=MbRect.Right-MbRect.Left;
h:=MbRect.Bottom-MbRect.Top;
// center horzontal
x:=Point.X+((Width-w) div 2);
// keep on screen
if x<0 then
x:=0
else
if x+w>Screen.Width then
x:=Screen.Width-w;
//center vertical
y:=Point.Y+((Height-h) div 2);
// keep on screen
if y<0 then
y:=0
else
if y+h>Screen.Height then
y:=Screen.Height-h;
// set new windows position
SetWindowPos(MBHWnd, 0, x, y, 0, 0, SWP_NOACTIVATE or SWP_NOSIZE or
SWP_NOZORDER);
end;
end;
og så er det bare at skrive f.eks.
if MDIMessageBox('Ønsker du at slette aktuelle kunde?','Spørgsmål',MB_YESNO
or MB_ICONQUESTION or MB_DEFBUTTON2)=IDYes then
.. gør ting
Mvh
HK
| |
|
|