Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-24275
Baz
2002-05-31 10:50
2002.08.08
Как правильно обрабатывать сообщение WM_PAINT?


1-24012
Иван61
2002-07-28 20:02
2002.08.08
Грабли по имени UpCase


1-24080
Nox
2002-07-26 13:53
2002.08.08
Люди, как по-примеру back oriffice копаться в чужом компе...


4-24262
Berkut
2002-05-31 21:50
2002.08.08
Кнопка Пуск


6-24163
ss18
2002-05-26 16:51
2002.08.08
Кто нибудь работал с DNS-сервером?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский