Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.058 c
15-1268326974
Правильный$Вася
2010-03-11 20:02
2010.08.27
D2010 обрела уже стабильность?


15-1274823496
Германн
2010-05-26 01:38
2010.08.27
Хинт у компонента со свойством Enabled=False


4-1229333584
Nucer
2008-12-15 12:33
2010.08.27
GetTCPTable


15-1261482460
Piter
2009-12-22 14:47
2010.08.27
Win32/Kryptik троян подцепил


2-1270459108
MonoLife
2010-04-05 13:18
2010.08.27
Запрос Local SQL.





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