Главная страница
    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.46 MB
Время: 0.091 c
15-1269984282
Petr V. Abramov
2010-03-31 01:24
2010.08.27
а давайте обсудим весну :)


11-1218532817
Jon
2008-08-12 13:20
2010.08.27
Position message box


15-1275371179
Дмитрий С
2010-06-01 09:46
2010.08.27
Знатокам MS ISA server 2006. Настройка Publish Web Sites


2-1268837432
Berger
2010-03-17 17:50
2010.08.27
Как скопировать число из памяти в переменную


15-1267337984
Kerk
2010-02-28 09:19
2010.08.27
Некачественное выполнение госконтракта





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский