![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача первой подрограммы во 2ю в качестве параметра
Weei © (2011-06-25 20:57:00)Здравствуйте
В универе задали написать простенькую программку по кодированию файлов.
Препод сказал добавить прогресс для визуального отображения хода процесса.
Я предполагал зделать так:
...
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;
Однако ничего не получилось.
Подскажите в какую сторону копать.
Weei (2011-06-25 21:38:00) [21]Предыдущий пост запоздал )
Weei (2011-06-25 21:36:00) [22]Что с var что без него (даж с const проэкспериментировал :) )
Kerk (2011-06-25 21:35:00) [23]Похоже, ты чего-то недоговариваешь :)
Попробую угадать
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:32:00) [24]Всё равно не компилируется.
Ошибка та же, но наProgChangeProc := ProgressChange;
Kerk (2011-06-25 21:26:00) [25]
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 зачем-то нужен (в чем я сомневаюсь), то так должно получиться.
Kerk (2011-06-25 21:25:00) [26]Ну так бы сразу и сказал :)
Function _XorCodeFile(const Password:String; Var Source:TFileStream; var OnProgress:TProgressChange):Boolean;
А "var" перед OnProgress тебе там вообще зачем? Потому и не компилится. Ты же туда не переменную передаешь.
Weei (2011-06-25 21:21:00) [27]Не не не))) программа не виснет, она просто не компилируется ))
Ошибка тут ->_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:10:00) [28]
procedure ProgressChange (Progress: Integer; ProgressMax: Integer);
Begin
ProgressBar1.Max:=ProgressMax;
ProgressBar1.Position:=Progress;
Application.ProcessMessages;
end;