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

Вниз

Как определить что форма больше неизменяет свои размеры   Найти похожие ветки 

 
leonidus   (2004-07-03 22:28) [0]

Проблема в следующем: у меня на форме есть контролы которые не умеют сами масштабироваться вместе с формой, поэтому я вынужден сам расчитывать их размеры. Блок пересчета размеров висит на обработчике OnResize данной формы, но это событие при изменении размера формы срабатывает очень часто, в результате чего контролы начинают мигать от частой прорисовки. Как этого избежать, т.е. надо понять что форма уже больше изменять размер не будет и только тогда отрисовать новый размер контрола?


 
YurikGL ©   (2004-07-03 22:35) [1]

А не проще запретить resize ?


 
Vemer ©   (2004-07-03 22:38) [2]

Поставь у формы BorderStyle := Single, только не забудь проверять ширину экрана на старте..


 
jack128 ©   (2004-07-03 22:41) [3]


> Блок пересчета размеров висит на обработчике OnResize данной
> формы, но это событие при изменении размера формы срабатывает
> очень часто
ты уверен? у меня (d5, win2k) это событие срабатывает именно при ОКОНЧАНИИ изменения размероов формы..


 
leonidus   (2004-07-03 23:08) [4]

>jack128 у меня Delphi 6 WindowsXP, но в любом случае это значения не имеет, вот код который я поставил на OnResize:

k:=label2.tag;
inc(k);
label2.tag:=k;
label2.Caption:=inttostr(k);

Стоит потянуть за границу формы, значение label2.Caption бежит как сумашедший....

А как запретить resize, в смысле самому окну запретить изменять размер? BorderStyle := Single тоже не подходит форма ДОЛЖНА умень изменять свои размеры


 
YurikGL ©   (2004-07-03 23:10) [5]


> leonidus   (03.07.04 23:08) [4]

Когда это надо - выставляй BorderStyle := Single, когда надо -  Sizeable


 
jack128 ©   (2004-07-03 23:22) [6]


> значение label2.Caption бежит как сумашедший....
? У мя увеличивается только на единицу..
посмотри где в D6 вызыватся метод Resize? В D5 в методе TWinControl.WmSize()
Вот что про это сообщение в WinSDK пишут:
The WM_SIZE message is sent to a window after its size has changed.


 
YurikGL ©   (2004-07-03 23:31) [7]


> jack128 ©   (03.07.04 23:22) [6]

procedure TForm1.FormResize(Sender: TObject);
begin
Edit1.Text:=IntToStr(Form1.Width);
end;

Приведенный код действительно срабатывает не после изменения размера формы а постоянно...

Автору можно посоветовать обрабатывать события OnMouseDown(зафиксировали размеры формы) и OnMouseUp (посмотрели если размеры изменились, то выполнили действия)


 
YurikGL ©   (2004-07-03 23:33) [8]

flag:boolean
Или вариант в OnMouseDown выставлять флаг в flag:=false в FormResize выставлять его в Flag:=True а потом в OnMouseUp смотреть
if flag then форма изменила размер...

З.Ы. D7 WinXP


 
leonidus   (2004-07-04 00:09) [9]

>YurikGL спасибо, попробую, просто хотелось что-то поизяшнее флагов:)


 
jack128 ©   (2004-07-04 02:11) [10]


> leonidus   (04.07.04 00:09
попробуй таки напрямую отлавливать WM_SIZE..


 
Григорьев Антон ©   (2004-07-04 07:00) [11]


> jack128 ©   (03.07.04 22:41) [3]
>
> > Блок пересчета размеров висит на обработчике OnResize
> данной
> > формы, но это событие при изменении размера формы срабатывает
>
> > очень часто
> ты уверен? у меня (d5, win2k) это событие срабатывает именно
> при ОКОНЧАНИИ изменения размероов формы..


Это где-то в Панели управления настраивается как будет вести себя форма при изменении размера - всё время перерисовываться или сначала дождётся заершения изменения размеров и только потом перерисуется.


 
Mim1 ©   (2004-07-04 09:27) [12]

Как не странно опция эта называется "отображать содержимое окна при перетаскивании". При ее вклюсении изменение размера будет происходить не при помощи пустой рамки (что имхо значительно изящьнее) а с миганием как у автора вопроса.
Думается что обрабатывать сообщение WM_EXITSIZEMOVE в этой ситуации самое оно.


 
DVM ©   (2004-07-04 09:27) [13]

WM_SIZE - то, что надо. Уведомление о завершении изменения размера. Приходит оно все равно несколько раз, но контролы моргать не сильно будут. В совокупности с двойной буферизацией получиться долно нормально.


 
leonidus   (2004-07-04 11:08) [14]

Проблема в том, что если я перехватываю WM_SIZE, то я так понял ОС возлагает на меня все обязанности по масштабированию ВСЕХ контролов на данной форме, а мне это совершенно не надо, на форме только 2 контрола из 30 нуждаются в принудительном масштабировании, остальные и сами справляются.


 
jack128 ©   (2004-07-04 12:00) [15]


> меня все обязанности по масштабированию ВСЕХ контролов на
> данной форме
c чего это? inherited вызываешь?


 
KSergey ©   (2004-07-04 12:13) [16]

> [14] leonidus   (04.07.04 11:08)
> Проблема в том, что если я перехватываю WM_SIZE, то я так
> понял ОС возлагает на меня все обязанности по масштабированию
> ВСЕХ контролов на данной форме,

Все будет путем, если не забыть вызвать inherited

Думаю, что прав [11] Григорьев Антон ©   (04.07.04 07:00)
Если у пользователя слабая тачка - нефиг этот крыж выставлять, моргать не будет. Если хорошая - пусть мирится с морганием
Хотя в дельфи немного еще из-за своих наворотов (в VCL) доп. моргания могут быть при изменении размеров контролов, увы... (оповещаются родители, примерно так)
Но думаю все же, что пользователь тут сам себе враг, раз поставил сей крыж.



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

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

Наверх




Память: 0.49 MB
Время: 0.034 c
1-1088682421
Koba
2004-07-01 15:47
2004.07.18
Install


3-1088146105
Bless
2004-06-25 10:48
2004.07.18
Row cannot be located for updating. Some values may have been cha


1-1089025841
killer
2004-07-05 15:10
2004.07.18
Раскрыто ли PopupMenu


1-1089106698
Ш-К
2004-07-06 13:38
2004.07.18
OnKeyDown as OnKeyPress


6-1084803819
Dead MAZDAI
2004-05-17 18:23
2004.07.18
Как "резать" баннеры в браузерах?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский