Здр-те эксперты. Не могу понять как юзать TThread. Мне всего - лишь надо запустить бесконеч. поток (ну иногда его терминатить). Вот добавляю в проект File\New\Other-->Thread Object, обзываю его нехорошими словами, появл. модуль этого потока, в кот. функция Execute. Так вот: подскажите плз как запустить его на выполнение и как убить его. Спасибо.
Приветствую Вас, Alexander! Ну вот, ты получил шаблон класса. Теперь тебе надо перегрузить его метод Execute - обязательно. Можно еще и Create, если ты хочешь его как-то инициализировать. В Execute ты делаешь цикл, который и будет выполняться. Как только Execute возвратится - поток прервется. Кстати, в цикле надо проверять свойство Terminated (кажется) и если оно True - выходить. Ответ отправлен: 10.07.2003, 17:01 Отправитель: baldr Отвечает valter
Добрый день, Alexander! Для создания потока следует наследовать класс от TThread: type TMyThread = class(TThread) protected procedure Execute; override; // здесь и будет выполняться цикл public constructor Create; reintroduce; destructor Destroy; override; end; В перекрытом методе Execute следует выполнять цикл: procedure TMyThread.Execute; begin while true do begin // ... тело цикла end; end; И объявить конструктор: constructor TMyThread.Create; begin inherited Create(false); FreeOnTerminate:=true; // это освободит поток при остановке // здесь поместить код инициализации end; и деструктор: destructor TMyThread.Destroy; begin // здесь поместить код финализации inherited Destroy; end; Теперь нужно объявить глобальную переменную: MyThread: TMyThread; Она нам нужна, если
мы принудительно захотим завершить поток. Для запуска потока достаточно выполнить: MyThread:=TMyThread.Create; Если наш поток нужно прервать и освободить, то достаточно выполнить: MyThread.Terminate; После этой команды наш поток сам освободится, то есть не нужно вызывать метод Free. В пакете Delphi (в том числе и в справке) есть хорошие примеры по использованию потоков. Ответ отправлен: 10.07.2003, 18:08 Отправитель: valter Отвечает Andy
Приветствую Вас, Alexander! Thread.Create(false); // Запустить Thread.Termitate; // Остановить А в Thread.Execute расположен код "нити"... А вообще смотри хелп ибо он рулез... Ответ отправлен: 11.07.2003, 08:46 Отправитель: Andy Отвечает ART_43
Ответ отправлен: 11.07.2003, 12:34 Отправитель: URiS Отвечает Bob Johnson
Здравствуйте, Сергей! Программно? Только самому, последовательным поиском и удалением. Не программно? В Windows XP можно так: rd /S /Q имя подкаталога.
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 10.07.2003, 23:11 Отправитель: Bob Johnson Отвечает Andy
Добрый день, Сергей! Например так: if NOT MyRemoveDir('C:TestDir') then ShowMessage('Не могу удалить эту директорию');
Приложение: Ответ отправлен: 11.07.2003, 09:18 Отправитель: Andy Отвечает ART_43
Приветствую Вас, Сергей! Пример взят с какого-то сайта, сейчас уже не помню с какого.
Приложение: Ответ отправлен: 11.07.2003, 09:47 Отправитель: ART_43
Вопрос № 775
Всем привет! Вот решил сделать оболочку типа NetCaptor'а для IExplorer'a на основе TWebBrowser или заполняльщик форм на основе тоже какихнибудь и-нет компонентов. Не знаю куда копать. Или исходники толковые нужны. Помогите кто чем может. {Delphi}
Ответ отправлен: 11.07.2003, 21:08 Отправитель: URiS
Вопрос № 776
хайте, эксперты! тема вируса;). Возможно ли в дельфи "приклеиться" к другому файлу, т.е. записаться в его начало, запускать себя, потом тот, который записан после него? Раньше у меня был компонент какой-то для этого, только я название забыл:(, всётаки, как приклииться?
Конечно, можно - за примерами далеко ходить не нужно - те же упаковщики и протекторы делают такое. Кроме того, можно модифицировать сам код, тем более, что в секции .text, как правило, места остаётся вагон - туда и можно вписаться, заменив точку входа (или, по крайней мере, перенести часть оригинального кода из точки входа). Ответ отправлен: 11.07.2003, 13:17 Отправитель: Артём Шегеда
Вопрос № 777
Здравствуйте, эксперты. 1) Тут такое дело: у пунктов меню есть свои картинки Bitmap и быстрый запуск ShortCut. Но если у какого-либо пункта меню картинка отсутствует, то запись, например, Ctrl+A у ShortCutа съезжает в сторону, что очень не красиво. Как можно это исправить ??? 2) А как можно файл JPG в BMP переделать ? Я нашел процедуру как преобразовать наоборот BMP в JPG, но подстроить ее так и не могу, постоянные ошибки. Всем заранее спасибо !!!
Доброе время суток, SATAN aka NAPALM! 1. Сделай пустую картинку и установи ее для всех остальных пунктов меню (но я как-то не замечал, чтобы что-то уезжало при отсутствии картинки). Еще можешь скачать коммпоненты TToolBar97 или TToolBar2000 и использовать их вместо меню. 2. В Delphi, начиная с 4-го (кажется) есть класс TJpegImage, который позволяет делать именно то, что тебе нужно. Вот пример его использования (для С++ билдера):
Ответ отправлен: 11.07.2003, 21:08 Отправитель: URiS
Вопрос № 778
Здравствуйте, эксперты. 1) Делаю процедуру запуска HTML-файла (содержимого Memo1), перед запуском содержимое сохраняется во временный файл c расширением .tmp, потом файл переменовывается и должен запускается, но этого не происходит. Почему ? procedure TfHTML.mnuFileDoHTMLClick(Sender: TObject); Var S: String; begin Memo1.Lines.SaveToFile('TmpHTML.tmp'); S:=ChangeFileExt('TmpHTML.tmp', '.htm'); ShellExecute(Handle, 'Open', pChar(S),'','',SW_SHOWNORMAL); end; 2) И как можно удалить установленные дополнительные библиотеки или компоненты (в частности RXLib и EhLIB) чтобы их компонентов не было видно на палитре, без перестановки Delphi ??? Всем заранее спасибо !!!
Доброе время суток, SATAN aka NAPALM! 1. А где RenameFile() ? ChangeFileExt() просто выдает имя файла с измененным расширением, а самого файла она не касается 2. Component->Install Packages... Ответ отправлен: 11.07.2003, 15:11 Отправитель: ART_43 Отвечает URiS
Добрый день, SATAN aka NAPALM! 1) Ну и намудрил ты! Функция ChangeFileExt переименовывает только строчку(S), а не файл! Вот как надо: Var S: String; begin s:='c:TmpHTML.htm'; Memo1.Lines.SaveToFile(s); ShellExecute(Handle, 'Open','explorer.exe',pchar(s),'c:',SW_SHOWNORMAL); end; 2) Через Панель управления. Если там нет, то отключаешь и удаляешь сам. Пожалуйста!
Ответ отправлен: 11.07.2003, 21:08 Отправитель: URiS Отвечает Bob Johnson
Доброе время суток, SATAN aka NAPALM! 1. Если у тебя нормально создается и переименовывается файл (кстати, а почему бы тебе не создавать его сразу с расширением html?), то попробуй запускать вот так: ShellExecute (Handle, 0, PChar (S), 0, 0, SW_SHOWDEFAULT); 2. Запускаешь delphi, меню "component", "install packages", выбираешь из списка тот (те), в котором содержится компонент для удаления и нажимаешь кнопку "remove". Все.
* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---
Ответ отправлен: 12.07.2003, 00:40 Отправитель: Bob Johnson
Вопрос № 779
Всем привет! Столкнулся с слегка непонятной для меня ситуацией: После того как создал и отослал письмо используя MApiSendMail(...) оно(письмо) появляется в "Microsoft Outlook" в папке "Исходящие" и там и висит не изьясняя никакого желания отправлятся, а вот через "Outlook Express" все чудненько бегает... Не подскажете в чем проблема?
Приветствую Вас, Savich! MApiSendMail использует почтовый клиент для отправки писем. Чтобы самому отсылать письма используй TnmSMTP во вкладке Internet.
Ответ отправлен: 12.07.2003, 17:32 Отправитель: URiS
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.