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

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

Application.ProssesMessage в KOL? [Delphi, Windows]


Страницы:   1 2

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?


Страницы:   1 2

Наверх

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