![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() На форме fSynch только ProgressBar
Код:
program WorkPlace; uses Vcl.Forms, uMain in 'uMain.pas' {fMain} , uSynch in 'uSynch.pas' {fSynch}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TfSynch, fSynch); Application.CreateForm(TfMain, fMain); Application.Run; end. Куда весь этот код обработки вписывать? в OnShow - форма не вырисовывается, но процесс загрузки идёт. Т.е. приложение зависает, потом появляется форма со 100% ProgressBar на секунду и сразу же Главное окно программы. |
#2
|
||||
|
||||
![]() TThread...
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
||||
|
||||
![]() так http://zalil.ru/34738901 сойдет?
Пишу программы за еду. __________________ |
#4
|
||||
|
||||
![]() с приветственной заставкой в которой кнопка (или MainMenu) - подключиться
Я за здоровый экстрим! Спасибо за "спасибо") |
#5
|
||||
|
||||
![]() Похоже, автор плохо усвоил предыдущий урок. Я уже начинаю разочаровываться.
В приведенном коде проекта есть две фактические ошибки:
Как бы сделал я:
|
Этот пользователь сказал Спасибо Freeman за это полезное сообщение: | ||
Uniq! (23.09.2013)
|
#6
|
||||
|
||||
![]() Вообще сама по себе идея как-то подсчитывать прогресс выполнения обращения к БД, неудачна. Это касается и подключения и выполнения запросов. А вот как-то информировать пользователя о каком-то процессе - это нужно. Из многих виденных мной решений, наиболее удачным оказался прогрессбар в режиме пинг/понга запущенный в отдельном потоке.
Лично я выделяю под него в статусбаре приложения пустое место и как только возникает необходимость отобразить длительный процесс у меня он отображается, крутится пока не закончится процесс и снова скрывается. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
||||
|
||||
![]() Цитата:
С ошибками разбирался всю ночь. По поводу MainForm выяснил. Что касается обработки информации в OnCreate главной формы: Есть нюанс, что при загрузке данных используются и другие формы. Например выгрузка настроек из IniFil'a в форму fSettings. Т.е. её тоже нужно создать перед тем, как в неё выгружать информацию. Итоговый код: Код:
program WorkPlace; uses uMain in 'uMain.pas' {fMain}; // все unit'ы begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TfMain, fMain); Application.CreateForm(TfDM, fDM); Application.CreateForm(TfNewTicket, fNewTicket); Application.CreateForm(TfCheckClient, fCheckClient); Application.CreateForm(TfSettings, fSettings); Application.CreateForm(TfTicketInfo, fTicketInfo); Application.CreateForm(TfNewClient, fNewClient); Application.CreateForm(TfReport, fReport); fSynch := TfSynch.Create(Application); fSynch.Show; fSynch.LoadData; // функция по примеру, который предложил NumLock fSynch.Free; Application.Run; end. Код:
procedure TfSynch.LoadData; var IniF: TIniFile; begin IniF := TIniFile.Create(ExtractFilePath(Application.Exename) + '/Settings.ini'); with fSettings do begin gPawnshop.Text := IniF.ReadString('General', 'Pawnshop', ''); gNum.Text := IntToStr(StrToInt('$' + IniF.ReadString('General', 'N', ''))); gNumM.Text := IntToStr(StrToInt('$' + IniF.ReadString('General', 'NM', ''))); // Connection sDriver.Text := IniF.ReadString('Connection', 'Driver', ''); sServer.Text := IniF.ReadString('Connection', 'Server', ''); sPort.Text := IniF.ReadString('Connection', 'Port', ''); sUid.Text := IniF.ReadString('Connection', 'Uid', ''); end; IniF.Free; fDM.GlobalConn.ConnectionString := 'Driver=' + fSettings.sDriver.Text + ';' + 'Server=' + fSettings.sServer.Text + ';' + 'Port=' + fSettings.sPort.Text + ';' + 'UID=' + fSettings.sUid.Text + ';' + 'Database=gobseck;PWD=ХАРДКОЖЕНЫЙПАРОЛЬ;'; fSynch.pSynch.Properties.Text := 'Подключение к серверу: ' + fSettings.sServer.Text + '. Пожалуйста, ждите...'; Application.ProcessMessages; try fDM.GlobalConn.Connected := true; except while fDM.GlobalConn.DataSetCount <> 0 do fDM.GlobalConn.DataSets[0].Connection := fDM.LocalConn; fDM.LocalConn.Connected := true; end; end; Процедуры AfterConnect для Global И Local connection идентичны (с точностью до имён): Код:
procedure TfDM.GlobalConnAfterConnect(Sender: TObject); var i: integer; begin for i := 0 to fDM.GlobalConn.DataSetCount - 1 do begin fSynch.pSynch.Properties.Text := 'Загрузка: ' + fDM.GlobalConn.DataSets[i].Name; fSynch.pSynch.Update; fDM.GlobalConn.DataSets[i].Open; fSynch.pSynch.Position := fSynch.pSynch.Position + 100 / fDM.GlobalConn.DataSetCount; fSynch.pSynch.Update; end; end; Последний раз редактировалось Uniq!, 23.09.2013 в 13:45. |