Ik had (weer) het probleem dan mijn messageboxen niet verschenen waar ik wou.
Deze messagebox is min of meer een kopie van de MessageDlgPosHelp functie uit de Dialogs unit. Het enige verschil is het instellen van de ParentHandle.
Hierdoor heeft deze melding iets meer de neiging om bovenop te verschijnen dan de gewone ShowMessage, die nog weleens achter andere schermen schuilgaat.
Het is niet de enige manier om dit voor elkaar te krijgen, maar het werkt wel (voor mij). Bovendien zet deze direct het warning-icoon in de messagebox, hetgeen ik persoonlijk ook voor normale messages wel netjes vindt.
Code:
type
TMegaForm = class(TForm);
function MyMessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
const HelpFileName: string): Integer;
var
f: TMegaForm;
begin
f := TMegaForm(CreateMessageDialog(Msg, DlgType, Buttons));
with f do
try
Caption := Application.Title;
HelpContext := HelpCtx;
HelpFile := HelpFileName;
if X >= 0 then Left := X;
if Y >= 0 then Top := Y;
if (Y < 0) and (X < 0) then Position := poScreenCenter;
if Assigned(Screen.ActiveForm) then
ParentWindow := Screen.ActiveForm.Handle
else
ParentWindow := GetActiveWindow();
Result := ShowModal;
finally
Free;
end;
end;
procedure ShowError(AMsg: string);
begin
MyMessageDlgPosHelp(AMsg, mtError, [mbOK], 0, -1, -1, '');
end;
procedure ShowMsg(AMsg: string);
begin
MyMessageDlgPosHelp(AMsg, mtWarning, [mbOK], 0, -1, -1, '');
end;
Bookmarks