Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

Остановка проверки на идентичность   Найти похожие ветки 

 
WhiteGuy ©   (2005-01-17 16:34) [0]

Здорово, Мастера!
Я ображаюсь вот чего:
Раньше я задавал вопрос о том, как проверить два файла на идентичность. Так вот, товарищ begin...end мне написал:

var
// Имена файлов
FileName1, FileName2: String;
// Потоки, с помощью которых можно читать из файлов
FileStream1, FileStream2: TFileStream;
// Указатели на буферы, в которых будут очередные куски данных из файлов
Buffer1, Buffer2: Pointer;
// Размер каждого буфера
// Над размером нужно хорошо подумать
BufferSize: Integer;
// Количество считанных байт на очередном проходе
// Вообще-то эти переменные должны быть равны, но так... на всякий случай...
BytesCount1, BytesCount2: Integer;
// Переменная, указывающая на идентичность файлов
Ident: Boolean;
begin
FileStream1 := TFileStream.Create(FileName1, fmShareDenyNone);
FileStream2 := TFileStream.Create(FileName2, fmShareDenyNone);
if FileStream1.Size <> FileStream2.Size then
begin
  // До свидания, размеры неодинаковые
  FileStream1.Free;
  FileStream2.Free
end
else
begin
  BufferSize := {здесь хорошо думаем};
  // Выделяем память для буферов
  GetMem(Buffer1, BufferSize);
  GetMem(Buffer2, BufferSize);
  try
    repeat
      BytesCount1 := FileStream1.Read(Buffer1^, BufferSize);
      BytesCount2 := FileStream2.Read(Buffer2^, BufferSize);
      if BytesCount1 = BytesCount2 then
        // Непосредственно сравнение кусочков
        Ident := CompareMem(Buffer1, Buffer2, BufferSize);
    until (not Ident) or (BytesCount1 < BufferSize) or (BytesCount2 < BufferSize);
  finally
    // Что бы ни случилось, освобождаем драгоценную память
    FileStream1.Free;
    FileStream2.Free;
    FreeMem(Buffer1, BufferSize);
    FreeMem(Buffer2, BufferSize)
  end
end
end.


Так вот - как зделать, чтобы по нажатию, например, Эск выскакивала форма с двумя кнопками "Продолжить" и "Выход"? Дайте пожалуйста код, помогите нещастному чайнику!


 
Александр Иванов ©   (2005-01-17 16:50) [1]

Недавно был такой вопрос. Варианты:

1. Вынести все в отдельный поток.
2. Использовать глобальную переменную.


 
WhiteGuy ©   (2005-01-18 13:27) [2]

2Александр Иванов
А можно подсказать как, ведь я в Delphi полный новичок! (ламер 8))


 
begin...end ©   (2005-01-18 15:19) [3]

> [2] WhiteGuy ©   (18.01.05 13:27)

А что именно непонятно?

Ну, расскажу про дополнительный поток. Создаёте модуль потока (File -> New -> Other -> Thread Object), в метод Execute которого помещаете вышеприведённый код.

В основном модуле запускаете этот поток (MyThread := TMyThread.Create(False)), а по нажатию кнопки Esc (Form.OnKeyDown) приостанавливаете выполнение потока (MyThread.Suspend), затем вызываете ShowMessage, в котором спрашиваете, продолжить или отменить, и в зависимости от ответа пользователя либо полностью останавливаете выполнение потока (MyThread.Terminate), либо продолжаете его выполнение (MyThread.Resume).

И ничего очень сложного, в общем-то, нет.

---
Sorry, I"m drunk now


 
WhiteGuy ©   (2005-01-18 15:33) [4]

Спасибо!



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

Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.04 c
3-1104254172
Чеширский_Кот
2004-12-28 20:16
2005.01.30
MySQL Database


3-1103873143
DelphiN!
2004-12-24 10:25
2005.01.30
Ошибка при фильтрации данных в ClientDataSet-e


1-1105891337
Qu
2005-01-16 19:02
2005.01.30
Определение цвета?


1-1105699329
Варава
2005-01-14 13:42
2005.01.30
QuickReport и длинные поля.


1-1105614904
вратарь
2005-01-13 14:15
2005.01.30
Шифрование





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский