Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.068 c
2-1271335314
LVP
2010-04-15 16:41
2010.08.27
Вопрос по TImage


2-1273755318
_guest_
2010-05-13 16:55
2010.08.27
впечатать содержимое RichEdit в произвольное место листа


2-1268604733
Mer01
2010-03-15 01:12
2010.08.27
Ошибка доступа к памяти (указатели)


2-1270793346
Ms-R
2010-04-09 10:09
2010.08.27
арктангенс


15-1275645994
И. Павел
2010-06-04 14:06
2010.08.27
#0 и заголовки окон WinAPI





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