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

Вниз

Самопроизвольное появление формы   Найти похожие ветки 

 
Phantomouse ©   (2009-12-17 06:15) [0]

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

program UserManager;
uses
 Forms,
 Main in "Main.pas" {MainForm},
 OptionsUnit in "OptionsUnit.pas" {Options},
 UserUnit in "UserUnit.pas" {User};
{$R *.RES}
begin
 Application.Initialize;
 Application.Title := "VDS ACM Administrator";
 Application.CreateForm(TMainForm, MainForm);
 Application.CreateForm(TOptions, Options);
 Application.CreateForm(TUser, User);
 Application.Run;
end.


Речь идёт о форме "User". В момент запуска форма появляется и "уходит" за MainForm так, как это случилось бы при вызове User.Show(); Пробовал убирать форму из списка автосоздаваемых и создавать вручную. Эффект тот же. При вызове TUser.Create(MainForm) форма появляется сама, не дожидаясь вызова Show() или ShowModal(). Трассировка по F7 ничего сорного не выявила.

Глюк впервые проявился после изменений кода, затрагивающих сохранение данных из полей формы User по нажатию кнопки ОК. Игрался с ModalResult, но после того, как заглючило, всё вернул в первоначальное состояние. Код юнита UserUnit:

unit UserUnit;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, sSkinProvider, acPNG, ExtCtrls, sPanel, Buttons, sSpeedButton,
 StdCtrls, sLabel, sEdit, sGroupBox, Mask, sMaskEdit, sSpinEdit,
 sCustomComboEdit, sTooledit, sComboEdit, sComboBox, sMemo, ComCtrls,
 sPageControl, sButton;

type
 TUser = class(TForm)
   sSkinProvider1: TsSkinProvider;
   Image1: TImage;
   sPanel1: TsPanel;
   sLabel1: TsLabel;
   sLabel2: TsLabel;
   sLabel3: TsLabel;
   surnameEdit: TsEdit;
   nameEdit: TsEdit;
   thirdnameEdit: TsEdit;
   sGroupBox1: TsGroupBox;
   sLabel4: TsLabel;
   passportEdit: TsMaskEdit;
   sLabel6: TsLabel;
   passdateEdit: TsDateEdit;
   sGroupBox2: TsGroupBox;
   cardEdit: TsEdit;
   sSpeedButton3: TsSpeedButton;
   sLabel7: TsLabel;
   passorgEdit: TsComboBox;
   sLabel8: TsLabel;
   birthdayEdit: TsDateEdit;
   sLabel5: TsLabel;
   cityEdit: TsComboBox;
   sLabel9: TsLabel;
   addressEdit: TsMemo;
   sLabel10: TsLabel;
   phoneEdit: TsMaskEdit;
   sLabel11: TsLabel;
   emailEdit: TsEdit;
   sPageControl1: TsPageControl;
   sTabSheet1: TsTabSheet;
   sTabSheet2: TsTabSheet;
   sButton1: TsButton;
   sButton2: TsButton;
   procedure FormShow(Sender: TObject);
   procedure sButton2Click(Sender: TObject);
   procedure sButton1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 User: TUser;

implementation

uses Main;

{$R *.dfm}

procedure TUser.FormShow(Sender: TObject);
begin
 sTabSheet1.PageIndex := 0;
 surnameEdit.SetFocus;
end;

procedure TUser.sButton2Click(Sender: TObject);
begin
 ShowMessage("Saved!");
 Close;
end;

procedure TUser.sButton1Click(Sender: TObject);
begin
 Close;
end;

end.


 
sniknik ©   (2009-12-17 07:57) [1]

> При вызове TUser.Create(MainForm) форма появляется сама, не дожидаясь вызова Show() или ShowModal().
поведение характерное для MDIChild форм. причем смутно помню был с ними глюк, вроде если установить этот тип то после вернуть "нормал" полноценно не получается (или это было с майнмди?... не помню и проверять не когда, на работу пора)

> Игрался с ModalResult
может не только с ним, может и типом форм?


 
Anatoly Podgoretsky ©   (2009-12-17 08:37) [2]

> sniknik  (17.12.2009 07:57:01)  [1]

Ты обрати внимание на его слова, что форма появляется сама, даже если ее нет в списке автосоздаваемых. В таком случае я не верю, что САМА.


 
Ymen   (2009-12-17 10:16) [3]

User.visible := false ?


 
sniknik ©   (2009-12-17 10:53) [4]

> User.visible := false ?
MDIChild на это не обратит никакого внимания.
и потом что это за дурной подход, не решать проблему, а "замазывать" ее?


 
brother ©   (2009-12-17 11:28) [5]

> и потом что это за дурной подход, не решать проблему, а
> "замазывать" ее?

чтобы получить это:
http://www.brotherirk.narod.ru/shell/realizat.gif
:)


 
Ymen   (2009-12-17 12:26) [6]

>sniknik ©
>> User.visible := false ?
>MDIChild на это не обратит никакого внимания.

Тоесть Вы сами решили без топикстартера, что это MDI ?

>И потом, что это за дурной подход, ...

Дальше устал читать...


 
grammar-nazi   (2009-12-17 12:33) [7]

Ymen абсолютно прав. при установке FormStyle в fsMDIChild свойство Visible устанавливается в True, а при возврате к fsNormal таким и остаётся. соответственно, сразу же после создания, форма показывается.


 
sniknik ©   (2009-12-17 13:24) [8]

> а при возврате к fsNormal таким и остаётся.
вот это и есть похоже тот глюк про который я смутно помню...
и его и нужно исправить, вернуть значение в режиме разработки, а не делать присваивание в рантайм.


 
Phantomouse ©   (2009-12-17 13:50) [9]

>поведение характерное для MDIChild форм. причем смутно помню был с ними глюк, вроде если установить этот тип то после вернуть "нормал" полноценно не получается

Вот именно! Точно. Я же трогал ради интереса MDIChild... Но вернул в номал. Так что ещё можно переключить в design-time-е, чтобы убить самопроявление формы?


 
Phantomouse ©   (2009-12-17 13:53) [10]

Ступил. Действительно, установка Visible для формы в false решила проблему. Всем спасибо.


 
han_malign   (2009-12-18 15:36) [11]


> при установке FormStyle в fsMDIChild свойство Visible устанавливается в True

> вот это и есть похоже тот глюк про который я смутно помню...

- старый прикол, и не только c MDI - значение Visible в VCL "синхронизируется" для всех дочерних компонентов(невзирая на оконную топологию родитель/ребенок)...
З.Ы. С апишной ShowWindow(SW_HIDE/SW_RESTORE/SW_SHOW) - кажется какие то заморочки с "четностью" и "вложенностью" состояний были(давно... - уже и не упомню на какой версии Windows)... Возможно это в VCL и лечилось таким жестким Visible...



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

Форум: "Основная";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
2-1302299560
TheEd
2011-04-09 01:52
2011.07.24
Ламерский вопрос про обновление списка lookup-поля


15-1301903703
oldmanAPOOERE
2011-04-04 11:55
2011.07.24
Сегодня - день Интернета.


15-1302406131
TUser
2011-04-10 07:28
2011.07.24
А на чем мозилла деньги делает?


2-1302199698
Xalexo
2011-04-07 22:08
2011.07.24
Копирование файла по маске


4-1249032759
Armature_Current
2009-07-31 13:32
2011.07.24
Синхронизация потоков





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