Главная страница
    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.45 MB
Время: 0.054 c
15-1266060403
GanibalLector
2010-02-13 14:26
2010.08.27
Транссиб


15-1265405405
Юрий
2010-02-06 00:30
2010.08.27
С днем рождения ! 6 февраля 2010 суббота


15-1270727360
ElenKa
2010-04-08 15:49
2010.08.27
Мастер формул


15-1269540383
MAcKZloy
2010-03-25 21:06
2010.08.27
Построитель отчёта


15-1264341586
Kolan
2010-01-24 16:59
2010.08.27
Исходники DMClient а доступны для всех желающих





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский