Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2009, 12:06   #31
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию

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

Код:
unit Unit12;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan;

resourcestring
  const_def_FileName         = 'D:\Def.txt';

  const_msg_fmt_FileChanged  = 'Исходный файл "%s" был изменен. Применить изменения?';
  const_msg_fmt_FileNotFound = 'Файл %s не найден';
  const_def_msg_Caption      = 'Внимание';

type
  Tfrm_Test = class(TForm)
    cmp_Memo: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Fold_FileAge: Integer;
    FMsgExists: Boolean;
    function ApplyFileChanged: Boolean;
    procedure _OnActivate(Sender: TObject);
  public
    { Public declarations }
  end;

var
  frm_Test: Tfrm_Test;

implementation

{$R *.dfm}

function Tfrm_Test.ApplyFileChanged: Boolean;
var
  cur_FileAge: Integer;
begin
  Result := False;
  cur_FileAge := FileAge(const_def_FileName);
  if not FMsgExists then
    if Fold_FileAge <> cur_FileAge then
    begin
      FMsgExists := True ;
      Result := MessageBox(Handle, PChar(Format(const_msg_fmt_FileChanged,
        [const_def_FileName])),
          PChar(const_def_msg_Caption), MB_ICONWARNING or MB_OKCANCEL) = IDOK;
      FMsgExists := False;
      Fold_FileAge := cur_FileAge;
    end;
end;

procedure Tfrm_Test.FormCreate(Sender: TObject);
begin
  Fold_FileAge := FileAge(const_def_FileName);
  if Fold_FileAge < 0  then
    raise Exception.CreateResFmt(@const_msg_fmt_FileNotFound, [const_def_FileName]);
  Application.OnActivate := _OnActivate;
end;

procedure Tfrm_Test._OnActivate(Sender: TObject);
begin
  if ApplyFileChanged
    then
      cmp_Memo.Lines.LoadFromFile(const_def_FileName);
end;

end.

Последний раз редактировалось NieL; 06.02.2009 в 13:08.
NieL вне форума Ответить с цитированием
Старый 06.02.2009, 19:40   #32
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

Цитата:
Сообщение от NieL Посмотреть сообщение
Правильнее будет ставить проверку изменился ли файл на событие OnActivate. Вот код, подфиксить его под свои нужды я думаю труда не составит.

Код:
unit Unit12;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan;

resourcestring
  const_def_FileName         = 'D:\Def.txt';

  const_msg_fmt_FileChanged  = 'Исходный файл "%s" был изменен. Применить изменения?';
  const_msg_fmt_FileNotFound = 'Файл %s не найден';
  const_def_msg_Caption      = 'Внимание';

type
  Tfrm_Test = class(TForm)
    cmp_Memo: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Fold_FileAge: Integer;
    FMsgExists: Boolean;
    function ApplyFileChanged: Boolean;
    procedure _OnActivate(Sender: TObject);
  public
    { Public declarations }
  end;

var
  frm_Test: Tfrm_Test;

implementation

{$R *.dfm}

function Tfrm_Test.ApplyFileChanged: Boolean;
var
  cur_FileAge: Integer;
begin
  Result := False;
  cur_FileAge := FileAge(const_def_FileName);
  if not FMsgExists then
    if Fold_FileAge <> cur_FileAge then
    begin
      FMsgExists := True ;
      Result := MessageBox(Handle, PChar(Format(const_msg_fmt_FileChanged,
        [const_def_FileName])),
          PChar(const_def_msg_Caption), MB_ICONWARNING or MB_OKCANCEL) = IDOK;
      FMsgExists := False;
      Fold_FileAge := cur_FileAge;
    end;
end;

procedure Tfrm_Test.FormCreate(Sender: TObject);
begin
  Fold_FileAge := FileAge(const_def_FileName);
  if Fold_FileAge < 0  then
    raise Exception.CreateResFmt(@const_msg_fmt_FileNotFound, [const_def_FileName]);
  Application.OnActivate := _OnActivate;
end;

procedure Tfrm_Test._OnActivate(Sender: TObject);
begin
  if ApplyFileChanged
    then
      cmp_Memo.Lines.LoadFromFile(const_def_FileName);
end;

end.
Программа не запускается строчка:ApplyFileChanged: Boolean;выделяется красным!
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 07.02.2009, 08:31   #33
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
Программа не запускается строчка:ApplyFileChanged: Boolean;выделяется красным!
...в каком именно месте этого кода ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 07.02.2009, 09:33   #34
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

Код:
function Tfrm_Test.ApplyFileChanged: Boolean;
var
  cur_FileAge: Integer;
begin
  Result := False;
  cur_FileAge := FileAge(const_def_FileName);
  if not FMsgExists then
    if Fold_FileAge <> cur_FileAge then
    begin
      FMsgExists := True ;
      Result := MessageBox(Handle, PChar(Format(const_msg_fmt_FileChanged,
        [const_def_FileName])),
          PChar(const_def_msg_Caption), MB_ICONWARNING or MB_OKCANCEL) = IDOK;
      FMsgExists := False;
      Fold_FileAge := cur_FileAge;
    end;
end;
в названий функции!
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!

Последний раз редактировалось Волк; 07.02.2009 в 09:35.
Волк вне форума Ответить с цитированием
Старый 07.02.2009, 09:53   #35
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

да все работать должно ...
а что имеено пишет - текст ошибки каков ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 07.02.2009, 18:30   #36
Волк
Форумчанин
 
Аватар для Волк
 
Регистрация: 04.02.2009
Сообщений: 156
По умолчанию

Цитата:
Сообщение от Kotofff Посмотреть сообщение
да все работать должно ...
а что имеено пишет - текст ошибки каков ?
просто не запускает
Все мы отчасти гении!Но на сколько мы умны настолько же мы и глупы!
Волк вне форума Ответить с цитированием
Старый 07.02.2009, 18:40   #37
goblinyara
Форумчанин
 
Аватар для goblinyara
 
Регистрация: 02.01.2009
Сообщений: 340
По умолчанию

в окне Warnings какой текст ошибки самой?
DelphiWorld 6. Скачай, поставь, и будет тебе счастье=)
Программирование, как и любовь -- одно слово, за которым скрывается бесконечное множество занятий.
goblinyara вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сохранить листы (Лист1-Лист2-Лист3 и т.д.) из одного файла в несколько разных? Kilobox Microsoft Office Excel 4 28.01.2009 18:39
Перенос обновленных данных из одного файла в другой viter.alex Microsoft Office Excel 5 13.01.2009 07:06
из одного текстового файла виделить цифры и поместить в другой(пустой) файл serguna005 Паскаль, Turbo Pascal, PascalABC.NET 2 07.12.2008 20:55
Сравнить два файла Aleksandr Microsoft Office Excel 6 07.10.2008 00:22
Передача файла с одного компа на другой Kocapb Фриланс 4 18.11.2007 18:37