![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Application.ProssesMessage в KOL? [Delphi, Windows]
Delphi5.01 © (2004-04-14 20:57:00)Доброе время суток!
Что является аналогом Application.ProssesMessage в KOL?
Спасибо
Deimos (2004-04-23 21:56:00) [1]всё работает, благодарю!!
Viman (2004-04-23 11:11:00) [2]2 all.
Мудрите немного. Дело в том, что OnShow и другие подобные события происходят когда ещё форма не видна, но вот-вот покажется. И если там вызывать основной код программы здесь, то и покажется форма только по его завершению. Во время выполнения кода можете сколько угодно перерисовывать и апдейтить контролы, НО форма-то ещё не видна!
Попробуй так, должно быть все гуд, естественно в procedure start помести свой код:
program CicleProgress;
uses Kol, windows, messages;
var MainForm: PControl; ProgressBar: PControl; AlreadyRun: Boolean = false;
procedure Start;
var Idx: Integer;
begin
for Idx:=0 to ProgressBar.MaxProgress do
begin
ProgressBar.Progress:= Idx;
MainForm.ProcessMessagesEx;
Sleep(10);
end;
end;
function OnWessages(Dummy : Pointer; var Msg: TMsg; var Rslt: Integer ): Boolean;
begin
Result:= false;
if (Msg.message = WM_ACTIVATE) and not AlreadyRun then
begin
Rslt:= 0;
AlreadyRun:= true;
Start;
end;
end;
begin
MainForm:= NewForm(nil, 'Test progress...');
ProgressBar:= NewProgressBar(MainForm);
MainForm.Width:=300; MainForm.Height:=80;
ProgressBar.Height:=10; ProgressBar.Width:=270;
ProgressBar.Left:= 10;
ProgressBar.Top:= 20;
MainForm.OnMessage:= TOnMessage(MakeMethod(nil,@OnWessages));
run(MainForm);
end.
Solik (2004-04-23 08:04:00) [3]onFormShow
Deimos (2004-04-23 07:36:00) [4]ммммда..
такое ощущение, что событие onShow происходит только после полной прорисовки контролов, но ведь работает-же.
может другое событие поискать ?
в VCL,помнится, было событие onCreate. у него есть KOL аналог ? я вроде-бы не нашел..
SPeller (2004-04-23 03:24:00) [5]Волшебная у тебя программа :)
Deimos (2004-04-22 20:42:00) [6]Всё равно не получается..
А что делают Invalidate,Update?
может я их вызываю неправильно..
progress1.Progress:= progress1.Progress+1;
applet.ProcessMessages;
progress1.Invalidate;
progress1.Update;
Gandalf (2004-04-22 12:30:00) [7]А где Invalidate,Update?
Deimos (2004-04-21 16:06:00) [8]Хотя, рановато я обрадовался.
Так тоже не работает....................... 8(
это уже не камни, - это прямо подводные грабли какие-то. :)
Deimos (2004-04-21 15:42:00) [9]понял.. ,спасибо!!!
беру все свои слова обратно.
SPeller (2004-04-21 02:55:00) [10]Вместо этой строки
form:=newForm(applet, 'Идёт упаковка');
сделай так:
form := newForm( nil, 'Caption' );
Applet := form;
А то аплет-то у тебя nil, поэтому никакой ProcessMessage(s) и не работает.
Deimos (2004-04-20 22:03:00) [11]пожалуйста:
program Project1;
{$R *.res}
uses
windows,
messages,
kol,
KOLBlockCipher,
KOLSHA384;
var
form:Pcontrol;
progress1:Pcontrol;
//********************
procedure start( Dummy : Pointer; Sender: PControl );
var
Source, Dest: pStream;
len: integer; // длинна куска
cel,ost:integer; // для операций деления
i: integer; // счетчик
inbuf,outbuf: array [1..1000]of byte;
fish:TKOLBlowfish;
SHA384: TKOLSHA384;
DigSHA384: array [0..47] of byte; // 384 бит на ключ
begin
progress1.Progress:=0;
Source:= NewReadFileStream (ParamStr(1));
cel:=source.Size div 1000; //количество целых оборотов по 1000 байт
ost:=source.Size mod 1000; // остаток
progress1.MaxProgress:=cel;
if ParamStr(2)= '/e' then
Dest:=NewWriteFileStream (ParamStr(1)+'.bfs')
else
Dest:=NewWriteFileStream (ChangeFileExt(ParamStr(1),''));
SHA384:= NewSHA384;
SHA384.InitHash; // Инициализируем хеш
SHA384.UpdateStr('password'); // Хешируем пароль
SHA384.Final(DigSHA384); // Получаем захешированный пароль как 384 битный ключ
// для blowfish максимум 448 байт
SHA384.Burn; // Очищаем хеш
len:=1000; // Устанавливаем длину блока
// данных для шифровки/расшифровки
//***********************************************************************
if ParamStr(2) = '/e' then //если нас просят шифровать
begin
for i:= cel downto 1 do
begin
source.Read(inBuf,len);
fish:=NewBlowfish;
fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
fish.EncryptOFB(inbuf,outbuf,len); //шифруем
fish.Burn;
dest.Write(outBuf,len); //пишем в конечный файл 1000 байта
progress1.Progress:= progress1.Progress+1;// увеличим прогресс бар
applet.ProcessMessages;
end;
source.Read(inBuf,ost); //дочитываем остатки
fish:=NewBlowfish;
fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
fish.EncryptOFB(inbuf,outbuf,ost); //шифруем остаток
fish.Burn;
dest.Write(outBuf,ost);
end
//*********************************************
else // иначе расшифровываем
begin
for i:= cel downto 1 do
begin
source.Read(inBuf,len);
fish:=NewBlowfish;
fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ
fish.DecryptOFB(inbuf,outbuf,len); //расшифровываем
fish.Burn;
dest.Write(outBuf,len); //пишем в конечный файл 1000 байт
progress1.Progress:= progress1.Progress+1;// увеличим прогресс бар
applet.ProcessMessages;
end;
source.Read(inBuf,ost);
fish:=NewBlowfish;
fish.InitKey(DigSHA384,384); // Длина ключа в БИТАХ!!!
fish.DecryptOFB(inbuf,outbuf,ost); //расшифровываем
fish.Burn;
dest.Write(outBuf,ost);
end;
source.Free; // всех освобождаем
dest.free;
fish.Free;
SHA384.free;
end;
//-----------------
begin
form:=newForm(applet, 'Идёт упаковка');
form.Width:=304;
form.Height:=40;
progress1:=NewProgressbar(form);
progress1.Height:=10;
progress1.Width:=300;
form.OnShow:= TOnEvent(MakeMethod(nil,@start));
run(form);
end.
может кто-нибудь у себя откомпилирует?
прога должна работать из командной строки
пример: чтобы зашифровать 1.zip
Project1.exe 1.zip /e
чтобы расшифровать 1.zip.bfs
Project1.exe 1.zip.bfs
а то я не знаю уже на что думать...
SPeller (2004-04-20 12:01:00) [12]Привели код своего прогресса.
Max Kozlov (2004-04-20 09:44:00) [13]как уже писал Gandalf
"Поробуй ему Invalidate, Update."
сразу после ProcessMessages
Deimos (2004-04-19 18:10:00) [14]да.. по крайней мере у меня точно не работает.. :))) линейка статуса появляется только по окончании процесса, сразу заполненная
правда, лишь в том случае если начало индикации привязано к событию
визуализации формы. (onShow)
Между прочим я уже поднимал эту тему, но мне никто так ничего вразумительного не ответил.
SPeller (2004-04-19 12:37:00) [15]
> по барабану... ProcessMessages тоже не работает...
Ты уверен?
Deimos (2004-04-18 20:53:00) [16]по барабану... ProcessMessages тоже не работает...
4kusNick (2004-04-17 19:26:00) [17]Или ProcessMessagesEx
SPeller (2004-04-17 03:10:00) [18]ProcessMessage s !
ProcessMessage всего-лишь одно сообщение обрабатывает :)
Deimos (2004-04-16 19:33:00) [19]applet.ProcessMessage тоже не работает..
mdw (2004-04-16 10:57:00) [20]> Кстати..при использовании с Прогресс баром Form.ProcessMessage не работает :((
А почему Form.ProcessMessage? а не Applet?