![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
а можно ли так: [D3, Win95/98]
zetta © (2002-07-25 14:51:00)а можно ли так:
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
while not eoff do bgproc;
application.terminate;
if b1 0 then begin c:=b1;
BlockwRite(f2,wrbuf1,b1,b1);end;
Closefile(f2);
Closefile(f1);
end.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg("Terminate program?", mtwarning, [mbyes,mbno], 0)=mryes then eoff:=true;
end;
bgproc читает с помощью буфера строку из файла, конвертит и забрасывает в другой файл.
более подробный листинг здесь: http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1027522983&n=0
как сделать, чтобы форма была видна?
readstr и wrstr1 вызывают application.ProcessMessages
zetta (2002-07-25 18:58:00) [1]попробую с нитями. а под внутренностями перерисовываются я имею ввиду, что все окно с прогрессбаром движущимся и лейблом "Processing...", а капшон не перисовывается и потому и не виден. серое поле, прогрессбар, лейбл и усе.
zetta (2002-07-25 18:52:00) [2]самое смешное, что портировал я эту программу из-под доса на макинтошевский think pascal (symantec) за 2 дня, а с делфи уже вторую неделю долбаюсь. на маке исполняемый файл весит 12 кб - с окнами, индикаторами и прочим. прогресс, понимаешь! жаль, что на джаве защита есть для аплетного файлового ввода-вывода. а то писал бы 1 раз для разных платформ и не маялся бы.
Skier (2002-07-25 18:51:00) [3]>zetta
Тогда что ты имеешь в виду под ": внутренности перерисовываются, а заголовок - нет" ?
А вообще Dmitry Toropov дело говорит...
zetta (2002-07-25 18:47:00) [4]только в пропертях формы - в object inspector. больше нигде.
Dmitry Toropov (2002-07-25 18:43:00) [5]Думаю, все-же лучше процессинг реализовать в TThread, а начать его (thread) в конструкторе или другом инициализаторе формы. Тогда проблем с перерисовкой не будет и форму можно будет свободно по экрану возить.
Skier (2002-07-25 18:42:00) [6]>zetta
А я вообще не нашёл где у тебя Caption формы
обновляется (присваивается новое значение).
Может покажешь ?
zetta (2002-07-25 18:31:00) [7]все равно - до лампочки. как было, так и осталось - внутренности без заголовка.
Skier (2002-07-25 18:24:00) [8]>zetta
Причём тут TForm1.FormPaint !?
zetta (2002-07-25 18:22:00) [9]до лампочки - не вызывает TForm1.FormPaint
Skier (2002-07-25 18:16:00) [10]>zetta
перерисовывать заголовок попробуй через
SendMessage(Form1.Handle, WM_NCPAINT, 0, 0)
zetta (2002-07-25 18:01:00) [11]да, автоматом не хотит. и чтоб он реагировал на нажатие на кнопочки сворачивания и закрытия окна.
Skier (2002-07-25 17:58:00) [12]>zetta
Ты заголовок формы хочешь перерисовывать ?
zetta (2002-07-25 17:53:00) [13]не помогло
zetta (2002-07-25 17:51:00) [14]сейчас попробую
Skier (2002-07-25 17:44:00) [15]>zetta
В bgproc application.ProcessMessages тоже внеси в цикл.
zetta (2002-07-25 17:42:00) [16]procedure readstr;
var cc: char;
tot:integer;
begin
if eoff then
exit;
application.ProcessMessages;
s := "";
c := 0;
repeat
if a = total1 then
begin
total1 := fsz - totread;
if total1 < 1 then
begin
eoff := true;
exit;
end
else if total1 > max then
total1 := max;
tot:=total1;
BlockRead(f1,rdbuf, tot, tot);total1:=tot;
a := 0;
end;
a := a + 1;
totread := totread + 1;
cc := rdbuf[a];
if (cc <> chr(10)) and (cc <> chr(13)) then
begin
c := c + 1;
if c=256 then begin
err("error: Line is too long");end;
s:= s+cc;
end;
until cc = chr(13); application.ProcessMessages;
end;
procedure wrstr1;
var c: integer;
procedure wrc (cc: char);
begin
if b1=max then begin
blockwrite(f2,wrbuf1,max,b1);b1:=0;
end;
b1 := b1 + 1;
wrbuf1[b1] := cc;
end;
begin application.ProcessMessages;
for c := 1 to length(s) do
wrc(s[c]);
wrc(chr(13));application.ProcessMessages;
end;
procedure BGProc; //readstr и wrstr1 работают через буфер
var ll:word;
begin
readstr; //зачитывает строку в s
if eoff then
begin
exit;
end;
if s="" then begin wrstr1;exit;end;
if s[1] = "%" then
begin
if not tr then
begin
if findL("%AI5_TargetResolution:") then
begin
s := tr_n;
wrstr1;
tr := true;
end
else
wrstr1; //забрасывает строку s в выходной файл
end
else
wrstr1;
end
else
begin
ll := length(s);
if ll > 3 then
begin
if (s[ll] = "r") and (s[ll - 1] = "A") then
begin
s := ar_n;
wrstr1;
end
else
wrstr1
end
else
wrstr1;
end;
if totread > breaking then
begin
while totread >= breaking do
begin
breaking := breaking + breakst;
pix := pix + pixst;
end;
form1.progressbar1.position:=pix;
end;
end;
а bgproc я вызываю в цикле.
Skier (2002-07-25 17:40:00) [17]>zetta
Я же говорю в цикл !
Где у тебя там Application.ProcessMessages в цикле !?
zetta (2002-07-25 17:34:00) [18]он тама есть уже: смотри http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1027522983&n=0со слов
zetta © (24.07.02 20:13)
Skier (2002-07-25 17:28:00) [19]>zetta
Иногда полезно в цикл вставлять Application.ProcessMessages
zetta (2002-07-25 17:24:00) [20]попутная проблема: внутренности перерисовываются, а заголовок - нет. как гада заставить и заголовок перерисовывать?