Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Глюк с отображением вкладок 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.044 c
15-1266417633
Kerk
2010-02-17 17:40
2010.08.27
Сурков, замруководителя администрации президента, о модернизации


8-1205173351
Ramzes001
2008-03-10 21:22
2010.08.27
Помогите!


15-1271933235
Den
2010-04-22 14:47
2010.08.27
Процессы


2-1269717199
Studd
2010-03-27 22:13
2010.08.27
Алгоритм заполнения фигуры


4-1224075402
shurets
2008-10-15 16:56
2010.08.27
Создать профиль пользователя