Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.047 c
15-1267459908
PEAKTOP
2010-03-01 19:11
2010.08.27
Первая Украинская конференция по Firebird


15-1268394964
12
2010-03-12 14:56
2010.08.27
2x join в Access


2-1274358308
Tifon
2010-05-20 16:25
2010.08.27
Как определить какая кнопка была нажата на клавиатуре.


4-1236247314
kalexi
2009-03-05 13:01
2010.08.27
Как определить какую область занимает процесс в памяти.


2-1269157020
Delphist2
2010-03-21 10:37
2010.08.27
вставка из буфера




   Наверх