![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Childs окна [D6, Win2k]
Explorer © (2002-07-12 15:30:00)Мастера!
Сделал "ручками" форму авторизации(из Бд).
После правильного входа, делаю окно не видимым(Hide), и вызываю
другую форму. Но когда после этого, на нее пытаюсь вывести дочернюю форму, ошибка EInvalidOperation ("не могу открыть форму. MDI форма не активна.)
Скорей всего пытается вывести дочернии формы на форму авторизации.
Подскажите, как решить эту проблемку?
Explorer (2002-07-15 14:39:00) [1]>saxon ©
Я только учусь!
А это пока набросал, чтобы проверить и понять, как все это примерно работает! Но, то что Вы написали, постараюсь воплотить в жизнь!
saxon (2002-07-15 14:32:00) [2]To Explorer ©
Ну и вообще так как Вы это делаете
лучше и не делать!:))
Посмотри примеры делфи (там тоже есть умные вещи:) )
Fiend (2002-07-15 14:30:00) [3]To Explorer ©
Вот этой строкой TDataModuleKassa.Create(DataModuleKassa);
Вы создаёте объект, но указатель на него никуда не сохраняете, поэтому и обращение к DataModuleKassa.DataBaseKassa.connected:=true; вызывает у вас АВ.
Надо было написать DataModuleKassa:= TDataModuleKassa.Create(Application);
И тогда бы вы нормально обращались к объекту базы данных
Explorer (2002-07-15 14:23:00) [4]Разобрался!
надо было убрать:
DataModuleKassa.DataBaseKassa.connected:=true;
Explorer (2002-07-15 14:19:00) [5]>saxon ©
Тогда обьясните пожалуйста мне не далекому, что я делаю не так?
Код:
program NightKassa;
uses
Forms, windows, Messages, SysUtils, Classes, Graphics, Controls, Dialogs,
Menus, Buttons, FormPassword in "Forms\FormPassword.pas" {FormPasswords},
DataModule in "Forms\DataModule.pas" {DataModuleKassa: TDataModuleKassa},
MainForm in "Forms\MainForm.pas" {MainF};
{$R *.res}
begin
Application.Initialize;
TDataModuleKassa.Create(DataModuleKassa);
with TFormPasswords.Create(nil) do try
TDataModuleKassa.Create(DataModuleKassa);
DataModuleKassa.DataBaseKassa.connected:=true;
QueryAuthUser.Active:=true;
if ShowModal = mrOk then begin
if (QueryAuthUser.FieldByName("UserName").AsString=DBLookupComboBoxUser.Text) and
(QueryAuthUser.FieldByName("UserPasswd").AsString=MaskEditPasswd.Text) and
(QueryAuthUser.FieldByName("Status").AsBoolean=false)
then begin
UserName:=DBLookupComboBoxUser.Text;
UserPasswd:=MaskEditPasswd.Text;
Application.CreateForm(TMainF, MainF);
end
else begin
MessageDlg("
saxon (2002-07-15 14:12:00) [6]Лучше через DataModule.
Explorer (2002-07-15 14:09:00) [7]>Fiend ©
Вы извините, что я такой трудный, но меня интересует,
коннект лучше создавать на Главно форме, или лучше создать какой-нибудь DataModule и через него осуществлять коннект?
saxon (2002-07-15 14:05:00) [8]Fiend
В свойствах надо ставить перед тем как менять ДПР!!!
ну и естественно следить за этим.
Fiend (2002-07-15 14:02:00) [9]То Explorer
Мне кажется уже всё объяснили. Что же еще не понятно????
Explorer (2002-07-15 14:01:00) [10]А подскажите, как в таком случае лучше коннект к базе сделать, точнее, где его лучше разместить? (использую DataBase)
Fiend (2002-07-15 13:57:00) [11]То saxon, чушь
как тока вы выставите в свойствах проекта Main Form = TMainForm,
то исходник ДПР тут же изменится, и первой строкой среди CreateForm будет именно строка с созданием от TMainForm
saxon (2002-07-15 13:53:00) [12]стественно.
попробуйте так
а в свойствах проекта выставите на TMainForm
и все работает !!!
Fiend (2002-07-15 13:50:00) [13]То saxon
Хотите сказать возможно такое:
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TMainForm, MainForm);
И главная форма TMainForm?
saxon (2002-07-15 13:47:00) [14]А по поводу главных не главных
НЕ ВАЖНО
как написан ДПР
главное какая форма главная в свойствах проекта !!!
Explorer (2002-07-15 13:44:00) [15]>saxon ©
Сейчас и так попробую.
saxon (2002-07-15 13:39:00) [16]попробуй так (это круче)
Application.Initialize;
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
try
Application.Title := "Titel";
Application.HelpFile := "App.hlp";
...
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TPasswordDlg, PasswordDlg);
...
finally
SplashForm.Free;
end;
Application.OnIdle:=MainForm.StartPWDDialog;
Application.Run;
В методе MainForm.StartPWDDialog происходит создание формы и авторизация юзера и ...
Explorer (2002-07-15 12:17:00) [17]>msts
Все заработало!!!
Как вссегда я напортачил!
Пытался закрывать форму AutoForm.close.
Всем большое спасибо!
msts (2002-07-15 11:06:00) [18]так же учитывай
что при TAutoForm.Create(nil<----)
TAutoForm.Owner = nil а есть компоненты которым он нужен
еще не забывай
при создании мдичилд происходит обращение к
Application.MainForm."чего то там"
и еще...
в общем на основе неизвестного куска кода
можно предположить разные варианты ошибок
но настораживает что "Но теперь прога виснет!"
проверь в каком месте
(во пургу какую развел :) )
msts (2002-07-15 10:40:00) [19]круто
а подробности?
PS: причины:
неправельное наследование алгоритмов в процессе изменения исходников.
в начале использовалась перемення для формы TAutoForm (AutoForm)
а в новом варианте она = nil например где то стоит AutoForm.close
в общем копай
Explorer (2002-07-15 09:44:00) [20]со строкой разобрался!
Но теперь прога виснет!