Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Внизнадо узнать координаты окна Найти похожие ветки
← →
read_me (2005-01-29 19:29) [0]надо узнать координаты окна и его высоту и ширину,а потом сделать другое окно с такимиже координатами, я вот написал текст а он почемуто закрывается и вызывает системную ошибку, напишите что не так делаю?
procedure TForm1.Button4Click(Sender: TObject);
var
a1:pwindowplacement;
h:hwnd;
wnd:hwnd;
begin
h:= form1.Handle;
GetWindowPlacement(h,@a1);
wnd:= FindWindow( 0 ,"калькулятор" );
SetWindowPlacement(wnd,@a1);
end;
← →
TUser © (2005-01-29 20:00) [1]PWindowPlacement = ^TWindowPlacement;
Это указатель. Он указывает на ячейку памяти, где начинается эта структура. Иными словами - надо сначала выделить эту память. Это делает в Паскале оператор New. Потом можно работать. Оператор СОБАКА тут не нужен (точнее - опасен), т.к. он делает указатель на данные из некой переменной, а у тебя - и так указатель. В конце - надо память освободить, это делает Dispose.
← →
Piter © (2005-01-29 20:31) [2]объявление указателя не означает выделения памяти под структуру, на которую он указывает:
procedure TForm1.Button4Click(Sender: TObject);
var
a1:pwindowplacement;
h:hwnd;
wnd:hwnd;
begin
h:= form1.Handle;
New(a1);
try
GetWindowPlacement(h,@a1);
wnd:= FindWindow( 0 ,"калькулятор" );
SetWindowPlacement(wnd,@a1);
finally
Dispose(a1);
end;
end;
← →
read_me (2005-01-29 20:36) [3]спасибо правдо всё заработало
← →
Piter © (2005-01-29 20:47) [4]TUser © (29.01.05 20:00) [1]
Оператор СОБАКА тут не нужен
точно, пропустил. Тогда так:procedure TForm1.Button4Click(Sender: TObject);
var
a1:pwindowplacement;
h:hwnd;
wnd:hwnd;
begin
h:= form1.Handle;
New(a1);
try
GetWindowPlacement(h,a1);
wnd:= FindWindow( 0 ,"калькулятор" );
SetWindowPlacement(wnd,a1);
finally
Dispose(a1);
end;
end;
А вообще, я бы уж написал, объявляю саму структуру и немного переделав:
procedure TForm1.Button4Click(Sender: TObject);
var
wp:TWindowPlacement;
wnd:hwnd;
begin
wnd := FindWindow( 0 , "калькулятор");
if (wnd > 0)
and ( GetWindowPlacement(Handle, @wp) ) then
SetWindowPlacement(wnd, @wp)
else
{не получилось} ;
end;
← →
Piter © (2005-01-29 20:48) [5]заработало - это пол дела... тут главное - понять
← →
kaZaNoVa © (2005-01-29 20:51) [6]Piter © (29.01.05 20:48) [5]
ага, этот код и ребенку понятен))
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.033 c