Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fensterposition falsch (https://www.delphipraxis.net/204084-fensterposition-falsch.html)

haentschman 22. Apr 2020 10:12


Fensterposition falsch
 
Hallöle...:P

Ich habe eine Form die einen eigenen Message Dialog darstellt. Diesem Dialog übergebe ich den Parent (TForm). Über diesen Parent setze ich den Dialog positionstechnisch mittig auf den Parent. Soweit so gut. Funktioniert eigentlich schmerzfrei.

Nur ein Fenster, auf dem der Dialog aufpoppen soll, will nicht als Parent funktionieren. :evil: Der Dialog geht immer auf dem ersten Monitor auf.

Prüfungen:
1. Positionen des Dialoges...ok. (sollte auf dem 2. Monitor aufgehen)
2. Eigenschaften der Parent Form geprüft...ok (identisch mit den anderen wo es funktioniert)

Delphi-Quellcode:
class function MessageDlg(MessageText: string; MessageHeader: string; MsgType: TMsgDlgType; Buttons: TMsgDlgButtons; MessageColor: Integer = clBlack; Parent: TForm = nil): Integer; overload;
...
function TfoBaseDialog.ShowDialog(MessageCaption: string; MsgType: TMsgDlgType; Buttons: TMsgDlgButtons; MessageLines: TStrings; Help: LongInt = 0; MessageColor: Integer = clBlack; Parent: TForm = nil): Integer;
var
  I: Integer;
begin
  FMessageHeader := MessageCaption;
  FMessageLines := MessageLines;
  Self.PopupParent := Parent; // vor der Positionierung!

  pngil32.GetIcon(Ord(MsgType), imgTop.Picture.Icon);
  if MessageCaption > '' then
  begin
    lblTop.Caption := MessageCaption;
  end
  else
  begin
    case MsgType of
      vmtAlert:
        lblTop.Caption := 'Warnung';
      vmtInformation:
        lblTop.Caption := 'Information';
      vmtError:
        lblTop.Caption := 'Fehler';
      vmtQuestion:
        lblTop.Caption := 'Frage';
      vmtOpen:
        lblTop.Caption := 'Öffnen';
      vmtSave:
        lblTop.Caption := 'Speichern';
    end;
  end;

  CreateButtons(Buttons);

  for I := 0 to FButtonList.Count - 1 do
  begin
    TButton(FButtonList[0]).Left := ClientWidth - 5 - (FButtonList.Count * 75) - ((FButtonList.Count - 1) * 5);
    if I > 0 then
    begin
      TButton(FButtonList[I]).Left := TButton(FButtonList[0]).Left + ((I * 75) + (I * 5));
    end;
  end;

  // Position bezogen auf Parent
  if Assigned(Parent) then
  begin
    Self.Top := Parent.Top + Floor(Parent.Height / 2) - Floor(Self.Height / 2); // mittig
    Self.Left := Parent.Left + Floor(Parent.Width / 2) - Floor(Self.Width / 2); // mittig
  end
  else
  begin
    Self.Position := poScreenCenter;
  end;

  Self.ShowModal;
  Result := FDialogResult;
end;
Delphi-Quellcode:
procedure TfoPreferences.DoOnLoadError(Sender: TObject; ErrorType: TBlubbErrorType; FileName: string); // Parent Form
begin
  case ErrorType of
    etLoadFile:
    begin
      TBlubbMessageDialog.MessageDlg(Format(conErrorLoadFile, [QuotedStr(FileName)]), conTextOpen, vmtError, [buOk], clBlack, Self);
    end;
  end;
end;
Was übersehe ich?

Danke... :wink:

Uwe Raabe 22. Apr 2020 11:00

AW: Fensterposition falsch
 
Vielleicht solltest du bei
Delphi-Quellcode:
if Assigned(Parent) then
auch noch
Delphi-Quellcode:
Self.Position := poDesigned
setzen.

haentschman 22. Apr 2020 11:08

AW: Fensterposition falsch
 
Liste der Anhänge anzeigen (Anzahl: 2)
Danke...:P

schau ich mal...


Test:
...egal ob im OI oder als Zuweisung...ohne Effekt. :cry:

haentschman 27. Apr 2020 06:47

AW: Fensterposition falsch
 
:cry: ...ihr habt mich vergessen.

TBx 27. Apr 2020 07:47

AW: Fensterposition falsch
 
Zitat:

Zitat von haentschman (Beitrag 1462645)
Diesem Dialog übergebe ich den Parent (TForm).

Sicher?
Lt. Deinem Screenshot ist der Parent nil :gruebel:

haentschman 27. Apr 2020 08:23

AW: Fensterposition falsch
 
Danke für deine Unterstützung...8-)

Delphi-Quellcode:
function TfoBaseDialog.ShowDialog(MessageCaption: string; MsgType: TMsgDlgType; Buttons: TMsgDlgButtons; MessageLines: TStrings; Help: LongInt = 0; MessageColor: Integer = clBlack; Parent: TForm = nil): Integer;
...der Parameter der function kann sowohl nil als auch ein object sein. In diesem Falle übergebe ich die Form (Self).
Delphi-Quellcode:
TBlubbMessageDialog.MessageDlg(Format(conErrorLoadFile, [QuotedStr(FileName)]), conTextOpen, vmtError, [buOk], clBlack, Self);


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 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