Форум: "KOL";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
ВнизApplication.ProssesMessage в KOL? Найти похожие ветки
← →
Delphi5.01 © (2004-04-14 20:57) [0]Доброе время суток!
Что является аналогом Application.ProssesMessage в KOL?
Спасибо
← →
Gandalf © (2004-04-14 21:08) [1]Applet.Оноже...
← →
miek © (2004-04-14 22:10) [2]Form.ProcessMessage
Form.ProcessMessages
Form.ProcessPaintMessages
← →
Delphi5.01 © (2004-04-15 07:13) [3]Spasibo ...
Spasibo
Spasibo
Spasibo
:-)))
← →
Deimos © (2004-04-15 22:55) [4]Кстати..при использовании с Прогресс баром Form.ProcessMessage не работает :((
← →
Gandalf © (2004-04-16 10:26) [5]Поробуй ему Invalidate, Update.
← →
mdw © (2004-04-16 10:57) [6]>Кстати..при использовании с Прогресс баром Form.ProcessMessage не работает :((
А почему Form.ProcessMessage? а не Applet?
← →
Deimos © (2004-04-16 19:33) [7]applet.ProcessMessage тоже не работает..
← →
SPeller © (2004-04-17 03:10) [8]ProcessMessages !
ProcessMessage всего-лишь одно сообщение обрабатывает :)
← →
4kusNick © (2004-04-17 19:26) [9]Или ProcessMessagesEx
← →
Deimos © (2004-04-18 20:53) [10]по барабану... ProcessMessages тоже не работает...
← →
SPeller © (2004-04-19 12:37) [11]
> по барабану... ProcessMessages тоже не работает...
Ты уверен?
← →
Deimos © (2004-04-19 18:10) [12]да.. по крайней мере у меня точно не работает.. :))) линейка статуса появляется только по окончании процесса, сразу заполненная
правда, лишь в том случае если начало индикации привязано к событию
визуализации формы. (onShow)
Между прочим я уже поднимал эту тему, но мне никто так ничего вразумительного не ответил.
← →
Max Kozlov (2004-04-20 09:44) [13]как уже писал Gandalf
"Поробуй ему Invalidate, Update."
сразу после ProcessMessages
← →
SPeller © (2004-04-20 12:01) [14]Привели код своего прогресса.
← →
Deimos © (2004-04-20 22:03) [15]пожалуйста:
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-21 02:55) [16]Вместо этой строки
form:=newForm(applet, "Идёт упаковка");
сделай так:form := newForm( nil, "Caption" );
Applet := form;
А то аплет-то у тебя nil, поэтому никакой ProcessMessage(s) и не работает.
← →
Deimos © (2004-04-21 15:42) [17]понял.. ,спасибо!!!
беру все свои слова обратно.
← →
Deimos © (2004-04-21 16:06) [18]Хотя, рановато я обрадовался.
Так тоже не работает....................... 8(
это уже не камни, - это прямо подводные грабли какие-то. :)
← →
Gandalf © (2004-04-22 12:30) [19]А где Invalidate,Update?
← →
Deimos © (2004-04-22 20:42) [20]Всё равно не получается..
А что делают Invalidate,Update?
может я их вызываю неправильно..
progress1.Progress:= progress1.Progress+1;
applet.ProcessMessages;
progress1.Invalidate;
progress1.Update;
← →
SPeller © (2004-04-23 03:24) [21]Волшебная у тебя программа :)
← →
Deimos © (2004-04-23 07:36) [22]ммммда..
такое ощущение, что событие onShow происходит только после полной прорисовки контролов, но ведь работает-же.
может другое событие поискать ?
в VCL,помнится, было событие onCreate. у него есть KOL аналог ? я вроде-бы не нашел..
← →
Solik © (2004-04-23 08:04) [23]onFormShow
← →
Viman © (2004-04-23 11:11) [24]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.
← →
Deimos © (2004-04-23 21:56) [25]всё работает, благодарю!!
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c