Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Грамотная загрузка приложения 
V
    Опции темы
former
  Дата 7.1.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Как грамотно сделать, чтобы при загрузке приложения (при показе заставки) проверялось наличие библиотек и других файлов, подключаемых к программе, а в случае отсутствия одного из них завершать программу не загружая формы? И всё это дело анимировать с помощью ProgresBar.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Sunvas
Дата 7.1.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



FileExists вернет существует ли файл


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
former
Дата 7.1.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Sunvas, как проверить наличие файла я сам  знаю. А вот как закрыть приложение не выполняя:

Код

  Application.Initialize;  
  Application.CreateForm(........);
  SplashForm.Hide;
  SplashForm.Free;
  Application.Run;





--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Sunvas
Дата 7.1.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Как? Кучка функций есть: 
halt;
exitprocess(0);
application.terminate;


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Snowy
Дата 7.1.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Просто не выполняй и всё...
PM MAIL   Вверх
Guedda
Дата 7.1.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Код

begin
  if FileExists('...') then begin
    Application.Initialize;  
    Application.CreateForm(........);
    SplashForm.Hide;
    SplashForm.Free;
    Application.Run;
  end;
end.



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
former
Дата 7.1.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Вот, вот. Так и пробовал, но при попытке запустить приложение, останавливается на первом begin.

Код

begin
  if FileExists(ExtractFilePath(Application.ExeName)+'abc.dll')=false then
  begin
    ShowMessage('Библиотека abcf.dll не найдена.');
    exitprocess(0);
  end
  else
  begin
    Application.Initialize;
    Application.Title := 'UpdateMaker v1.0';
    Application.CreateForm(...);
   SplashForm.Hide;
    SplashForm.Free;
    Application.Run;
  end;


Добавлено @ 18:06 
Упс, опечатался. smile 


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Guedda
Дата 7.1.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Попробуй просто мой вариант. Без else. У меня всё работает.
Вот привожу код для ясности:
Программа работает:
Код

program Project1;

uses
  Forms, SysUtils,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  if FileExists('C:\magent.exe') then begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.

Программа не работает:
Код

program Project1;

uses
  Forms, SysUtils,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  if FileExists('C:\_magent.exe') then begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.


Добавлено @ 20:21 
А если надо с мессагом:
Код

program Project1;

uses
  Forms, SysUtils, Dialogs,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  if FileExists('C:\_magent.exe') then begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end else begin
    ShowMessage('Файла нет!');
  end;
end.



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
dumb
Дата 8.1.2007, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



Цитата(former @  7.1.2007,  14:34 Найти цитируемый пост)
проверялось наличие библиотек

при статическом импорте за тебя проверят и отругаются еще до передачи управления самой проге.
PM MAIL   Вверх
Sansa
Дата 9.1.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



Где-то так:

Код

program Project1;

uses
  Forms,
  SysUtils,
  Unit1 in 'Unit1.pas' {Form1},
    Windows;

{$R *.res}

const
  // Массив имен файлов необходимых библиотек
  REQ_LIB_ARR : array [0..2] of string = (
  'C:\Windows\explorer.exe',
  'Project1.exe',
  'missing_lib.dll'
  );

function CheckLibrary(const AFileName: string): Boolean;
begin
  try
    if FileExists(AFileName) then
      Result:= True
    else
    begin
      MessageBox(0, PChar(Format('Необходимый для работы программы файл "%s" не найден.', [AFileName])),
        'Проверка необходимых файлов', MB_OK + MB_ICONSTOP + MB_TOPMOST);
      Result:=False
    end;
  except
    MessageBox(0, PChar(Format('Ошибка при проверке файла %s!', [AFileName])),
      'Проверка необходимых файлов', MB_OK + MB_ICONSTOP + MB_TOPMOST);
    Result:= False;
  end;
end;

function CheckLibraries():Boolean;
var
  I: Integer;
begin
  Result:= True;
  for I:= Low(REQ_LIB_ARR) to High(REQ_LIB_ARR) do
  begin
    result:= Result and CheckLibrary(REQ_LIB_ARR[I]);
    if not Result then
      Break;
  end;
end;

begin
  Application.Initialize;
  if CheckLibraries then
  begin
    Application.CreateForm(TForm1, Form1);
     // Здесь создаем еще формы
    Application.Run;
  end
  else
    Application.Terminate;

end.


В массиве REQ_LIB_ARR перечисляешь все файлы, которые необходимы для работы программы. 
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
MetalFan
Дата 9.1.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(former @  7.1.2007,  18:03 Найти цитируемый пост)
Вот, вот. Так и пробовал, но при попытке запустить приложение, останавливается на первом begin.

замени Application.ExeName на ParamStr(0)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0827 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.