Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжелое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WMR: 146037758184 Webmoney WMP: 209123518174 Webmoney WME: 804621616710
PayPal PayPal_Email E-mail для связи по вопросу помощи
Кошелек для вашей помощи YooMoney 410013204813773
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Поиск в этой теме Опции просмотра Language
Старый 16.05.2009, 17:49   #1
Новичок
 
Пол:Мужской
Регистрация: 05.04.2008
Сообщений: 14
Репутация: 0
По умолчанию Виснет форма при работе с большим файлом

У меня проблемма
моя программа шифрует файлы
когда происходит работа с болшим файлом
форма просто не отвечает но приложение работает
по окончании перезаписи файла форма отвисает
но файл выбирается диалогом и сразу начинается перезапись и на форме остается серый прямоугольник от диалога
так еще и прогрессБар нужен а он не работает так как форма виснет помогите народ огромная просьба иначе с таким косяком меня препод сгнобит
PLEXus вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама


Реклама: купить костюмную вешалку напольнуюмагазины плетеной мебели в москвеклапан огнезадерживающий ррк-1к-90-250-o-m220-t-fGP-ASM2NE6100TTTDriester налобный осветитель


Старый 16.05.2009, 19:50   #2
hack
Ветеран
 
Аватар для hack
 
Пол:Мужской
Регистрация: 27.05.2005
Адрес: Тверь (Первомайка)
Сообщений: 2,115
Репутация: 3248
По умолчанию Re: Виснет форма при работе с большим файлом

Попробуйте в процессе обработки использовать
Код:
Application.ProcessMessages;
__________________
У победы много отцов, поражение всегда сирота.
hack вне форума
 
Ответить с цитированием Вверх
Старый 16.05.2009, 20:15   #3
PLEXus
Новичок
 
Пол:Мужской
Регистрация: 05.04.2008
Сообщений: 14
Репутация: 0
По умолчанию Re: Виснет форма при работе с большим файлом

Цитата:
Сообщение от hack Посмотреть сообщение
Попробуйте в процессе обработки использовать
Код:
Application.ProcessMessages;

Сейяас опробую отпишусь заранее спасибо

Добавлено через 18 минут
Частично проблема решилась
теперь не остается прямоугольника от диалого
но прогрессБар все равно работать нехочет
форма так же зависает
уже облазил прочти все ничего толкового не нашел

Последний раз редактировалось PLEXus; 16.05.2009 в 20:44.. Причина: Добавлено сообщение
PLEXus вне форума
 
Ответить с цитированием Вверх
Старый 16.05.2009, 20:37   #4
hack
Ветеран
 
Аватар для hack
 
Пол:Мужской
Регистрация: 27.05.2005
Адрес: Тверь (Первомайка)
Сообщений: 2,115
Репутация: 3248
По умолчанию Re: Виснет форма при работе с большим файлом

Покажите код использования прогресса.
__________________
У победы много отцов, поражение всегда сирота.
hack вне форума
 
Ответить с цитированием Вверх
Старый 16.05.2009, 20:46   #5
PLEXus
Новичок
 
Пол:Мужской
Регистрация: 05.04.2008
Сообщений: 14
Репутация: 0
По умолчанию Re: Виснет форма при работе с большим файлом

Нажатие кнопки
Цитата:
procedure TForm1.Image20Click(Sender: TObject);
var
FH,FMH:THandle;
DataAddr:pointer;
FSize:DWORD;
begin
GoImgProgress(image1);

Application.ProcessMessages;
if Edit1.Text='' then ShowMessage('Ââåäèòå ïàðîëü äëÿ çàøèôðîâêè') else
begin
Label6.Visible:=True;
Label7.Visible:=True;
Label8.Visible:=True;
Label9.Visible:=False;
Application.ProcessMessages;
FH:=CreateFile(pchar(Edit2.Text), GENERIC_ALL, FILE_SHARE_READ,0, OPEN_EXISTING, 0, 0);
if FH=INVALID_HANDLE_VALUE then ShowMessage('fgfg');
FSize:=GetFileSize(FH,nil);
FMH:=CreateFileMapping(FH,0,PAGE_READWRITE,0,FSize ,'');
DataAddr:=MapViewOfFile(FMH,FILE_MAP_ALL_ACCESS,0, 0,FSize);
CSCA1(DataAddr,FSize,pchar(Edit1.Text));
CloseHandle(FMH);
CloseHandle(FH);
Label6.Visible:=False;
Label7.Visible:=False;
Label8.Visible:=False;
Label9.Visible:=True;
end;
end;



Это алгоритм шифрования на АСМе

Цитата:
unit CSCA;

interface

uses windows;

{
CSCA1 - øèôðîâêà äàííûõ ñ ïîìîùüþ ïàðîëÿ
DataAddress - àäðåñ áóôåðà ñ äàííûìè
DataSize - ðàçìåð øèôðóåìûõ äàííûõ
Password - ïàðîëü
}
procedure CSCA1(DataAddress:pointer; DataSize: DWORD; Password: PChar);stdcall;

implementation

procedure CSCA1(DataAddress:pointer; DataSize: DWORD; Password: PChar);stdcall;
var
PasswordCp:DWORD;
PasswordLength:DWORD;
asm
jmp @@Entry

@@GET_CRC32:
push esi
push edi
push ecx
push ebx
push edx

cld
xor ecx,ecx
dec ecx
mov edx,ecx
@@NextByteCRC:
xor eax,eax
xor ebx,ebx
lodsb
xor al,cl
mov cl,ch
mov ch,dl
mov dl,dh
mov dh,8
@@NextBitCRC:
shr bx,1
rcr ax,1
jnc @@NoCRC
xor ax,08320h
xor bx,0EDB8h
@@NoCRC:
dec dh
jnz @@NextBitCRC
xor ecx,eax
xor edx,ebx
dec edi
jnz @@NextByteCRC
not edx
not ecx
mov eax,edx
rol eax,16
mov ax,cx

pop edx
pop ebx
pop ecx
pop edi
pop esi
ret


@@GetZSLength:

push ecx
push esi
push edi

cld
xor al, al
mov ecx, 0FFFFFFFFh
mov esi, edi
repne scasb
sub edi, esi
mov eax, edi
dec eax

pop edi
pop esi
pop ecx
ret

@@ExpandString:
pushad
mov ebx, esi
mov edi, esi
call @@GetZSLength
add edi, eax
mov ecx, eax
rep movsb
mov byte [edi], 0

add ebx, eax
mov ecx, 1
@@rep:
sub byte [ebx], cl
cmp byte [ebx], 0
jnz @@_f
mov byte [ebx], 7Fh
@@_f:
inc ecx
inc ebx
cmp byte [ebx],0
jz @@endrep
jmp @@rep
@@endrep:

popad
ret

@@NextPasswordMod:
pushad
dec edi

xor edx, edx
div edi
add esi, edx
mov bh, [esi]
mov ecx, edi
sub ecx, edx
@@next:
mov bl, [esi+1]
mov [esi], bl
inc esi
loop @@next
mov [esi], bh

popad
ret

@@Entry:

pushad
mov edi, Password
call @@GetZSLength
mov ebx, eax

shl eax, 1
mov [PasswordLength], eax
inc eax

push PAGE_READWRITE
push MEM_COMMIT+MEM_RESERVE
push eax
push 0
call VirtualAlloc

mov edi, eax
mov esi, Password
mov ecx, ebx
rep movsb
mov PasswordCp, eax

mov esi, eax
call @@ExpandString

xor ecx, ecx
@@next1:
mov esi, PasswordCp
mov edi, PasswordLength
mov eax, ecx
call @@NextPasswordMod

mov esi, PasswordCp
mov edi, PasswordLength
call @@GET_CRC32
mov edi, DataAddress
imul edx, ecx,4
add edi, edx

mov ebx, DataSize

sub ebx, edx
cmp ebx, 0
jz @@end
cmp ebx, 4
jl @@not_full_xor

@@full_xor:
xor [edi], eax
inc ecx
jmp @@next1
@@not_full_xor:
mov ecx, ebx
@@rep1:
dec ecx
add edi, ecx
mov dl, [edi]
xor dl, al
mov [edi], dl
sub edi, ecx
inc ecx
shr eax, 8
loop @@rep1
@@end:
push MEM_RELEASE
push 0
push PasswordCp
call VirtualFree

popad
end;

end.

Добавлено через 6 минут
прогресс бар в виде кртинки
http://delphiexpert.ru/view_lesson.php?id=48
использовал в другой программе пролемм с ним небыло

Последний раз редактировалось PLEXus; 16.05.2009 в 20:52.. Причина: Добавлено сообщение
PLEXus вне форума
 
Ответить с цитированием Вверх
Старый 16.05.2009, 21:15   #6
hack
Ветеран
 
Аватар для hack
 
Пол:Мужской
Регистрация: 27.05.2005
Адрес: Тверь (Первомайка)
Сообщений: 2,115
Репутация: 3248
По умолчанию Re: Виснет форма при работе с большим файлом

С таким я не работал
Может что нибудь типа:
Код:
GoImgProgress(image1);
Application.ProcessMessages;
Либо использовать
Код:
BeginUpdate;
//.........
EndUpdate;
Так с налета и не скажу даже.
Может для графики поможет: Repaint.
__________________
У победы много отцов, поражение всегда сирота.

Последний раз редактировалось hack; 16.05.2009 в 21:19..
hack вне форума
 
Ответить с цитированием Вверх
Старый 16.05.2009, 21:25   #7
PLEXus
Новичок
 
Пол:Мужской
Регистрация: 05.04.2008
Сообщений: 14
Репутация: 0
По умолчанию Re: Виснет форма при работе с большим файлом

BeginUpdate;
//.........
EndUpdate;
это применимо только к некоторым компонетнам но не форме

я уже пол дня бьюсь над этим и нчиего толкового не выходит

меня ставит в тупик что в АСМ код немогу запихать код на паскале/дельфи



скорее всего придется отказаться от прогрессбара
и во время работы приложение будет казаться зависшим,
а это не есть хорошо
даже файлы больше 100мб шифруются секунд 7
пробовал шифрануть файл 4.3 гб так ваще минуты две висело так еще и вылезло системного сообщение что необходимо увеличить файл подкачки.


просто препод дотошный докопается ведь
поробует большой файл шифрануть а тут косяк такой
PLEXus вне форума
 
Ответить с цитированием Вверх
Старый 16.05.2009, 22:02   #8
hack
Ветеран
 
Аватар для hack
 
Пол:Мужской
Регистрация: 27.05.2005
Адрес: Тверь (Первомайка)
Сообщений: 2,115
Репутация: 3248
По умолчанию Re: Виснет форма при работе с большим файлом

А если стандартный прогресс использовать? Или по условиям только графика?
__________________
У победы много отцов, поражение всегда сирота.
hack вне форума
 
Ответить с цитированием Вверх
Старый 16.05.2009, 22:20   #9
PLEXus
Новичок
 
Пол:Мужской
Регистрация: 05.04.2008
Сообщений: 14
Репутация: 0
По умолчанию Re: Виснет форма при работе с большим файлом

Стандартный прогресс так же не работает
так как во время действия виснет вся форма и ни один компонент не реагирует
по началу даже скрытые лйблы не становились видимыми(с ними проблема решилась при помощи твоей строки)

Добавлено через 13 минут
Со стандртный прогресс баром начинается шифрование и никаких движений только когда отвиснет соответственно он уже на 100%
Анимация не идет

Последний раз редактировалось PLEXus; 16.05.2009 в 22:33.. Причина: Добавлено сообщение
PLEXus вне форума
 
Ответить с цитированием Вверх
Старый 17.05.2009, 09:56   #10
PLEXus
Новичок
 
Пол:Мужской
Регистрация: 05.04.2008
Сообщений: 14
Репутация: 0
По умолчанию Re: Виснет форма при работе с большим файлом

Воткнул другой алгоритм шифрования (не Ассемблер)
прогресс бар работает но шифрование длится раз в 20 дольше
это ужас
что же выбрать ?
файл 1 ГБ шифровал первым алгоритмом 1.5 минуты а вторым алгоритмом 34 минуты


хотелось бы оптимизировать как то код на Ассемблере чтобы форма не висела помогите
PLEXus вне форума
 
Ответить с цитированием Вверх
Старый 18.05.2009, 18:19   #11
Vasuha
Постоялец
 
Пол:Мужской
Регистрация: 13.03.2008
Адрес: Минск
Сообщений: 298
Репутация: 231
По умолчанию Re: Виснет форма при работе с большим файлом

А если разделить на потоки?
__________________
Vasuha вне форума
 
Ответить с цитированием Вверх
Старый 19.05.2009, 16:08   #12
PLEXus
Новичок
 
Пол:Мужской
Регистрация: 05.04.2008
Сообщений: 14
Репутация: 0
По умолчанию Re: Виснет форма при работе с большим файлом

Для меня это немного тяжко
так как Ассемблер я толком и не знаю
только мелочи
на АСМе код не мной писан ((
PLEXus вне форума
 
Ответить с цитированием Вверх
Старый 19.05.2009, 16:56   #13
Vasuha
Постоялец
 
Пол:Мужской
Регистрация: 13.03.2008
Адрес: Минск
Сообщений: 298
Репутация: 231
По умолчанию Re: Виснет форма при работе с большим файлом

А вот еще мысль пришла. Перед началом шифрования показать формочку с "прогрессом" - но сделать ее не МОДАЛЬНОЙ а просто поверх: FormStyle :=fsStayOnTop, должна позаботиться о перерисовке).
__________________
Vasuha вне форума
 
Ответить с цитированием Вверх
Старый 19.05.2009, 20:04   #14
PLEXus
Новичок
 
Пол:Мужской
Регистрация: 05.04.2008
Сообщений: 14
Репутация: 0
По умолчанию Re: Виснет форма при работе с большим файлом

Хммм
тоже идея завтра опробую пасиб за совет
завтра напишу результат
PLEXus вне форума
 
Ответить с цитированием Вверх
Старый 26.05.2009, 11:14   #15
tomor
Постоялец
 
Аватар для tomor
 
Пол:Мужской
Регистрация: 05.02.2007
Адрес: Иваново
Сообщений: 290
Репутация: 646
По умолчанию Re: Виснет форма при работе с большим файлом

TThread юзай
tomor вне форума
 
Ответить с цитированием Вверх
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 07:17. Часовой пояс GMT +3.


Copyright ©2004 - 2022 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2022, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.22196 секунды с 13 запросами