Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
Вниза можно ли так: Найти похожие ветки
← →
zetta (2002-07-25 14:51) [0]а можно ли так:
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
← →
Digitman (2002-07-25 14:53) [1]нельзя. А смысл всего этого каков ?
← →
Skier (2002-07-25 14:59) [2]>zetta
Не знаю какой смысл во всём этом, но цикл лучше
написать так
while True do
bgproc;
if MessageDlg("Terminate program?", mtwarning,[mbyes,mbno],
0)=mryes then Break;
if b1 <> 0 then begin
c:=b1;
BlockwRite(f2,wrbuf1,b1,b1);
end; //if
end; //while
← →
zetta (2002-07-25 15:04) [3]обработка файла построчно. строку беру из 1го файла, конверчу и кидаю в другой файл. работает - файлы конвертятся, сохраняются, а формы не видать. хотелось бы показывать на ней индикатор.
← →
zetta (2002-07-25 15:06) [4]skier: ага, после каждой обработанной строки спрашивать юзера: "Terminate program?"
← →
Skier (2002-07-25 15:08) [5]>zetta
А чтобы тебе не сделать отдельную форму, в который ты
и будешь всем этим заниматься ?
Создавать,показывать и убивать её будешь сразу
после строчки Application.Initialize;
← →
zetta (2002-07-25 15:09) [6]так какую процедуру вызывать для показывания формы?
← →
Skier (2002-07-25 15:21) [7]>zetta
dpr-файл :
var
FormFileHandling : TFormFileHandling;
begin
Application.Initialize;
FormFileHandling := TFormFileHandling.Create(nil);
try
FormFileHandling.Show;
while FormFileHandling.FileHandling do; //do nothing...
finally
FormFileHandling.Free;
end; //try
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Флаг FormFileHandling.FileHandling сбрасывается (:=False) как только форма FormFileHandling "обработала" файлы
← →
novice_al (2002-07-25 15:30) [8]ЛЮДИ!!! ВСЁ ОК!!! THANK YOU VERY MUCH!!!
← →
Внук (2002-07-25 15:32) [9]novice_al © (25.07.02 15:30)
Мимо :))))
← →
zetta (2002-07-25 15:35) [10]Skier: не то
← →
Skier (2002-07-25 15:36) [11]>zetta
Что именно ?
← →
zetta (2002-07-25 15:50) [12]кроме формы с индикатором мне никакой другой не надо.
мне просто нужно показать форму и все. файлы уже конвертятся.
← →
Skier (2002-07-25 15:56) [13]>zetta
var
FormFileHandling : TFormFileHandling;
begin
Application.Initialize;
FormFileHandling := TFormFileHandling.Create(nil);
try
FormFileHandling.Show;
while FormFileHandling.FileHandling do; //do nothing...
finally
FormFileHandling.Free;
end; //try
Application.Terminate;
end.
← →
zetta (2002-07-25 16:28) [14]а что за TFormFileHandling9
← →
Skier (2002-07-25 16:29) [15]>zetta
Твоя единственная форма в приложении.
← →
zetta (2002-07-25 16:54) [16]TFormFileHandling как выглядит описание этого типа?
← →
Skier (2002-07-25 17:02) [17]>zetta
Это форма (вместо твоей TForm1)
Сделай у неё флаг FileHandling и всё...
Короче говоря (чтобы было понятней) :
var
Form1 : TForm1;
begin
Application.Initialize;
Form1 := TForm1.Create(nil);
try
Form1.Show;
while Form1.FileHandling do; //do nothing...
finally
Form1.Free;
end; //try
Application.Terminate;
end.
Насколько я понял твоё приложение это просто индикатор
процесса обработки файлов.
Значит как только ты их обработал - делаешь приложению
Application.Terminate и...порядок.
← →
zetta (2002-07-25 17:18) [18]спасибо!!!!!
уррря! заработало!!!
← →
zetta (2002-07-25 17:24) [19]попутная проблема: внутренности перерисовываются, а заголовок - нет. как гада заставить и заголовок перерисовывать?
← →
Skier (2002-07-25 17:28) [20]>zetta
Иногда полезно в цикл вставлять Application.ProcessMessages
← →
zetta (2002-07-25 17:34) [21]он тама есть уже: смотри 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:40) [22]>zetta
Я же говорю в цикл !
Где у тебя там Application.ProcessMessages в цикле !?
← →
zetta (2002-07-25 17:42) [23]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:44) [24]>zetta
В bgproc application.ProcessMessages тоже внеси в цикл.
← →
zetta (2002-07-25 17:51) [25]сейчас попробую
← →
zetta (2002-07-25 17:53) [26]не помогло
← →
Skier (2002-07-25 17:58) [27]>zetta
Ты заголовок формы хочешь перерисовывать ?
← →
zetta (2002-07-25 18:01) [28]да, автоматом не хотит. и чтоб он реагировал на нажатие на кнопочки сворачивания и закрытия окна.
← →
Skier (2002-07-25 18:16) [29]>zetta
перерисовывать заголовок попробуй через
SendMessage(Form1.Handle, WM_NCPAINT, 0, 0)
← →
zetta (2002-07-25 18:22) [30]до лампочки - не вызывает TForm1.FormPaint
← →
Skier (2002-07-25 18:24) [31]>zetta
Причём тут TForm1.FormPaint !?
← →
zetta (2002-07-25 18:31) [32]все равно - до лампочки. как было, так и осталось - внутренности без заголовка.
← →
Skier (2002-07-25 18:42) [33]>zetta
А я вообще не нашёл где у тебя Caption формы
обновляется (присваивается новое значение).
Может покажешь ?
← →
Dmitry Toropov (2002-07-25 18:43) [34]Думаю, все-же лучше процессинг реализовать в TThread, а начать его (thread) в конструкторе или другом инициализаторе формы. Тогда проблем с перерисовкой не будет и форму можно будет свободно по экрану возить.
← →
zetta (2002-07-25 18:47) [35]только в пропертях формы - в object inspector. больше нигде.
← →
Skier (2002-07-25 18:51) [36]>zetta
Тогда что ты имеешь в виду под ": внутренности перерисовываются, а заголовок - нет" ?
А вообще Dmitry Toropov дело говорит...
← →
zetta (2002-07-25 18:52) [37]самое смешное, что портировал я эту программу из-под доса на макинтошевский think pascal (symantec) за 2 дня, а с делфи уже вторую неделю долбаюсь. на маке исполняемый файл весит 12 кб - с окнами, индикаторами и прочим. прогресс, понимаешь! жаль, что на джаве защита есть для аплетного файлового ввода-вывода. а то писал бы 1 раз для разных платформ и не маялся бы.
← →
zetta (2002-07-25 18:58) [38]попробую с нитями. а под внутренностями перерисовываются я имею ввиду, что все окно с прогрессбаром движущимся и лейблом "Processing...", а капшон не перисовывается и потому и не виден. серое поле, прогрессбар, лейбл и усе.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c