Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача первой подрограммы во 2ю в качестве параметра


Страницы:   1 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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо