Текущий архив: 2011.10.16;
Скачать: CL | DM;
Вниз
Передача первой подрограммы во 2ю в качестве параметра Найти похожие ветки
← →
Weei (2011-06-25 20:57) [0]Здравствуйте
В универе задали написать простенькую программку по кодированию файлов.
Препод сказал добавить прогресс для визуального отображения хода процесса.
Я предполагал зделать так:
...
Type
TProgressChange = procedure(Progress: Integer; ProgressMax: Integer);
....
procedure ProgressChange (Progress: Integer; ProgressMax: Integer);
Begin
ProgressBar1.Max:=ProgressMax;
ProgressBar1.Position:=Progress;
end;
Function _XorCodeFile(const Password:String; Var Source:TFileStream; var OnProgress:TProgressChange):Boolean;
Begin
...
OnProgress(...);
...
end;
Вызов
procedure TForm1.Button2Click(Sender: TObject);
var
Buffer: Byte;
FileIn: TFileStream;
i, L:Integer;
begin
FileIn := TFileStream.Create(".\1.txt", fmOpenReadWrite);
_XorCodeFile(".0y7k",FileIn, ProgressChange);
FileIn.Free;
end;
Однако ничего не получилось.
Подскажите в какую сторону копать.
← →
Kerk © (2011-06-25 21:10) [1]
procedure ProgressChange (Progress: Integer; ProgressMax: Integer);
Begin
ProgressBar1.Max:=ProgressMax;
ProgressBar1.Position:=Progress;
Application.ProcessMessages;
end;
← →
Weei (2011-06-25 21:21) [2]Не не не))) программа не виснет, она просто не компилируется ))
Ошибка тут ->_XorCodeFile(".0y7k",FileIn, ProgressChange);
Ошибки
[Error] Unit1.pas(82): Types of actual and formal var parameters must be identical
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"
← →
Kerk © (2011-06-25 21:25) [3]Ну так бы сразу и сказал :)
Function _XorCodeFile(const Password:String; Var Source:TFileStream; var OnProgress:TProgressChange):Boolean;
А "var" перед OnProgress тебе там вообще зачем? Потому и не компилится. Ты же туда не переменную передаешь.
← →
Kerk © (2011-06-25 21:26) [4]
procedure TForm1.Button2Click(Sender: TObject);
var
Buffer: Byte;
FileIn: TFileStream;
i, L:Integer;
ProgChangeProc: TProgressChange;
begin
FileIn := TFileStream.Create(".\1.txt", fmOpenReadWrite);
ProChangeProc := ProgressChange;
_XorCodeFile(".0y7k",FileIn, ProgChangeProc);
FileIn.Free;
end;
Если же var зачем-то нужен (в чем я сомневаюсь), то так должно получиться.
← →
Weei (2011-06-25 21:32) [5]Всё равно не компилируется.
Ошибка та же, но наProgChangeProc := ProgressChange;
← →
Kerk © (2011-06-25 21:35) [6]Похоже, ты чего-то недоговариваешь :)
Попробую угадатьprocedure ProgressChange (Progress: Integer; ProgressMax: Integer);
на самом деле выглядит какprocedure TForm1.ProgressChange (Progress: Integer; ProgressMax: Integer);
?
Если да, тоTProgressChange = procedure(Progress: Integer; ProgressMax: Integer) of object;
← →
Weei (2011-06-25 21:36) [7]Что с var что без него (даж с const проэкспериментировал :) )
← →
Weei (2011-06-25 21:38) [8]Предыдущий пост запоздал )
← →
Weei (2011-06-25 21:40) [9]Теперь компилируется, но прогресс не "бежит"
← →
Kerk © (2011-06-25 21:42) [10]Значит пора вернутся к посту №1 :)
procedure ProgressChange (Progress: Integer; ProgressMax: Integer);
Begin
ProgressBar1.Max:=ProgressMax;
ProgressBar1.Position:=Progress;
Application.ProcessMessages;
end;
← →
Weei (2011-06-25 21:42) [11]Всё реализовал )))
Спасибо )
← →
Weei (2011-06-25 21:43) [12]Я OnProgress в XorCodeFile забыл вызвать )))))))
← →
Weei (2011-06-25 21:48) [13]TProgressChange = procedure(Progress: Integer; ProgressMax: Integer) of object;
Какой смысл "несёт"of object;
???
TProgressChange = procedure(Progress: Integer; ProgressMax: Integer);
TProgressChange = procedure(Progress: Integer; ProgressMax: Integer) of object;
в чём принципиальная разница ?
← →
Ega23 © (2011-06-25 21:59) [14]
> в чём принципиальная разница ?
В одном случае это процедура, в другой - метод.
← →
Weei (2011-06-25 22:08) [15]Правельно я понял
TProgressChange = procedure(Progress: Integer; ProgressMax: Integer);
...
procedure ProgressChange (Progress: Integer; ProgressMax: Integer);
и
TProgressChange = procedure(Progress: Integer; ProgressMax: Integer) of object;
...
procedure TForm1.ProgressChange (Progress: Integer; ProgressMax: Integer);
???
← →
Ega23 © (2011-06-25 22:12) [16]
> Правельно я понял
Я не в курсе, что там ты понял, и что для тебя "правельно".
Одно - процедура, другое - метод. Чем они отличаются - писать долго и неохота. Но ты можешь в хелпе посмотреть самостоятельно.
← →
Weei (2011-06-25 22:15) [17]Спасибо за "правельно", исправлюсь. )
← →
картман © (2011-06-26 01:34) [18]
> Weei (25.06.11 22:15) [17]
>
> Спасибо за "правельно", исправлюсь. )
> Weei (25.06.11 20:57)
> Я предполагал зделать так:
мне тоже спасибо гони: "зделать"
← →
Weei (2011-06-26 06:32) [19]Ну я граматей)
← →
Ega23 © (2011-06-26 11:24) [20]
> Ну я граматей)
Ты не "граматей", ты неграмотная школота.
← →
Полвторого (2011-06-27 04:01) [21]> Ega23 © (26.06.11 11:24) [20]
Снисходительнее надо быть. Добрее.
Грамматический нацизм — бич современного Рунета.
© почти Копир…
← →
RWolf © (2011-06-27 09:56) [22]
> [21]
> Неграмотность — бич современного Рунета.
fixed.
← →
Anatoly Podgoretsky © (2011-06-27 10:08) [23]Смотри демос, там аж три прогресс бара есть
← →
Dennis I. Komarov © (2011-06-27 11:21) [24]
> Function _XorCodeFile
И так больше не надо делать...
← →
b z (2011-06-27 11:41) [25]
> И так больше не надо делать...
Почему?
← →
Dennis I. Komarov © (2011-06-27 12:05) [26]
> Почему?
1. Какую информативность несет "_" в данном случае?
2. Почему функции функции _AddRef и _Release так назвали?
← →
b z (2011-06-27 12:31) [27]
> 1. Какую информативность несет "_" в данном случае?
А какую должна? У нас например все приватные с "_" начинаются, а локальные с двух "_", и ничего. Просто так удобно.
> 2. Почему функции функции _AddRef и _Release так назвали?
Полагаю так захотелось, ошибаюсь?
← →
icWasya © (2011-06-27 12:41) [28]_AddRef и _Release - так захотелось Microsoft`у, тяжелое наследие "C".
Страницы: 1 вся ветка
Текущий архив: 2011.10.16;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.005 c