Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

TForm.FormActivate - долгая загрузка   Найти похожие ветки 

 
chirchik ©   (2004-07-26 15:15) [0]

на собыите формы OnActivate вызывается код программы, в котором происходит долгое (длительное) выдергивание всяких данных из таблиц БД.

При запуске проекта загружается рамка формы, и ничего на ней не прорисовывается все то время, которое выполняется программа по подготовке данных для вывода. Можно ли как-нибудь сделать что-то вроде заставки Loading.

Поможет ли try finnaly структура?


 
Соловьев ©   (2004-07-26 15:16) [1]


> Поможет ли try finnaly структура?

она родимая. возьми из набора RxLib - SplashWindow. Или сделай свою с прогресс баром


 
Ega23 ©   (2004-07-26 15:25) [2]

Поможет ли try finnaly структура?

А при чём здесь try ... finally? Или я что-то не понимаю???


 
Соловьев ©   (2004-07-26 15:28) [3]


> А при чём здесь try ... finally? Или я что-то не понимаю???

чтобы сплеш окно всегда уничтожилось, если будет сбой при открытии таблицы.


 
chirchik ©   (2004-07-26 15:33) [4]

А без SplashWindow можно сделать?
может быть я зря этот код на FormActivate повесил?.

Но мне надо чтобы при загрузке формы этот код тоже выполнялся. Но про такой результат я даже не подозревал.


 
Соловьев ©   (2004-07-26 15:35) [5]


> А без SplashWindow можно сделать?
> может быть я зря этот код на FormActivate повесил?.

зря. повесь на криэйт


 
chirchik ©   (2004-07-26 15:36) [6]

На Create вешал. Выходит ошибка.
В этом коде у меня к базе обращение идет. Видимо из-за него и ошибка.


 
Vlad ©   (2004-07-26 15:37) [7]


> chirchik ©   (26.07.04 15:33) [4]

Подозреваю, что на OnActivate - точно зря.
Лучше или на OnCreate или на OnShow.
Правда это не столь поможет твоей проблеме.
Один из способов решения - вынести этот код вобще в отдельный поток. Другое решение - сделать что-то вроде Wait-окна, которое перед тем форма будет загружена, вылезет с надписью "Пожалуйста, ждите" и уничтожится после того как форма будет открыта.


 
Соловьев ©   (2004-07-26 15:40) [8]


> Выходит ошибка.
> В этом коде у меня к базе обращение идет. Видимо из-за него
> и ошибка.

ага, т.е. там где у нас ошибка - мы просто не делаем:) А решить не пытался? Код ошибки?
Подозреваю что на форме лежат все компоненты. Сделай датамодуль, выставь, чтобы ок криейтился перее глафной формы, а в криейте этой главной формы пиши уже сплеш форму.


 
chirchik ©   (2004-07-26 15:41) [9]

Вешаю этот код на OnCreate. Ошибка уже на
DM.DS1_Year.DataSet.First; строке.

пишет Access violation at address...

procedure TForm1.FormCreate(Sender: TObject);
var
 n: TcxTreeListNode;
begin
 cxTL1.BeginUpdate;

 // заполнение годами
 DM.DS1_Year.DataSet.First;
 while not DM.DS1_Year.DataSet.Eof do
 begin
   n := cxTL1.Add;
   n.Values[TL1_Year.ItemIndex] := DM.DS1_Year.DataSet.Fields[0].AsString;

   DM.ADOQ1.Close;
   DM.ADOQ1.Parameters.ParamByName("prmYear").Value := n.Values[TL1_Year.ItemIndex];
   DM.ADOQ1.Open;
   DM.ADOQ1_DLoad.Close;
   DM.ADOQ1_DLoad.Parameters.ParamByName("prmYear").Value := n.Values[TL1_Year.ItemIndex];
   DM.ADOQ1_DLoad.Open;

   // добавление 1ого семестра и др. -> Год
   FillTreeList(n, 1);

   // добавление 2ого семестра и др. -> Год
   FillTreeList(n, 2);

   DM.DS1_Year.DataSet.Next;
 end;

 cxTL1.EndUpdate;
end;


 
Ega23 ©   (2004-07-26 15:42) [10]

Соловьев ©   (26.07.04 15:28) [3]

Это-то понятно, я просто подумал, что автор считает структуру try ... finally прорисовщиком заставок.


 
Ega23 ©   (2004-07-26 15:42) [11]

Соловьев ©   (26.07.04 15:28) [3]

Это-то понятно, я просто подумал, что автор считает структуру try ... finally прорисовщиком заставок.


 
chirchik ©   (2004-07-26 15:44) [12]

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

DataModule есть. Как его криейтить перед главной формой?


 
Соловьев ©   (2004-07-26 15:46) [13]


>  DM.DS1_Year.DataSet.First;

покажи свой дпр файл


 
chirchik ©   (2004-07-26 15:46) [14]

>Ega23
прорисовщиком заставок я ее не сичатал на самом деле :).
Кто-то мне говорил использовать ее в циклах, для отключения прорисвки каждого цикла (выводе данные из базы), и увеличения тем самым производительности.
Сейчас почитал. это обработка исключительных ситуаций. :)


 
@Lex ©   (2004-07-26 15:47) [15]

может перед
DM.DS1_Year.DataSet.First;
сделать
DM.DS1_Year.DataSet.Open;


 
chirchik ©   (2004-07-26 15:47) [16]

>Соловьев

project1.dpr:

program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1},
 Unit2 in "Unit2.pas" {DM: TDataModule};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.CreateForm(TDM, DM);
 Application.Run;
end.


 
Sergey13 ©   (2004-07-26 15:48) [17]

>в котором происходит долгое (длительное) выдергивание всяких данных из таблиц БД.
Может поработать над укорочением (ускорением)? Тоже вариант.


 
chirchik ©   (2004-07-26 15:48) [18]

>Соловьев

Кажись понял. надо так?:

Application.CreateForm(TDM, DM);
Application.CreateForm(TForm1, Form1);


 
@Lex ©   (2004-07-26 15:49) [19]

program Project1;

uses
Forms,
Unit1 in "Unit1.pas" {Form1},
Unit2 in "Unit2.pas" {DM: TDataModule};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.


 
chirchik ©   (2004-07-26 15:52) [20]

Спасибо всем, OnCreate наладил.

Теперь при загрузке комп долго думает, и только после загрузки данных выдает форму. Теперь без SplashScreen"a точно не обойтись.
Только вот опять вопрос. Как-то давно в Delphi 5 или 6 Splash Screen был в File->New...
А в D7 где его брать?


 
Соловьев ©   (2004-07-26 15:53) [21]


> Теперь без SplashScreen"a точно не обойтись

возьми из RxLib


 
chirchik ©   (2004-07-26 15:55) [22]

>Соловьев
>возьми из RxLib
прошу прощения, а где взять RxLib?


 
Ega23 ©   (2004-07-26 15:57) [23]

прошу прощения, а где взять RxLib?

Яндекс - найдётся всё!

Или давай мыло - вышлю. Для 7-й делфи где-то было...


 
chirchik ©   (2004-07-26 16:02) [24]

>Или давай мыло - вышлю. Для 7-й делфи где-то было...

vostrikov собака ekoproekt точка ru

Заранее спасибо!


 
@Lex ©   (2004-07-26 16:06) [25]

http://www.delphibr.com.br/download/delphi/rxlib_275d7.zip


 
Ega23 ©   (2004-07-26 16:09) [26]

Вон, тебе @Lex уже дал всё что нужно. :о)


 
chirchik ©   (2004-07-26 16:19) [27]

Пасиба!!!



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

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
3-1090810968
User_OKA
2004-07-26 07:02
2004.08.22
Хранение истории


1-1091785644
Aldor_
2004-08-06 13:47
2004.08.22
EOleSysError "Class not registered"


1-1091954336
Кодер
2004-08-08 12:38
2004.08.22
Файл с ресурсами


1-1091651420
Some man
2004-08-05 00:30
2004.08.22
CD Write/Read


3-1090459928
Euronymous
2004-07-22 05:32
2004.08.22
Drag n Drop внутри DBGrid...