Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

надо узнать координаты окна


read_me ©   (2005-01-29 19:29:00) 

надо узнать координаты окна и его высоту и ширину,а потом сделать другое окно с такимиже координатами, я вот написал текст а он почемуто закрывается и вызывает системную ошибку, напишите что не так делаю?
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;


kaZaNoVa   (2005-01-29 20:51:00) [1]

Piter ©   (29.01.05 20:48) [5]
ага, этот код и ребенку понятен))


Piter   (2005-01-29 20:48:00) [2]

заработало - это пол дела... тут главное - понять


Piter   (2005-01-29 20:47:00) [3]

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;


read_me   (2005-01-29 20:36:00) [4]

спасибо правдо всё заработало


Piter   (2005-01-29 20:31:00) [5]

объявление указателя не означает выделения памяти под структуру, на которую он указывает:

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;


TUser   (2005-01-29 20:00:00) [6]

PWindowPlacement = ^TWindowPlacement;
Это указатель. Он указывает на ячейку памяти, где начинается эта структура. Иными словами - надо сначала выделить эту память. Это делает в Паскале оператор New. Потом можно работать. Оператор СОБАКА тут не нужен (точнее - опасен), т.к. он делает указатель на данные из некой переменной, а у тебя - и так указатель. В конце - надо память освободить, это делает Dispose.


Наверх

Титульная страница Поиск, карта сайта Написать письмо