Hallöle...
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.
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...