![]() |
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:
Etwa irgendwie so??
if MessageDlgPos('Wollen Sie wirklich das Programm beenden?',mtWarning,[mbyes,mbno],0,Form1.Top,Form1.left) = mryes then
Danke sascha [edit=MrSpock]Gemäß Wunsch des Erstellers geändert. Mfg, MrSpock[/edit] |
Re: MessageBox Postion
Was soll die Frage ! (etwas rechnen)
|
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:
aber irgendwie will es nicht in die Mitte
,mtWarning,[mbyes,mbno],0,Form1.Top + 20,Form1.left+ 20;
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 |
Re: MessageBox Postion
div
|
Re: MessageBox Postion
was Blachheart da meint ist folgendes:
1. du berechnest die mitte der form, etwa so:
Delphi-Quellcode:
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
var mitte : tpoint;
// ***** mitte.Y := (form1.top + (form1.top+form1.heigth)) div 2; mitte.x := (form1.left + (form1.left+form1.width)) div 2; dann sollte es etwa die mitte sein ;) |
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 |
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
|
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 |
Re: MessageBox Postion
Delphi-Quellcode:
Wäre vielleicht noch ganz gut zu prüfen, ob der Dialog überhaupt auf einem Bildschirm sichtbar ist und ihn dann ggf zu verschieben.
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; |
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; |
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; |
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 |
Re: MessageBox Postion
z.B.
Delphi-Quellcode:
einfach ausprobieren
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; |
Re: MessageBox Postion
Aber das mit der funktion ist doch richtig gut und beim verkleinern der vorm funzt das auch noch gut :thumb:
|
Re: MessageBox Postion
Zitat:
Zitat:
|
Re: MessageBox Postion
Ah ja sorry ,war wohl nicht mehr ganz nüchtern. :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz