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

Вниз

надо узнать координаты окна   Найти похожие ветки 

 
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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.062 c
1-1109491464
BVV
2005-02-27 11:04
2005.03.13
Принудительное завершение работы потоков


11-1092757042
ecm
2004-08-17 19:37
2005.03.13
2Kladov : Bug Fix OnIdle?


1-1109678219
Doxygen
2005-03-01 14:56
2005.03.13
Файл или директория


3-1108407976
SilverDragon
2005-02-14 22:06
2005.03.13
Создание dBase БД


3-1107753931
lats
2005-02-07 08:25
2005.03.13
Блокировка таблицы транзакцией в MSSQL