Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

потеря фокуса формы


BMouradov ©   (2008-07-17 14:18:00) 

Добрый день, уважаемые!
Подскажите, почему теряется фокус у главной формы и как корректно избежать этой проблемы:

 NewForm1(Form1, Applet);
 if Form1.IsCorrect then
   Form1.Form.ShowModal;
 Form1.Form.Free;

Если IsCorrect, то все в порядке, а вот если условие не прошло, и форму не нужно отображать, то главная форма почему-то теряет фокус. Похоже, что теряет его дважды - и в первой строке, и в последней. Установка Form1.Visible := False не помогла.
В принципе, помогает SetForegroundWindow(Form.Handle), но при этом всё равно видно, что главное окно на долю секунды теряет фокус.


Медвежонок Пятачок   (2008-07-23 14:20:00) [1]

т.к. условия показа или не показа формы могут определяться в самой форме.

Условия на форме тоже не из космоса берутся.
Их анализировать можно и без самой формы


BMouradov   (2008-07-23 12:15:00) [2]

Ваше решение - это не создавать форму вовсе. Такой подход работает, но он не всегда логически верный, т.к. условия показа или не показа формы могут определяться в самой форме.

Конкретно, мой случай: Есть MainForm. Есть TipsForm. TipsForm считывает данные из файла в момент создания и потом в модальном режиме показывает их. Если в файле строк нет, то они и не должны показываться. Было бы неправильно считываение данных выносить в главную форму только для того, чтобы заранее определить, показывать форму или нет.


Jon   (2008-07-23 01:12:00) [3]

I hope that I understand correctly.
Try this code:


program FormsTest;

uses
 KOL;

type
PForm1 = ^TForm1;
TForm1 = object(TObj)
  Form, Button, Checkbox: PControl;
public
  procedure ButtonClick(Sender: PObj);
end;

var
Form1: PForm1;

procedure NewForm1(var Result: PForm1; AParent: PControl);
begin
 New(Result,Create);
 with Result^ do
 begin
   Form := NewForm(AParent,'Form1').SetSize(320,240);
   Button := NewButton(Form,'New Form').AutoSize(True).CenterOnParent;
   Button.OnClick := ButtonClick;
   Checkbox := NewCheckbox(Form,'OK').PlaceUnder;
 end;
end;

procedure TForm1.ButtonClick(Sender: PObj);
var
 NewForm: PForm1;
begin
 if Checkbox.Checked then
 begin
   NewForm1(NewForm,Applet);
   NewForm.Form.ShowModal;
   NewForm.Form.Hide;
   NewForm.Free;
 end;
end;

begin
 Applet := NewApplet('Forms Test');
 NewForm1(Form1,Applet);
 Run(Applet);
end.


Forms always have correct focus with above code.


BMouradov   (2008-07-22 13:39:00) [4]

Ау! Возможно, я неправильно объяснил. Есть основная форма MainForm. из нее при определенных условиях надо открыть другую форму Form1 модально. Причем эти условия определяются в Form1. И если звезды так сошлись, что форму показывать не надо, то получается, что форма создается и тут же удаляется. Логически рассуждая, при этом ничего происходить не должно, однако, происходит потеря фокуса. Судя по всему, фокус ни чему после этого не присваивается.


Наверх

Титульная страница Поиск, карта сайта Написать письмо