Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизГлюк с отображением вкладок PageControl a Найти похожие ветки
← →
dj kondakov (2010-03-13 08:50) [0]Доброго времени суток! Натолкнулся на странный глюк и не знаю, как от него избавиться.
На главной форме приложения расположен PageControl с тремя вкладками. Есть отключаемая возможность запуска в свернутом состоянии и сворачивания в трей, тоже отключаемая. Проблема вот в чем. Если включены обе возможности (то есть приложение при запуске минимизируется в трей), то при его восстановлении оттуда PageControl показывает только активную вкладку, сколько ни переключай его на другие. В других случаях (запуск просто свернутым, сворачивание в трей и восстановление при ручном запуске) все нормально.
Тексты:
Процедура восстановления приложенияprocedure TForm1.RestoreMainForm;
var
i, j: integer;
begin
Application.ShowMainForm:=true;
ShowWindow(Application.Handle, SW_RESTORE);
ShowWindow(Application.MainForm.Handle, SW_RESTORE);
if not ShownOnce then begin
for I := 0 to Application.MainForm.ComponentCount -1 do
if Application.MainForm.Components[I] is TWinControl then
with Application.MainForm.Components[I] as TWinControl do
if Visible then begin
ShowWindow(Handle, SW_SHOWDEFAULT);
for J := 0 to ComponentCount -1 do
if Components[J] is TWinControl then
ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
end;
ShownOnce := True;
end;
end;
Процедура сворачивания приложенияprocedure TForm1.HideMainForm;
begin
Application.ShowMainForm:=false;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;
Код из файла проекта, отвечающий за сворачивание при запуске:Application.CreateForm(TForm1, Form1);
if Form1.CheckBox2.Checked then begin
if Form1.CheckBox3.Checked then begin
Form1.HideMainForm;
Form1.CreateTrayIcon;
end else
Application.Minimize;
end;
Application.Run;
Я сам подозреваю процедуру восстановления. Но в чем проблема, понять не могу. Помогите, плиз!
← →
Вася (2010-03-13 09:52) [1]А зачем цикл по компонентам и прямой вызов API-функций в процедуре восстановления? Для чего так написано?
← →
dj kondakov (2010-03-13 10:01) [2]Насколько я понял при чтении книги, откуда взят этот код, при создании формы в свернутом состоянии все компоненты на ней будут невидимы, и поэтому их надо показывать каждый по отдельности.
← →
Вася (2010-03-13 10:23) [3]тут какая то адская смесь из управления видимостью через свойство Visible и прямым применением API, что само по себе может привести к противоречиям, так как контролы состояние запоминают в приватном поле FVisible.
> при создании формы в свернутом состоянии все компоненты
> на ней будут невидимы, и поэтому их надо показывать каждый
> по отдельности
Это неверно.
Убери цикл по компонентам, и убери вызовы API, работай через свойства объектов
← →
dj kondakov (2010-03-13 10:33) [4]Мда... Закомментил цикл и заменил вызовы ShowWindow коротеньким Form1.Show;. Все заработало как надо! Ну и напишут же бред иногда в умных книжках...
Вася, спасибо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.066 c