Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.03 c
8-1075755416
crystalmind
2004-02-02 23:56
2004.05.02
Гигантские растры


9-1069698959
DimaS-Page
2003-11-24 21:35
2004.05.02
Как сгладить края у полигоннов (GL_POLIGON).


4-1078402242
kentavr
2004-03-04 15:10
2004.05.02
TRAY


3-1080889758
ВадимВС
2004-04-02 11:09
2004.05.02
Ошибка BDE для PDOXUSRS.NET под Win-2000


6-1078175716
ser_ega
2004-03-02 00:15
2004.05.02
Explorer




   Наверх