Delphi Can

Orjinalini görmek için tıklayınız: Centered Vista Dialogs
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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;

Teşekkürler.