| Tranx 
          Beiträge: 648
 Erhaltene Danke: 85
 
 WIN 2000, WIN XP
 D5 Prof
 
 | 
Verfasst: Di 19.02.13 09:07 
 
Ich habe gesucht, wie ich die letzte Position eines MessageDlg speichern kann. In dem Zusammenhang habe ich die Dialogs.pas durchsucht und mir angesehen, wie ein MessageDlg erzeugt wird. Es wird mit CreateMssageDlg ein Formular erzeugt. Da kam mir dann die Idee, wie ich die Position speichern kann. 
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 
 | function MsgDlgPos(const Msg: string; DlgType: TMsgDlgType;
 Buttons: TMsgDlgButtons; HelpCtx: Longint; var X, Y: Integer): Integer; var
 loForm : TForm;
 begin
 loForm := CreateMessageDialog(Msg, DlgType, Buttons);
 with loForm do
 try
 HelpContext := HelpCtx;
 HelpFile := '';
 if X >= 0 then Left := X;
 if Y >= 0 then Top := Y;
 if (Y < 0) and (X < 0) then Position := poScreenCenter;
 Result := ShowModal;
 finally
 X := Left;
 Y := Top;
 Free;     end;
 end;
 |  												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 
 | function MsgDlgPos(const Typ: string; const Msg: string; DlgType: TMsgDlgType;
 Buttons: TMsgDlgButtons; HelpCtx: Longint; var X, Y: Integer; const Col : TColor = clBtnFace): Integer;
 var
 loForm: TForm;
 MessageDatei : TIniFile;
 begin
 MessageDatei := TIniFile.Create(MessageName);
 with MessageDatei do
 begin
 X := ReadInteger(Typ, 'X', 0);
 Y := ReadInteger(Typ, 'Y', 0);
 Free;
 end;
 loForm := CreateMessageDialog(Msg, DlgType, Buttons);
 with loForm do
 try
 Color := Col;
 HelpContext := HelpCtx;
 HelpFile := '';
 X := ImBereich(0,Screen.Width-Width-100,X);
 Y := ImBereich(0,Screen.Height-Height-50,Y);
 Left := X;
 Top := Y;
 Result := ShowModal;
 finally
 X := Left;
 Y := Top;
 MessageDatei := TIniFile.Create(MessageName);
 with MessageDatei do
 begin
 WriteInteger(Typ, 'X', X);
 WriteInteger(Typ, 'Y', Y);
 Free;
 end;
 Free;
 end;
 end;
 
 
 function ImBereich(const von, bis: Integer; Wert: Integer): Integer;
 begin
 Wert := Min(bis, Wert);
 Wert := Max(von, Wert);
 Result := Wert;
 end;
 
 
 
 
 |  (*1) Statt lokaler X,Y übergebe ich an die Prozedur MsgDlPos var-Parameter X,Y, so dass ich in den Parametern die Position speichern kann. 
 (*2) Bevor das Formular mit Free geschlossen wird, wird die aktuelle Position in X und Y gespeichert. 
 Nun erfolgt der Aufruf in zwei unterschiedlichen lokalen Funktionen wie folgt:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 
 | function Entscheidung(Text: string): Integer;const
 X : integer = 0;
 Y : integer = 0;
 var
 Erg: Word;
 begin
 Erg := MsgDlgPos(Text, mtConfirmation, [mbYes, mbNo, mbNoToAll, mbYesToAll], 0, X, Y);                     Erg := MsgDlgPos('Entscheidung', Text, mtConfirmation, [mbYes, mbNo, mbNoToAll, mbYesToAll], 0, X, Y);     Result := Erg;
 end;
 
 function Frage(Text: string; const Col : TColor = clBtnFace): Boolean;
 const
 X : integer = 0;
 Y : integer = 0;
 var
 Erg: Word;
 begin
 Erg := MsgDlgPos(Text, mtConfirmation, [mbYes, mbNo, mbNoToAll, mbYesToAll], 0, X, Y);                     Erg := MsgDlgPos('Frage', Text, mtConfirmation, [mbYes, mbNo], 0, X, Y, Col);     Result := (Erg = mrYes);
 end;
 |  Kleines Schmankerl bei Variante B: Man kann nun das Abfrage-Fenster mit anderer Farbe aufrufen. Das hat den Vorteil, dass bestimmte Abfragen deutlicher auf dem Bildschirm
 zu erkennen sind (z.B. Abfragen zum Programmende). Aber das leuchtet ja logischerweise ein.
 Nun ist das Fenster beim nächsten Aufruf von "Entscheidung" immer dort, wo ich es "verlassen" habe. Vielleicht kann jemand das gebrauchen. 
 Wichtig natürlich: DIALOGS muss eingebunden werden.
 Grund der Bearbeitung: Neue Version und Erweiterungen. Weitere Erweiterungen kann man sich selber ausdenken (anderer Font, Fett, ...)._________________ Toleranz ist eine Grundvoraussetzung für das Leben.
 Für diesen Beitrag haben gedankt: Mathematiker
 |