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

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

Мерцает окно при изменении размеров. [D7, XP]


Псарь ©   (2011-09-21 17:15:00) 

Окно работает в двух размерах, при переключении видны мерцания.
Как от них избавиться?
Функция LockWindowUpdate не помогает.


procedure TForm1.SetState(IsShow: boolean);
begin
 If IsShow then
 begin
   BorderStyle := bsToolWindow;
   Left        := Centered(Screen.Width,  FNormalWidth);
   Top         := Centered(Screen.Height, FNormalHeight);
   ClientWidth := FNormalWidth;
   ClientHeight:= FNormalHeight;
 end else
 begin
   LockWindowUpdate(Handle);
   BorderStyle := bsNone;
   Left        := 100;
   Top         := 100;
   ClientWidth := 100;
   ClientHeight:= 100;
   LockWindowUpdate(0);
 end;
end;


Псарь   (2011-09-21 19:03:00) [1]


> Омлет ©   (21.09.11 18:54) [5]
>
> Зачем менять BorderStyle?


Секрет фирмы. :)


Омлет   (2011-09-21 18:54:00) [2]

Зачем менять BorderStyle?


Псарь   (2011-09-21 18:35:00) [3]


> RWolf ©   (21.09.11 17:51) [2]


О, гораздо меньше мерцает. Спс. :)


> Sapersky   (21.09.11 17:55) [3]


> RecreateWnd;


Делал окно на время не видимым, толку ноль.
Скрыть пересоздание не удается.


Sapersky   (2011-09-21 17:55:00) [4]

Дело не столько в размерах, сколько в BorderStyle:

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;


RWolf   (2011-09-21 17:51:00) [5]

SetBounds?


Псарь   (2011-09-21 17:17:00) [6]

Лучше так:


procedure TForm1.SetState(IsShow: boolean);
begin
If IsShow then
begin
  BorderStyle := bsToolWindow;
  Left        := 80;
  Top         := 88;
  ClientWidth := 200;
  ClientHeight:= 200;
end else
begin
  LockWindowUpdate(Handle);
  BorderStyle := bsNone;
  Left        := 100;
  Top         := 100;
  ClientWidth := 100;
  ClientHeight:= 100;
  LockWindowUpdate(0);
end;
end;


Наверх

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