Не обязательно использовать этот цикл В обработчике события класса потока OnTerminate можно просто проверять количество потоков и если оно равно нулю то включать кнопку Но обязательно надо сначала уменьшать счетчик. Например: Dec(count_threads_on); if count_threads_on = 0 then ... А с таймером - тоже далеко не элегантное решение.
Ммм... Вроде понял. Ну а вообще, это же не критично, что используется свободная часть процессора, так как потоки у меня все равно низкого приоритета..., а хотя если программа должна быть основной, например какие-нибудь драйвера, то это неприемлимо? Все супер работает как часы.
Какая разница какого приоритета потоки? Код потока от этого работать быстрее не будет. Я везде стараюсь сократить расходы ресурсов. Вот представь: этот цикл у тебя крутится, потоки медленно уничтожаются, а пользователь тем временем запустил еще один ресурсоемкий процесс. Это приведет к зависанию, и как следствие к плохому мнению о тебе как разработчике. UPD: И все же я считаю использовать такой цикл неверно. Главный поток приложения имеет средний приоритет. Ты запускаешь в этом потоке цикл, в то время как у тебя есть потоки с низким приоритетам которым нужно коректно завершиться. Но процессорного времени им на это не хватает ибо много отъедает цикл в главном потоке. В итоге имеем к нагрузке процессора еще и медленное завершение потоков.
Скажите в какую сторону рыть? Нужно перехватывать пароли и логины в браузерах. Возможно перехватить POST запрос в котором идут логин и пароль? Как это на Delphi делается?
Мне нужен код на Delphi. или любая инфа о том как можно написать. Суть программы: Человек заполняет форму допустим на mail.ru вводит Логин и пароль. Нажимает на батон. Пошел HTTP POST запрос... Так вот надо из этого запроса выдрать логин и пароль, т.е. его надо перехватить. Нагуглил вот Реализовать че то не могу ((
вот пример сниффера который перехватывает заголовки, только впиши свой ip через который ты в инете сидишь. Вот из него можешь сделать то что тебе нужно клац лично проверил сейчас - работает отлично!
пишу программу на дельфине.. (работаю с компонентом веббраузер) в процессе работы программы появляется ошибка.. ("Ошибка сценария.. продолжить выполнение сценариев на этой страницы ? да или нет варианты ответов..") как от неё избавиться или как её скрыть ? нельзя чтоб она появлялась !
Пытаюсь загрузить на фтп файл. пользуюсь indy ftp вот код: PHP: procedure TForm2.Button1Click(Sender: TObject); begin idFTP1.Host:=ftphost.Text; //FTP-сервер idFTP1.Port:=21; //порт ФТП сервера idFTP1.Username:=ftplogin.Text; idFTP1.Password:=ftppass.Text; idFTP1.Connect; idFTP1.Put(edit1.Text); idFTP1.Disconnect; end; выдаёт ошибку что делать?)
компонент Indy IdFTP В разделе Var: PHP: IdFTP1 : TIdFTP; При ФормОнЛоад: PHP: IdFTP1 := TIdFTP.Create(IdFTP1); Конект: PHP: IdFTP1.Host := ftphost.Text; IdFTP1.Username := ftplogin.Text; IdFTP1.Password := ftppass.Text; IdFTP1.Port := 21; IdFTP1.Connect(True, 10000); idFTP1.Put(edit1.Text); idFTP1.Disconnect;
PHP: IdFTP.Connect(True, 10000); - вот на эту строку ругается: PHP: [DCC Error] Unit2.pas(44): E2250 There is no overloaded version of 'Connect' that can be called with these arguments а если её убрать то опять эта же ошибка.
тогда давай так: какая версия Indy у тебя??? вот этот код нормально работает! PHP: procedure TForm1.PutClick(Sender: TObject); var ftp: TIdFTP; ms: TMemoryStream; begin ftp:=TIdFTP.Create(Application); ms:=TMemoryStream.Create; try try ftp.Host:=ftphost.Text; ftp.Port:=21; ftp.Username:=ftplogin.Text; ftp.Password:=ftppass.Text; ftp.Connect(true, 2000); AssErt(ftp.Connected); ftp.ChangeDir(' '); ftp.Put(edit1.Text); ShowMessage('Отправлено'); finally ms.Free; ftp.Free; end; except ShowMessage('Хрен! :('); end; end; end. Indy обнови кароче
пишу программу на дельфине.. (работаю с компонентом веббраузер) в процессе работы программы появляется ошибка.. ("Ошибка сценария.. продолжить выполнение сценариев на этой страницы ? да или нет варианты ответов..") как от неё избавиться или как её скрыть ? нельзя чтоб она появлялась !
Code: procedure hintwnd(); var H:HWND; Rec:TRect; HintForm:TForm; HintLabel:TLabel; begin H := FindWindow('Shell_TrayWnd', nil); if h=0 then exit; GetWindowRect(h, Rec); HintForm:= TForm.Create(nil); HintForm.Width:=225; HintForm.Height:=75; HintForm.Color:=clSkyBlue; HintForm.BorderStyle:=bsNone; HintForm.FormStyle := fsStayOnTop; HintLabel:=TLabel.Create(nil); with HintLabel do begin Parent:=HintForm; WordWrap:=true; Caption:=msg; Align:=alClient; Layout:=tlCenter; Alignment:=taCenter; end; HintForm.AlphaBlend:=true; HintForm.AlphaBlendValue:=0; HintForm.Left:=Screen.Width-HintForm.Width; HintForm.Top:=Rec.Top-HintForm.Height; ShowWindow(HintForm.handle,SW_SHOWNOACTIVATE); while HintForm.AlphaBlendValue < 255 do begin HintForm.AlphaBlendValue := HintForm.AlphaBlendValue + 3; sleep(7); HintForm.repaint; end; Sleep(5000); while HintForm.AlphaBlendValue > 0 do begin HintForm.AlphaBlendValue := HintForm.AlphaBlendValue - 3; sleep(10); end; HintLabel.Free; HintForm.Free; end; при выполнении кода основная форма не перемещается и плохо реагирует на действия пользователя.. где грабли?
ну не перемещается она у тебя из за этого кода: HintForm.FormStyle := fsStayOnTop; очевидно что она находится сверху. а плохо реагирует это из за множества Sleep() скорее всего...
плохо работает не созданная форма, а основная.. и слипы не должны играть никакой роли по идее, код выполняется в отдельном потоке!
Советую начинать читать книги для новичков. Можешь найти в Google по запросу "Delphi для начинающих". Также посмотри здесь: