Главная страница
    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.037 c
3-1104218930
Scorpio
2004-12-28 10:28
2005.01.30
Could not convert variant of type (Null) into type (String)


3-1103977626
Varfolomey
2004-12-25 15:27
2005.01.30
InterBase 6.0: BLOB


3-1103721736
Andrej
2004-12-22 16:22
2005.01.30
исключения в IB &amp; try...except


11-1089101164
Nox
2004-07-06 12:06
2005.01.30
KOLEdb: работа с несколькими таблицами


14-1105358106
snake_r
2005-01-10 14:55
2005.01.30
RX для D7





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский