Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Размеры и положения окна в OpenDialog   Найти похожие ветки 

 
sapsi   (2004-04-16 10:47) [0]

Как можно при открытии окна на OpenDialog.execute установить размеры и координаты?
Спасибо.


 
Юрий Зотов ©   (2004-04-16 12:14) [1]

F1: OnShow, Handle, SetWindowPos.


 
ASMiD   (2004-04-16 12:24) [2]

Не пройдет!


 
PVOzerski ©   (2004-04-16 12:25) [3]

2Юрий Зотов[1]:
Всё так, но с маленькой хитростью. По крайней мере в D3 (думаю, и в более новых тоже), свойство Handle в VCL-овских Open- и Save-диалогах содержит не хэндл главного окна диалога, а хэндл некого невидимого контрола, расположенного на диалоге. Так что нужно юзать GetParent от значения свойства Handle.


 
PVOzerski ©   (2004-04-16 12:26) [4]

И задавать эти координаты придется из отдельного потока, поскольку диалог модальный.


 
Романов Р.В. ©   (2004-04-16 13:00) [5]


> PVOzerski ©   (16.04.04 12:26) [4]

Можно и без потока обойтись.

const
 WMCDP = WM_User+301;
type
 TForm1 = class(TForm)
 public
   procedure CDP(var Msg: TMessage); message WMCDP;
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 postmessage(handle, WMCDP, 0, 0);
 Od.Execute;
end;

procedure TForm1.CDP(var Msg: TMessage);
begin
 SetWindowPos(GetParent(Od.Handle), 0, 50, 50, 900, 700,
       SWP_NOZORDER + SWP_NOACTIVATE)
end;


 
Юрий Зотов ©   (2004-04-16 13:20) [6]

Выдержка из справки:

The Handle property, which provides access to the dialog’s window handle after a call to Execute, can be used in OnShow and OnClose event handlers.

Ну разве не негодяи?
:о)


 
sapsi   (2004-04-16 14:18) [7]

ВСе это правильно.... я могу найти окно по Хэндлу, но разве сам opendialog нельзя отобразить сразу в нужном месте, используя его метод getstaticrect?


 
Романов Р.В. ©   (2004-04-16 14:39) [8]

угу, низя


 
PVOzerski ©   (2004-04-16 15:32) [9]

Вот, набросал нечто (демку). Не шедевр, но кое-что умеет.
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   OpenDialog1: TOpenDialog;
   Button1: TButton;
   procedure OpenDialog1Show(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   fDlgHandle:tHandle;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
 FDlgHandle:=GetParent((Sender as tOpenDialog).Handle);

end;

function Mover(var H:tHandle):longint;stdcall;
begin
 repeat
  if H<>0 then
   begin
    MoveWindow(H,1,1,500,500,true);
    ExitThread(0);
   end;
  sleep(1);
 until false;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
 ID:longint;
begin
 FDlgHandle:=0;
 CreateThread(nil,0,@Mover,@FDlgHandle,0,ID);
 OpenDialog1.Execute;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
3-1081239661
Akmen
2004-04-06 12:21
2004.05.02
Как избавиться от Too many open files?


1-1081855137
infom
2004-04-13 15:18
2004.05.02
dxStatusBar


1-1081924598
Tolyan
2004-04-14 10:36
2004.05.02
Разные объекты с одним именем


14-1081353939
DDA
2004-04-07 20:05
2004.05.02
Прикол2


3-1081416502
wild_arg
2004-04-08 13:28
2004.05.02
Выбор максимума внутри групп