Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 1086
от 08.03.2008, 17:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 443, Экспертов: 65
В номере:Вопросов: 4, Ответов: 7

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 125692: В рамках обучания необходимо было написать программу длярасчета условной энтропии, тоесть вероятность вхождения одного слова после другого. Программу я написал работает нормально но есть два но, вот по ним собственно и вопрос. Первое замечание после ...
Вопрос № 125701: Здравствуйте всеми уважаемые эксперты. Прошу помочь в написании SMTP Server, Как можно отправлять с него сообшения. Спасибо....
Вопрос № 125703: Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, следующее: 1) Как программно добавить приложение в автозагрузку, при этом именно в MsConfig, т. е. само запущенное в данный момент приложение добавить (желательно, чтобы не требовалось под...
Вопрос № 125704: Здравствуйте! Скажите пожалуйста: 1) Как можно прикомпилировать небольшой mp3 файл к приложению и после его использовать? 2) Как сделать на момент воспроизведения трека звук максимальным (программно)? Заранее благодарен...

Вопрос № 125.692
В рамках обучания необходимо было написать программу длярасчета условной энтропии, тоесть вероятность вхождения одного слова после другого. Программу я написал работает нормально но есть два но, вот по ним собственно и вопрос. Первое замечание после нажатия на кнопку расчет происходит именно сам расчет, он соответствует функци в коде Button2Click, после того как выдается результат расчет появляется ошибка со следующим текстом "Invalid pointer operation", все последующие расчеты происходят нормально пробовал пошагово проверят ошибка возникает там где написано в коментариях. После закрытия программы возникает ошибка с текстом "Runtime error 217 at 00402734" код всего юнита находится в приложении

Приложение:

Отправлен: 02.03.2008, 18:53
Вопрос задал: Митрошин Андрей (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Drbear
Здравствуйте, Митрошин Андрей!

В приложении код, работающий без описанных Вами ошибок.

Приложение:

Ответ отправил: Drbear (статус: 8-ой класс)
Ответ отправлен: 02.03.2008, 20:02
Оценка за ответ: 4
Комментарий оценки:
Drbear я пробовал на трех компиляяторах Borland Delphi 7, Сode Gear 2007 и BDS2006 на всех трех выдает одну и ту же ошибку. Я создавал приложение не под платформу .net. В каком компиляторе и под какую платформу вы пробовали?


Вопрос № 125.701
Здравствуйте всеми уважаемые эксперты. Прошу помочь в написании SMTP Server, Как можно отправлять с него сообшения. Спасибо.
Отправлен: 02.03.2008, 20:16
Вопрос задал: Мокроусов Алексей Сергеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 9)

Отвечает: Лысенков Антон Анатольевич
Здравствуйте, Мокроусов Алексей Сергеевич!

Пример использования Tidsmtpserver здесь

По моему тут понятней некуда. Дополнительные вопросы?

Оформлена ссылка.
-----
∙ Отредактировал: Николай Владимирович / Н.В. (Профессионал)
∙ Дата редактирования: 02.03.2008, 21:00
Ответ отправил: Лысенков Антон Анатольевич (статус: 7-ой класс)
Ответ отправлен: 02.03.2008, 20:37

Отвечает: Genia007
Здравствуйте, Мокроусов Алексей Сергеевич!
Посмотрите статью Использование SMTP Relay Server на сайте Delphi World, пример для Delphi 7 сам не пробовал запускать.
Ответ отправил: Genia007 (статус: 7-ой класс)
Ответ отправлен: 03.03.2008, 13:21
Оценка за ответ: 3
Комментарий оценки:


Вопрос № 125.703
Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, следующее:
1) Как программно добавить приложение в автозагрузку, при этом именно в MsConfig, т. е. само запущенное в данный момент приложение добавить (желательно, чтобы не требовалось подтверждений со стороны пользователя);
2) Как сделать перезапуск компьютера, типа Halt'а, т. е. чтобы не было вариантов остановки?;
3) Будет ли такое приложение запускаться в безопасном режиме? Если да - то как это исправить?
Спасибо
Отправлен: 02.03.2008, 20:25
Вопрос задал: Silent_Control (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Silent_Control!
По первому вопросу. msconfig из разных мест берет программы. В том числе из ветки реестра HKCU\ Software\ Microsoft\ Windows\ CurrentVersion\ Run. Можно добавить приложение туда.
Ниже пример добавления


Автозагрузка в Delphi (исходники)

Очень часто программы прописывают себя в автозагрузку. Зачем это нужно? Да, в общем-то, цели разные. Иногда бывает нужно, чтобы программа грузилась вместе с операционной системой, например, как электронный органайзер. Или если вы пишите троян или вирус - это тоже может пригодиться. Цели разные и способы тоже. Мы рассмотрим самые популярные способы. В принципе стандартным способом автозагрузки в Windows XP является реестр. Если говорить по конкретней, то ключ HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run. Именно сюда прописывается большинство программ. Прописать сюда свою программу очень просто, делается это так:

var Reg:TRegistry;
begin
Reg:=TRegIniFile.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software',true);
Reg.OpenKey('Microsoft',true);
Reg.OpenKey('Windows',true);
Reg.OpenKey('CurrentVersion',true);
Reg.OpenKey('Run',true);
Reg.WriteString('Здесь пишем что угодно, как правило имя проги',Application.ExeName);
Reg.CloseKey;
Reg.Free;

Код очень простой и не должен вызвать каких-либо трудностей, если вы работали с реестром. Кстати, не забудьте добавить в раздел uses модуль Registry для работы с реестром. Между прочим, необязательно добавлять программу именно в Run, ведь еще есть RunOnce и RunOnceEx . Еще пункт Run присутствует в ключе HKEY_CURRENT_USER . Ну, думаю с реестром все понятно, давайте рассмотрим следующий вариант. Это win.in . Чем он хорош, да тем, что о нем не каждый юзер знает, или знает, но все же не смотрит, а значит туда можно вбивать свои пакостные программы. Еще одним плюсом win.in является полная совместимость с Windows 9х. А это дополнительное преимущество. Для начала добавьте в uses модуль inifiles, а не то проект просто не откомпилируется. Ну и запишем следующий код:

var Win:TIniFile;
warn:string;
begin
Win:=TIniFile.Create('Win.ini');
Win.ReadString('windows','run',warn);
if warn<>Application.ExeName then
Win.WriteString('windows', 'run',Application.ExeName);
Win.Free;

Теперь я объясню, что здесь происходит. В разделе var мы объявили две переменных Win типа TIniFile и warn типа строка. В первой строке кода (после ключевого слова begin) мы открываем файл. Далее читаем его параметр run. Если наша объявленная строка неравна приложению, то записываем вместо этой строки наше приложение. Освобождаем память. Как видите все очень просто. В принципе, все это, конечно, хорошо. Но как удалить программу из автозагрузки. Здесь просто нужно вместо строки Win.WriteString('windows', 'run',Application.ExeName); вставить строку удаления автозапуска Win.Delete('windows', 'run',Application.ExeName); Вот исходник удаления из автозапуска:

var Win:TIniFile;
warn:string;
begin Win:=TIniFile.Create('Win.ini');
Win.ReadString('windows','run',warn);
if warn=Application.ExeName then Win.Delete('windows', 'run',Application.ExeName);
Win.Free;

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

источник

Удачи!
Ответ отправил: Николай Владимирович / Н.В. (статус: Профессионал)
Россия, Москва
WWW: nvsoft.org
ICQ: 420720
----
Ответ отправлен: 02.03.2008, 21:00
Оценка за ответ: 5
Комментарий оценки:
Действительно, мне этого вполне хватит! Опять-таки, с работой ini-файлов я знаком))), просто меня интересовал реестр. Все понятно. Большое спасибо!
Удачи в постановке новых рекордов портала!

Отвечает: Genia007
Здравствуйте, Silent_Control!
1). Это можно сделать несколькими способами, но наиболее оптимальный - занесение файла в автозапуск реестра, который находится по следующему адресу: HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun

uses Registry;

procedure TForm1.FormCreate(Sender: TObject);
var
h: TRegistry;{Переменная реестра}
begin
h := TRegistry.Create;
with h do
begin
RootKey := HKEY_LOCAL_MACHINE; {Перейти на ветку реестра}
OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun', true); {Открыть ключ}
WriteString('название программы', 'путь программы'); {Записать значение ключа}
CloseKey;{Закрыть ключ}
Free;
end;
end;

2). Из под винды 98 так: ExitWindowsEx(EWX_REBOOT,1),
а под WIN NT есть два способа - корректно и некорректно(убивает процессы),
предлагаю корректную перезагрузку:

procedure reboot;
var
hToken: THandle;
tkp: _TOKEN_PRIVILEGES;
DU MMY: PTokenPrivileges;
DummyRL: Cardinal;
begin
DUMMY := nil;
if not OpenProcessToken(
GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
hToken
) then
raise TShutdownEx.Create('OpenProcessToken failed');

if (not LookupPrivilegeValue(nil, 'SeShutdownPrivilege',
tkp.Privileges[0].Luid)) then
raise TShutdownEx.Create('LookupPrivilegeValue failed');

tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := $0002; //SE_PRIVILEGE_ENABLED = $00002

AdjustTokenPrivileges(hToken, FALSE, tkp, 0, Dummy, DummyRL);

if (GetLastError() <> ERROR_SUCCESS) then
raise TShutdownEx.Create('AdjustTokenPrivileges failed');

if (not ExitWindowsEx(EWX_REBOOT, 0)) then
raise TShutdownEx.Create('ExitWindowsEx failed');
end;

Добавлена вторая часть ответа (из мини-форума).
-----
∙ Отредактировал: Николай Владимирович / Н.В. (Профессионал)
∙ Дата редактирования: 05.03.2008, 18:28
Ответ отправил: Genia007 (статус: 7-ой класс)
Ответ отправлен: 03.03.2008, 13:22
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо! Все получилось!


Вопрос № 125.704
Здравствуйте! Скажите пожалуйста:
1) Как можно прикомпилировать небольшой mp3 файл к приложению и после его использовать?
2) Как сделать на момент воспроизведения трека звук максимальным (программно)?
Заранее благодарен
Отправлен: 02.03.2008, 20:28
Вопрос задал: Silent_Control (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Silent_Control!
По первому вопросу.


Как добавить в свою программу звук? Но не просто добавить, а сделать так, чтобы он играл не из какого-то файла, а был вшит в exe! И не просто звук, а чтобы это ещё и не сильно увеличивало размер программы!

Вопросы трекерной музыки отложим на потом. Сейчас поговорим об mp3.


Итак, наша задача засунуть mp3 в нашу программу и заставить его воспроизводиться по комманде.
Для этого нам, разумеется, понадобится сам файл.

Для тех кто не знает, как добавить его в ресурсы своей программы:

  • Создаем текстовый файл с именем sounds.rc

  • Прописываем в него наши файлы. Каждый файл в ресурсах = 1 строке. Пример содержимого файла:
     

    SND1 WAVE 1.wav
    SND2 WAVE Bum.wav
    SND3 WAVE Crazy.wav

    Первое слово - имя, которое мы будем указывать в программе.

    Второе - тип ресурса = wav файл

    Третье - имя файла


  • сохраняем файл.

  • Компилим его из коммандной строки: brcc32 sounds.rc

  • В результате получаем откомпиленный файл - sounds.res.

Второй этап:

В программе подключаем этот файл:
{$R sounds.res}

Теперь для воспроизведения звука нужно дать комманду:
PlaySound('SND1', 0, SND_RESOURCE or SND_ASYNC);
, где первым параметром - имя, назначенное нами файлу в файле ресурсов

Предчувствую Ваше справедливое возмущение: "Как же так? Нам обещали mp3!"

Третий этап:

Открываем меню Пуск -> Программы -> стандартные -> Развлечения

Запускаем "Звукозапись". У кого нет, можно доустановить через установку/удаление программ или воспользоваться другой программой подобного рода.

Открываем наш wav файл: Меню -> Файл -> открыть.


Теперь превратим его в mp3: Меню -> Файл -> Свойства
Нажимаем кнопку "Конвертировать".

Выбираем формат MP3 и нужное нам качество воспроизведения.

Сохраняем: Меню -> Файл -> Сохранить.

Все. Теперь внутри нашего wav файлика реально сидит MP3, который без проблем воспроизводится через PlaySound при наличии в системе установленного MP3 кодека. А данный кодек установлен во всех Windows >= 2000 по умолчанию. В более ранние как правило попадает вместе с другими программами или наборами кодеков.



Готовый пример проекта можете взять тут (69кб)

источник

Удачи!
Ответ отправил: Николай Владимирович / Н.В. (статус: Профессионал)
Россия, Москва
WWW: nvsoft.org
ICQ: 420720
----
Ответ отправлен: 02.03.2008, 20:44
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Кстати, про прикомпилирование к *.res файлу алгоритм мне известен, но я не думал, что после указания его в программе и компилирования самого exeшника, больше держать в папке его не надо!
Большое спасибо!

Отвечает: Genia007
Здравствуйте, Silent_Control!
1). Если mp3 файл небольшой его лучше переконвертировать в wav файл скомпилировать компилятором дэлфи в необходимый
ресурс и прогиграть его когда надо функцией PlaySound('название ресурса', HInstance, SND_RESOURCE or SND_ASYNC);
uses mmsystem;
Для построения проекта вам понадобиться:
Создайте звуковой файл с именем 'hello.wav' в каталоге проекта.
Создайте текстовый файл с именем 'snddata.rc' в каталоге проекта.
Добавьте следующую строку к файлу 'snddata.rc': HELLO WAVE hello.wav
В dos-сессии перейдите в ваш каталог приложения и скомпилируйте .rc-файл, используя компилятор ресурсов Borland (brcc32.exe): введите путь к brcc32.exe и передайте 'snddata.rc' в качестве параметра.
Пример:
binrcc32 snddata.rc
Это создаст файл 'snddata.res', который Delphi слинкует с EXE-файлом вашего приложения.

implementation

{$R snddata.res}
Ответ отправил: Genia007 (статус: 7-ой класс)
Ответ отправлен: 03.03.2008, 13:23
Оценка за ответ: 4
Комментарий оценки:
Мне кажется, что этот ответ я уже получал)))


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.72.2 от 06.03.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное