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

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

Внезапно вызывается OnCanResize для формы


stef ©   (2005-10-17 04:10:00) 

Здравствуйте гуру. У меня такой глупый вопрос: почему при выполнении одной из строк кода

form1.label1.caption:=...
form1.label1.Top:=...
form1.label1.left:=...

начинает обрабатываться событие OnCanResize формы form1.
В книгах про это ничего не сказано. Возможно, так и должно быть? Странно это как-то. Только не надо смеяться - я серьезно.


ЮЮ   (2005-10-17 07:35:00) [1]

А ещё проше, дабы отключить вызов обработчкика, вызванного кодом в программе, но оставить его при манипуляциях пользователя, использовать в коде такую конструкцию:

 <объект>.OnXXX := nil;
 try
   изменеие св-в объекта, могущих вызвать обработчик OnXXX
 finally  
   <объект>.OnXXX := <обработчик события>;
 end;


stef   (2005-10-17 05:21:00) [2]

Ну ведь это же можно просто переопределить указанные методы, только оставить в них (в переопределенных) части кода из исходников TControl, которые (части) не вызывают OnResize или OnCanResize. Глючить будет!!! Но все равно спасибо.


ЮЮ   (2005-10-17 05:08:00) [3]

Ну почему же любой.
Т.к.
 TControl = class(TComponent)
 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); virtual;
то SetBounds( можно перекрыть в наследнике так, как пожелаешь, только тогда приватные методы типа CheckNewSize будут недоступны и часть кода придется писать самому


ЮЮ   (2005-10-17 05:00:00) [4]

по поводу On CanResize, аналогично:

procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
 if CheckNewSize(AWidth, AHeight) and ...
end

function TControl.CheckNewSize(var NewWidth, NewHeight: Integer): Boolean;
begin
...
   Result := not AutoSize or (DoCanAutoSize(W2, H2) and (W2 = W) and (H2 =
...
end


stef   (2005-10-17 04:55:00) [5]

Во, блин, ПАСИБА. Это, чтож получается - любой производный от TControl объект, при попытке обращения к его определенным свойствам будет вызывать OnResize? Классно!


ЮЮ   (2005-10-17 04:38:00) [6]

А в исходники заглянуть религия не позволяет?

procedure TControl.SetLeft(Value: Integer);
begin
  SetBounds(Value, FTop, FWidth, FHeight);
 Include(FScalingFlags, sfLeft);
end;

procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
 ...
   if not (csLoading in ComponentState) thenБ Resize;
end;

procedure TControl.Resize;
begin
 if Assigned(FOnResize) then FOnResize(Self);
end;


Наверх

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