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

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

а можно ли так: [D3, Win95/98]


Страницы:   1 2

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]

попутная проблема: внутренности перерисовываются, а заголовок - нет. как гада заставить и заголовок перерисовывать?


Страницы:   1 2

Наверх

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