|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Запуск другой формы
Вопрос таков.
Есть программа , которая по умолчанию запускается с главной формой FORM1, вроде все хорошо и все устраивает. Пишу обновление для своей программы и хочу ,когда есть новая версия программы на сервере по умолчанию загружалась FORM2. То есть , когда программа свежая грузится форма 1, а когда есть новая версия тогда форма2. Как заставить открываться форму 2? |
#2
|
|||
|
|||
Можете в Form1 поставить событие OnCreate.
Если будут обновления то нужно скрыть Form1.Visible:=false; а Form2.Visible:= True; |
#3
|
|||
|
|||
Код:
var c_ver,new_ver:string; begin //получаешь версию своей программы, //Версию новой программы if c_ver < new_ver then begin Timer1.Enabled:=True; end; Timer1.onTick Form2.Show; Form1.Hide; я так делаю ) если без таймера то падают ошибки Последний раз редактировалось ApxaHGe1, 25.08.2016 в 14:46. |
#4
|
|||
|
|||
Я просто не правильно выразился.
Суть такая , запускается программа , проверяются версии с сервером. Если версия ниже , переименовываю текущую в qqq_old.exe и запускаю уже как qqq_old.exe и вот её хочу запустить уже с формой 2 (для продолжения скачивания программы qqq.exe) Переименовываю , что бы qqq.exe не заругалась , что такое имя файла уже есть |
#5
|
|||
|
|||
Я так обновляюсь и все прекрасно работает
Код:
var ver:string; restart:TextFile; FileStream :TFileStream; begin ver:=IdHTTP1.Get('http://******.ru/soft/ver.txt'); if ver > GetMyVersion then begin FileStream := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\'+'BC_new.exe', fmCreate); IdHTTP1.Get('http://********.ru/soft/BC.exe', FileStream); FileStream.Free; AssignFile (restart,ExtractFilePath(Application.ExeName)+'\'+'restart.bat'); Rewrite (restart); WriteLn (Restart,'DEL BC.exe'); WriteLn (Restart,'REN BC_new.exe BC.exe');; WriteLn (Restart,'BC.exe'); WriteLn (Restart,'for /L %%b in (1,1,500) Do @Echo %%b >Nul'); CloseFile (restart); ShellExecute(0,'OPEN',PAnsiChar (ExtractFilePath(Application.ExeName)+'\'+'restart.bat'),0,0,0); ExitProcess(0); end; |
Этот пользователь сказал Спасибо ApxaHGe1 за это полезное сообщение: | ||
starcon (25.08.2016)
|
#6
|
|||
|
|||
Тоже вариант .
Сделаю немного поправок под себя. СПАСИБО |
#7
|
||||
|
||||
вариантов много на самом деле
А что мешает запускаться не с основной программы, а с апдейтера? Запускается апдейтер, проверяет наличие обновлений, если есть перезаписывает и запускает, если нет - просто запускает.
Пишу программы за еду. __________________ |
#8
|
|||
|
|||
Спасибо за ответ.
Моя программа состоит из одного исполняемого файла и не хочется ради этого ещё одну для апдейта |
#9
|
|||
|
|||
OK, сделай в DPR специальную ветку - сначала проверить на обновление и, если есть, обновить, потом запустить саму себя и выйти.
Код:
program Project1; ... function IsUpdateAvailable : Boolean; begin ... end; procedure UpdateProgram; begin ... end; begin if IsUpdateAvailabe Then begin UpdateProgram; WinExec(ParamStr(0),SW_SHOWNORMAL); Halt(0); end; Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.Run; end. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
starcon (26.08.2016)
|
#10
|
|||
|
|||
Спасибо ,Забрал в проект
|