Главная страница
    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.043 c
1-1105967931
rolex
2005-01-17 16:18
2005.01.30
Как сделать чтобы hint не убирался ч/з определённое время?


1-1105701891
Leon1
2005-01-14 14:24
2005.01.30
Настройка DbGrid


3-1103875805
AlexAndreev
2004-12-24 11:10
2005.01.30
Есть DbGrid и DbMemo


6-1099636036
_intruder
2004-11-05 09:27
2005.01.30
Отправка смс (МегаСлон, МТС, БиЛайн из программы Делфи


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