Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизРазмеры и положения окна в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c