Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему форма не становится активной? / 5 сообщений из 5, страница 1 из 1
29.11.2021, 13:36
    #40115864
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему форма не становится активной?
В тексте есть проверка по таймеру, у активной формы обновлять информацию, если в базе изменились данные.
Код: pascal
1.
2.
3.
if Active then // проверяем только у активной формы
        if IsNewData('repair_request') then// и появились новые данные
          UpdateData;                   // то обновляем сетки



Форма кладется вот таким образом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
procedure TfmControlIT.SelectForm(AFormClass: TUpdatingFormClass);
// Выбор формы для отображения на главной панели
var
  i: integer;
begin
  // Если такая форма уже стоит
  for i := 0 to PanelMain.ControlCount - 1 do
    if PanelMain.Controls[i] is AFormClass then
    begin // Ловим форму
      CurrentForm := TUpdatingForm(PanelMain.Controls[i]);
      CurrentForm.Parent := PanelMain;
      Caption := CurrentForm.Caption;
      CurrentForm.BringToFront;
      exit;
    end;

  // Если эта форма не стояла, то создаем ее и вставляем
  if Assigned(AFormClass) then
  begin
    CurrentForm := AFormClass.Create(fmControlIT); // Создаем форму выбранного класса
    CurrentForm.Hide;
    CurrentForm.BorderStyle := bsNone;
    CurrentForm.Parent := PanelMain;
    Caption := CurrentForm.Caption;
    CurrentForm.Align := alClient;
    CurrentForm.BringToFront;
    CurrentForm.Show;
    CurrentForm.Realign;
    CurrentForm.WindowState := wsMaximized;
    if CurrentForm.CanFocus then
      CurrentForm.SetFocus;
  end;
end;


При трассировке показывает, что Active = false, хотя форма открыта.
...
Рейтинг: 0 / 0
29.11.2021, 14:01
    #40115878
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему форма не становится активной?
svnvlad
При трассировке показывает, что Active = false, хотя форма открыта.
Но активно окно отладчика. Если нужно проверять видна ли форма, то есть Visible
...
Рейтинг: 0 / 0
29.11.2021, 16:36
    #40115932
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему форма не становится активной?
_Vasilisk_
svnvlad
При трассировке показывает, что Active = false, хотя форма открыта.
Но активно окно отладчика. Если нужно проверять видна ли форма, то есть Visible

Те формы, которые размещаются таким образом, показывают Active = true в отладчике
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TfmMain.actRepairRequestExecute(Sender: TObject);
begin
  if fmRepairRequest = nil then
    begin
      fmRepairRequest := TfmRepairRequest.Create(Application);
      fmRepairRequest.IsDialog := false;
    end
  else
    fmRepairRequest.BringToFront;
end;



А в том случае были как бы формы матрешки. Родительская форма вот так размещалась, как здесь, а на ней вторая форма с помощью ручного ее размещения на панели родительской формы. Вот она не опознается как Active.
...
Рейтинг: 0 / 0
29.11.2021, 17:05
    #40115938
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему форма не становится активной?
svnvladВот она не опознается как Active.

И не должна. Active это форма с активным заголовком, принимающая
пользовательский ввод. Когда форма помещается на панель, она становится дочерним
окном и активной быть не может.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.11.2021, 17:13
    #40115940
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему форма не становится активной?
Dimitry Sibiryakov, все понятно теперь.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему форма не становится активной? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]