Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MessageBox Postion (https://www.delphipraxis.net/109185-messagebox-postion.html)

SaFu 25. Feb 2008 20:33


MessageBox Postion
 
Hi

Hab mal ne simple Frage aber irgenwie kommme ich net drauf

Wie kann ich meine MessageBox immer in der Mitte von meinem Formblatt auf gehen lassen.

Delphi-Quellcode:
if MessageDlgPos('Wollen Sie wirklich das Programm beenden?',mtWarning,[mbyes,mbno],0,Form1.Top,Form1.left) = mryes then
Etwa irgendwie so??

Danke sascha

[edit=MrSpock]Gemäß Wunsch des Erstellers geändert. Mfg, MrSpock[/edit]

Blackheart 25. Feb 2008 20:42

Re: MessageBox Postion
 
Was soll die Frage ! (etwas rechnen)

SaFu 25. Feb 2008 20:46

Re: MessageBox Postion
 
Wie gesagt hab ja schon einiges versucht aber irgenwie geht das so net

Habe mir gedacht ich nehme die Position von Form Top und Left und addiere einfach was dazu etwa so

Delphi-Quellcode:
,mtWarning,[mbyes,mbno],0,Form1.Top + 20,Form1.left+ 20;
aber irgendwie will es nicht in die Mitte

Es genügt mir scon wenn du mir einfach sagst ob ich da auf dem richtigen Dampfer bin, ansonsten wäre ein kleiner Tipp net

Blackheart 25. Feb 2008 20:51

Re: MessageBox Postion
 
div

Crazy Ivan 25. Feb 2008 21:01

Re: MessageBox Postion
 
was Blachheart da meint ist folgendes:

1. du berechnest die mitte der form, etwa so:

Delphi-Quellcode:
var mitte : tpoint;

// *****

mitte.Y := (form1.top + (form1.top+form1.heigth)) div 2;
mitte.x := (form1.left + (form1.left+form1.width)) div 2;
2. musst du dann wissen, wie groß (in pixeln) die box ist und ziehst jeweils die hälfte davon bei mitte.X und mitte.Y ab

dann sollte es etwa die mitte sein ;)

SaFu 25. Feb 2008 21:09

Re: MessageBox Postion
 
Mal ganz erlich, ich versteh nur Bahnhof

Wenn ich das so versuch bekomm ich auch nicht die Mitte es plobt teilweise auf wo es bock hat.

Ich hab net gedacht das das so ein aufwand ist

Crazy Ivan 25. Feb 2008 21:20

Re: MessageBox Postion
 
mitte ist ein Tpoint. das heißt mitte.X ist die position auf der x-Achse, mitte.Y dann analog auf der y-Achse. der code berechnet einfach nur die gerundeten mittelwerte aus den maßen der form1

SaFu 25. Feb 2008 21:30

Re: MessageBox Postion
 
Ja das meine ich ja wenn ich das so mache blopt es manschmal in der mitte auf und manschmal nicht kommt darauf an wo die Form steht

Kann es sein das es zu ungenau ist und das es deswegen zu ungenauigkeiten kommt

Dani 25. Feb 2008 22:03

Re: MessageBox Postion
 
Delphi-Quellcode:
function MessageDlgPos2(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; ParentForm: TForm = nil; HelpCtx: Longint = -1;
  const HelpFileName: string = ''): Integer;
begin
  with CreateMessageDialog(Msg, DlgType, Buttons) do
    try
      HelpContext := HelpCtx;
      HelpFile := HelpFileName;
      if Assigned(ParentForm) then begin
        Position := poDesigned;
        //0 div 2 -> 0, also kein Problem.
        Left := ParentForm.Left + ((ParentForm.Width - Width) div 2);
        Top := ParentForm.Top + ((ParentForm.Height - Height) div 2);
      end else begin
        Position := poScreenCenter;
      end;
      Result := ShowModal;
    finally
      Free;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MessageDlgPos2('Dies ist ein Test', mtInformation, [mbOK], Self);
end;
Wäre vielleicht noch ganz gut zu prüfen, ob der Dialog überhaupt auf einem Bildschirm sichtbar ist und ihn dann ggf zu verschieben.

pilic 25. Feb 2008 22:05

Re: MessageBox Postion
 
Problem ist, dass man mit den Parametern X und Y der Funktion mitteilt, die Eigenschaften Left und Top vom Dialog zu setzen. Für die wirkliche Mitte müsste man noch die halbe Breite des Dialogs abziehen, bzw. die halbe Höhe.

Delphi-Quellcode:
X := Form1.Left + (Form1.Width-BreiteDialog) div 2;
Y := Form1.Top + (Form1.Height-HoeheDialog) div 2;

busybyte 25. Feb 2008 22:09

Re: MessageBox Postion
 
Keine Ahnung was Ihr alle mit Form1 habt,wenn er doch den Bildschirm will.
Delphi-Quellcode:
Uses Forms; //Edit

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
case Button of
     mbRight:PopupMenu1.Popup(Screen.Width div 2,Screen.Height div 2);
end;

end;

SaFu 25. Feb 2008 22:10

Re: MessageBox Postion
 
Das funktioniert so danke sehr.

Aber das hat wirklich nichts mit faulheit zutun oder so nur ich habe es so versucht aber die Richtige mitte habe ich nie heraus bekommen.

Wie macht Ihr das so, blobt es bei euch immer in der mitte vom Bildschirm auf oder ermittelt ihr auch die Mitte vom Programm???

Ich wollte nicht den Bildschirm, die haben schon recht mit dem Programm aber dir auch danke für die Anwort

busybyte 25. Feb 2008 22:14

Re: MessageBox Postion
 
z.B.
Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var P:TPoint;
begin
P:=ClienttoScreen(Point(X,Y));
case button of
//     mbright:Popupmenu1.Popup(Panel1.Left+P.x+10,Panel1.Top+P.Y); //Wer das Left oder Top vorgibt,
     mbright:Popupmenu1.Popup(P.x+10,P.Y);

end;
end;
einfach ausprobieren

SaFu 25. Feb 2008 22:16

Re: MessageBox Postion
 
Aber das mit der funktion ist doch richtig gut und beim verkleinern der vorm funzt das auch noch gut :thumb:

Luckie 26. Feb 2008 07:54

Re: MessageBox Postion
 
Zitat:

Zitat von busybyte
Keine Ahnung was Ihr alle mit Form1 habt,wenn er doch den Bildschirm will.

Wieso Bildschirm:
Zitat:

Wie kann ich meine MessageBox immer in der Mitte von meinem Formblatt auf gehen lassen.

busybyte 26. Feb 2008 14:10

Re: MessageBox Postion
 
Ah ja sorry ,war wohl nicht mehr ganz nüchtern. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz