![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
потеря фокуса формы
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. И если звезды так сошлись, что форму показывать не надо, то получается, что форма создается и тут же удаляется. Логически рассуждая, при этом ничего происходить не должно, однако, происходит потеря фокуса. Судя по всему, фокус ни чему после этого не присваивается.