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

Вниз

потеря фокуса формы   Найти похожие ветки 

 
BMouradov   (2008-07-17 14:18) [0]

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

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

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


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

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


 
Jon ©   (2008-07-23 01:12) [2]

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-23 12:15) [3]

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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.189 c
2-1267688655
evg
2010-03-04 10:44
2010.08.27
Какой компонент использовать для отображения сектора


15-1263829418
TStas
2010-01-18 18:43
2010.08.27
А куда пропало "Показать мои вопросы"


6-1219633699
civic.qip
2008-08-25 07:08
2010.08.27
Вопрос про ServerSocket и ClientSocket


15-1267684899
Медвежонок Пятачок
2010-03-04 09:41
2010.08.27
Земля таки налетела на небесную ось


15-1264673292
Vigi
2010-01-28 13:08
2010.08.27
Часы с разными часовыми поясами