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

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

Почему может не срабатывать TGauge.Visible? [D7, XP]


Zheksonz ©   (2012-02-28 20:05:00) 

TStatusBarявляется "предком" двух TGauge, на панелях которого они отображаются во время некоторых процессов. Один по команде Gauge1.Visible = false; становится невидимым, а второй Gauge2.Visible = falseнет(( Обычно источником подобной мистики является моя невнимательность, а иногда и тупость, но в этот раз я всё проверил вдоль и поперёк. StatusBar.Refresh делу не помог(( Может есть какое-то ограничение на количество отображаемых Gauge в Statusbar_е?


Забаненный   (2012-02-29 02:51:00) [1]

Кстати да, даже в ХЕ2 такие грабли по-прежнему могут быть.


Германн   (2012-02-29 01:46:00) [2]


> Zheksonz   (28.02.12 23:53) [9]
>
>
> > Германн ©   (28.02.12 23:47) [8]
>
>
> Он 43 кб.

Можно выложить на Webfile или ещё куда-нибудь.
Вот просто интересно сколько в этом файле есть TGauge?


Zheksonz   (2012-02-29 01:34:00) [3]


> Забаненный   (29.02.12 01:00) [10]


На будущее буду иметь в виду, но сейчас возвращаться к Gauge нет смысла. ProgressBar вполне устраивает. Спасибо.


Забаненный   (2012-02-29 01:00:00) [4]


> Parent := StatusBar1;

а не лучше ли родителем делать панель? и если уж так хочется гауг, то дай ему еще родителя, ее видимостью управляй. ту же панель, например.


Zheksonz   (2012-02-28 23:53:00) [5]


> Германн ©   (28.02.12 23:47) [8]


Он 43 кб.

В общем сдался я, вернее решил остановить накапливание зря потраченного времени...

Заменил Gauge обычным ProgressBar_ом, ничего не меняя в алгоритме, и всё заработало как нужно.


Германн   (2012-02-28 23:47:00) [6]

DFM файл можешь показать?


Zheksonz   (2012-02-28 23:39:00) [7]

Если смотрю отладчиком, то Gauge.Progressи Gauge.Visibleпринимают необходимые значения, 0 и false соответственно.

Удивительно же то, что после прогона ф-ции с отладчиком объект становится невидимым, без отладчика же, по крайней мере визуально, значение не меняется на 0 и Gauge остаётся видимым.

Ставил задержку перед выполнением этих операций, ставил Application.ProcessMessages, делал Refresh и Repaint StatusBar_а и Gaugе... всё бестолку. Заново закидывал эти компоненты, на случай если наклацал случайно в свойствах лишнего... в общем поизвращался на славу!

Вот и в чём кака?


Zheksonz   (2012-02-28 22:46:00) [8]

И ведь не в этом суть, а почему не включается невидимость компонента?


Zheksonz   (2012-02-28 22:45:00) [9]


> Anatoly Podgoretsky ©   (28.02.12 22:40) [4]


Предком нет, а родителем, учитывая Gauge.Parent := StatusBar1;?


Anatoly Podgoretsky   (2012-02-28 22:40:00) [10]

> Zheksonz  (28.02.2012 20:05:00)  [0]

TStatusBar не является предком TGauge


Zheksonz   (2012-02-28 21:37:00) [11]

и всё-таки мистика!

убрал из FormCreateкод цепляющий g2 на StatusBar1 и по вызову g2.Visible := false;g2 на форме перестал отображаться. Т.е. в самом g2 нет проблем, как и в алгоритме использования. А что же в этом StatusBar_е может быть не так? Ведь второй Gauge, отображаемый в этом же StatusBar_е, только на другой панели, работает нормально.

Вот код привязки обоих Gauge:


with g1 do
begin
 Parent := StatusBar1;
 Progress := 0;
 Top := 2;
 Left := StatusBar1.Panels[0].Width;
 Height := StatusBar1.Height - Top;
 Width := 98;
end;

with g2 do
begin
 Parent := StatusBar1;
 Progress := 0;
 Top := 2;
 Left := StatusBar1.Panels[0].Width + StatusBar1.Panels[1].Width;
 Height := StatusBar1.Height - Top;
 Width := 98;
end;


Zheksonz   (2012-02-28 20:52:00) [12]

хм(((((((((( Gauge.Visible := true;вначале процедуры, до начала цикла, делает видимым объект, а после окончания цикла, в конце процедуры, обнуление Gauge проходит успешно, а Gauge.Visible := falseнет(((


Zheksonz   (2012-02-28 20:31:00) [13]

кинул на новую форму StatusBar и два Gauge, так же раскинул их по панелям. Так всё работает, в программе же, несмотря на то, что принципиальных отличий в работе именно StatusBar_а и Gauge - нет. Мистика!


Наверх

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