Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1308774596
Юрий
2011-06-23 00:29
2011.10.16
С днем рождения ! 23 июня 2011 четверг


15-1308570020
Sergey
2011-06-20 15:40
2011.10.16
оживет ли винт?


15-1308891816
Дмитрий С
2011-06-24 09:03
2011.10.16
Как назначить клавиши на кнопки Back/Forward в IDE?


15-1308682059
Кто б сомневался
2011-06-21 22:47
2011.10.16
На сколько уменьшается продолжительность дня после 22 июня?


15-1308649338
stas
2011-06-21 13:42
2011.10.16
TwebBrowser и потоки