Почему изменяется Window.Handle
От: TwisterMan Россия  
Дата: 21.03.05 03:44
Оценка:
Доброго времени сутк, ALL.
Вопрос в следующем, есть такой вот простецкий код:

procedure TForm1.Button1Click(Sender: TObject);
begin
 showmessage('handle='+inttostr(handle));
 borderStyle:=bsSizeable;
 showmessage('handle='+inttostr(handle));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 showmessage('handle='+inttostr(handle));
 borderStyle:=bsNone;
 showmessage('handle='+inttostr(handle));
end;


Обратите внимание, что при смене типа бордюра меняется handle окна.
Кто в курсе, по какой причине это происходит и какой эффект это может оказать на работу приложения.
(например, объекты при закрытии окна не уничтожатся автоматом или ещё чего)
Re: Почему изменяется Window.Handle
От: ak_miass Россия  
Дата: 21.03.05 04:29
Оценка: 6 (1)
Здравствуйте, TwisterMan, Вы писали:

Вот кусок из VCL5:

procedure TCustomForm.SetBorderStyle(Value: TFormBorderStyle);
begin
  if FBorderStyle <> Value then
  begin
    FBorderStyle := Value;
    AutoScroll := FBorderStyle in [bsSizeable, bsSizeToolWin];
    if not (csDesigning in ComponentState) then RecreateWnd;
  end;
end;


Т. е. видим, что в Real-тайме окно убивается и создаётся заново (с новым стилем WS_EX_CLIENTEDGE или без него).
Отсюда новый Handle.

P.S. Иногда полезно заглянуть в исходники...
Re[2]: Почему изменяется Window.Handle
От: TwisterMan Россия  
Дата: 21.03.05 04:58
Оценка:
Здравствуйте, ak_miass, Вы писали:

>Вот кусок из VCL5:

>procedure TCustomForm.SetBorderStyle(Value: TFormBorderStyle);
>begin
>  if FBorderStyle <> Value then
>  begin
>    FBorderStyle := Value;
>    AutoScroll := FBorderStyle in [bsSizeable, bsSizeToolWin];
>    if not (csDesigning in ComponentState) then RecreateWnd;
>  end;
>end;


>Т. е. видим, что в Real-тайме окно убивается и создаётся заново (с новым стилем WS_EX_CLIENTEDGE или без него).

>Отсюда новый Handle.

Спасибо.

>P.S. Иногда полезно заглянуть в исходники...


 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.