19-10-2018, Saat: 12:10
Uygulamamız içinde zaman zaman kullandığımız TFileOpenDialog, TFileSaveDialog vb dialog pencerelerinin ekranda garip yerlerde çıkması üzerine geliştirdiğim ve sizlerle de paylaşmak istediğim koddur. Aşağıdaki kod ilgili dialog penceresini ekranın ortasında gösterir.
TCustomFileDialogHelper = class helper for TCustomFileDialog
public
function ExecuteCenter : Boolean;
end;
{ TCustomFileDialogHelper }
function TCustomFileDialogHelper.ExecuteCenter: Boolean;
var
ADialog : TCustomFileDialog;
begin
ADialog := Self;
TThread.CreateAnonymousThread(
procedure
begin
while not IsWindowVisible(ADialog.Handle) do ;
TThread.Queue(
nil,
procedure
var
ALeft,
ATop : Integer;
ARect : TRect;
AHandle : NativeUInt;
begin
AHandle := BeginDeferWindowPos(1);
try
GetWindowRect(ADialog.Handle, ARect);
ALeft := (Screen.Width div 2) - (ARect.Width div 2);
ATop := (Screen.Height div 2) - (ARect.Height div 2);
DeferWindowPos(
AHandle,
ADialog.Handle,
0,
ALeft,
ATop,
ARect.Width,
ARect.Height,
SWP_NOZORDER
);
finally
EndDeferWindowPos(AHandle);
end;
end
);
end
).Start;
Result := Self.Execute;
end;