2007. szeptember 28., péntek

How to programmatically change the size of the TOpenDialog window


Problem/Question/Abstract:

Is there a way to programmatically change the size of the TOpenDialog window so that more files will be shown? In Win98, the user can drag the dialog window to increase its size. Can the window size be increased under program control?

Answer:

The OnShow event seems to be a bit too early to do it. It has to be delayed a bit. Like this:

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure OpenDialog1Show(Sender: TObject);
  private
    { Private declarations }
    procedure MoveDialog(var Msg: TMessage); message WM_USER;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    Caption := OpenDialog1.FileName;
end;

procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
  PostMessage(Self.Handle, WM_USER, 0, 0);
end;

function GetDesktopWorkArea: TRect;
begin
  if not SystemParametersInfo(SPI_GETWORKAREA, 0, @Result, 0) then
    Result := Rect(0, 0, Screen.Width, Screen.Height);
end;

procedure TForm1.MoveDialog(var Msg: TMessage);
var
  rec: TRect;
  wh: HWND;
  l, t, r, b: Integer;
begin
  wh := Windows.GetParent(OpenDialog1.Handle);
  {if GetWindowRect(wh, rec) then}
  if IsWindow(wh) then
  begin
    rec := GetDesktopWorkArea;
    l := rec.Left;
    t := rec.Top;
    r := rec.Right;
    b := rec.Bottom;
    MoveWindow(wh, l, t, r, b, True);
  end;
end;

Nincsenek megjegyzések:

Megjegyzés küldése