Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

Внезапно вызывается OnCanResize для формы   Найти похожие ветки 

 
stef   (2005-10-17 04:10) [0]

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

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

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


 
ЮЮ ©   (2005-10-17 04:38) [1]

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

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;


 
stef ©   (2005-10-17 04:55) [2]

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


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

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

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


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

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


 
stef ©   (2005-10-17 05:21) [5]

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


 
ЮЮ ©   (2005-10-17 07:35) [6]

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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
1-1129213892
Silver...
2005-10-13 18:31
2005.11.06
TOleContainer - Запустиь PowerPoint Presentation на показ


6-1122443038
vajo
2005-07-27 09:43
2005.11.06
Открытие файла из интернета


14-1129545313
Opilki_Inside
2005-10-17 14:35
2005.11.06
Защита БД


6-1121457872
redlord
2005-07-16 00:04
2005.11.06
все компы в сети


4-1125848301
lis1985
2005-09-04 19:38
2005.11.06
Расшарить ресурсы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский