Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению ) Reply to this topicStart new topicStart Poll

Домашняя кухня: SMS

, Домашняя кухня: SMS
Домофонщик
Отправлено: Mar 17 2008, 12:40 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 244
Пользователь №: 1099
Регистрация:
22-August 07



Каждый хоть однажды да пользовался мобильным телефоном. А уж про «Сервис Коротких Сообщений» (или даже «Коротких Сообщений Сервис» — Short Message Service) и говорить не стоит. Попробуем средствами Delphi создать приложение для отправки этих самых SMS на терминал пользователя через Интернет.

Для начала потребуется написать программу отправки электронных писем с компьютера. Можно, конечно, воспользоваться почтовыми программами типа Outlook или The Bat!, но всегда ведь интереснее сделать что-то самому. Операторы сотовой связи предоставляют функцию с красноречивым названием email2sms, т.е. отправленное на определенный адрес электронное письмо доставляется на номер абонента в виде SMS. Осуществлять все будем посредством встроенных в среду Delphi 7 компонентов Indy (обладатели более ранних версий Delphi могут найти их в Интернете).

Запускаем Delphi, создаем новый проект, бросаем на форму компоненты idSMTP (вкладка Indy Clients), idAntiFreeze, id Message ( Indy Misc). Теперь о каждом из них поподробнее.


• idSMTP — для работы с сетью по протоколу SMTP;

• idAntiFreeze не даст зависнуть приложению во время работы с сетью;

• id Message хранит списки адресатов, отправителей, заголовки, прикрепленные файлы, тело сообщения.

Еще понадобится один компонент типа TMemo (вкладка Standard), кнопка TSpeedButton (вкладка Additional), 6 полей для ввода типа TLabeledEdit (вкладка Additional) и по одному Checkbox`у и Combobox`у (вкладка Standard). Названия компонент в таблице 1, на рис. 1 показано диалоговое окно, которое должно получиться в результате.


user posted image

Приступим к процедуре отправки сообщения:
QUOTE
procedure TForm1.sendClick(Sender: TObject);
begin
//Настраиваем работу idSMTP
//Заполняем соответствующие свойства компонента введенными данными
  idSMTP1.host:=host.Text;
  idSMTP1.Port:=strtoint(port.Text);
  idSMTP1.Username:=login.Text;
  idSMTP1.Password:=pass.Text;
//Проверяем, нужна ли аутентификация
    if auth.Checked then
  idSMTP1.AuthenticationType:=atLogin else
  idSMTP1.AuthenticationType:=atNone;
//Заполняем сообщение
  idMessage1.Body:=msgText.Lines;
  idMessage1.Sender.Address:=email.Text;
  idMessage1.Recipients.EMailAddresses:=CompileAddress;
//Обратите внимание на функцию CompileAddress, ее мы напишем сами!
//Теперь отправляем
try
  idSMTP1.Connect();
  if idSMTP1.Connected then
begin
  idSMTP1.Send(idMessage1);
  idSMTP1.Disconnect;
end;
except
end;
end;



Ну а теперь напишем функцию компиляции адреса.
user posted image

Сначала объявите эту функцию в разделе private declarations:
QUOTE
  private
  { Private declarations }
  function CompileAddress():string;
public
  { Public declarations }
end;


Теперь одновременно зажмите клавиши Ctrl+Shift+C, и компилятор создаст объявленную функцию (вернее, шаблон для нее, а код допишем мы)…

Для пользования программой нам нужно будет хранить данные об операторах и настройки. Для этого нам понадобится список операторов — они прописаны через запятую в файле (prov.ini), например вот так:

QUOTE
[main]
provider_list = some_operator,some_operator_2
//Этот текст будет потом загружен в выпадающий список операторов в нашей программе


— и настройки в том же файле (prov.ini). Список операторов будет загружаться в наш Combobox, а настройки, как вы понимаете, — в поля настройки программы. Делфи хорошо умеет работать с .ini-файлами. Для этого укажем в разделе Uses модуль inifiles. В файле (prov.ini) мы также будем хранить почтовые настройки и список операторов с доменами (то, что пишется после @) и префиксами номеров (например 38045). Выглядеть это должно примерно так:

QUOTE

[some_operator]
domain=2sms.some_operator.net
prefix=38045


Получать эти данные мы будем с помощью встроенной функции Делфи — readString(section, ident, default), где первый параметр — это название раздела (у нас some_operator), второй — название переменной (domain или prefix в нашем случае), а третий — строка, которую вы получите, если не удастся найти подходящий раздел или переменную.

Ну а теперь функция компиляции адреса:
QUOTE
function TForm1.CompileAddress: string;
var
ini:Tinifile;
prefix, domain, number:string;
begin
//Открываем файл настроек
ini:=Tinifile.Create(ExtractFilePath(Application.ExeName)+'prov.ini');
//загружаем данные из файла в переменные
prefix:=ini.readString(provider.Text,'prefix','nothing');
domain:=ini.readString(provider.Text,'domain','nothing');
//Выгружаем файл настроек
ini.free;
//проверяем корректность данных в переменных
if not (domain=emptystr) and not (domain='nothing') and not (prefix=emptystr) and not (prefix='nothing') then
begin
//Если данные подходят, производим компиляцию
number:=prefix+Recipient.text+'@'+domain;
result:=number;
end else
begin
//Если данные не подходят, сообщаем об этом пользователю
//Здесь можно указать экстренный адрес отправки сообщения, вроде службы поддержки
//Это должно выглядеть примерно так: result:='vasiliy_pupkin@mail.ua';
  MessageDlg('Вы выбрали ненастроенного оператора! Настройте его или выберите другого.',mtError,[mbOk],0);
exit;
end;
end;


Эту функцию мы закончили, а теперь приступим к загрузке и сохранению настроек программы. Для этого мы будем использовать обработчики событий OnCreate и OnClose главной формы (в инспекторе объектов на вкладке Events). Вот так это выглядит у меня:
QUOTE
procedure TForm1.FormCreate(Sender: TObject);
var
ini:TiniFile;
begin
//Начинаем загрузку почтовых настроек
//Если данная настройка не найдена, в соответствующее поле будет внесено слово default, можно написать какие-нибудь значения по умолчанию
ini:=TiniFile.Create(ExtractFilePath(Application.ExeName)+'prov.ini');
//Загружаем настройки в программу
auth.Checked:=ini.ReadBool('mail','auth',true);
email.Text:=ini.ReadString('mail','email','default');
host.Text:=ini.ReadString('mail','host','default');
port.Text:=ini.ReadString('mail','port','default');
login.Text:=ini.ReadString('mail','login','default');
pass.Text:=ini.ReadString('mail','pass','default');
//Загружаем список операторов через запятую
provider.Items.CommaText:=ini.ReadString('main','provider_list','');
//Выгружаем файл настроек
ini.Free;
end;


Здесь мы загружаем почтовые настройки из все того же файла (prov.ini). При первой загрузке программы получите диалоговое окно, представленное на рис. 2. Как видите, во всех полях отображается слово default; вы можете вместо него написать что-то другое, или для каждой отдельной настройки указать свое значение по умолчанию. На этом этапе, если вы исправите настройки, они не сохранятся, поэтому пишем вот что:
QUOTE
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
ini:TiniFile;
begin
//Начинаем процедуру сохранения настроек при выходе
ini:=TiniFile.Create(ExtractFilePath(Application.ExeName)+'prov.ini');
//Записываем данные настроек
ini.writeBool('mail','auth',auth.Checked);
ini.writeString('mail','email',email.Text);
ini.writeString('mail','host',host.Text);
ini.writeString('mail','port',port.Text);
ini.writeString('mail','login',login.Text);
ini.writeString('mail','pass',pass.Text);
//Выгружаем файл настроек
ini.Free;
end;


Теперь программа будет сохранять свои почтовые настройки.
user posted image

Не будем забывать и о том, что размер SMS не должен превышать 160 символов. Для этого нужно написать предупреждение. То есть пользователь сможет оценить количество набранных символов и в крайнем случае перефразирует сообщение. Для этого бросаем на форму еще один компонент — TStatusBar (вкладка Win32). Можно оставить его внизу формы (по умолчанию), а можно сделать так, как у меня (под msgText) — для этого нужно переключить его свойство Align с Bottom на None. После чего создаем обработчик события OnChange для нашего msgText (кликните на компоненте — в инспекторе свойств во вкладке Events вы увидите этот обработчик) и в нем пишем:

QUOTE
procedure TForm1.msgTextChange(Sender: TObject);
begin
//Максимальное количество символов в SMS в латинице — 160 символов
//Поэтому проверяем
if length(msgText.Text) < 160 then
begin
//Если длина текста меньше 160 — все нормально
statusBar1.SimpleText:='Символ '+IntToStr(length(msgText.Text))+' из 160';
end else
begin
//Если длина текста больше 160 — говорим пользователю об ошибке
statusBar1.SimpleText:='Слишком много символов! Символ '+IntToStr(length(msgText.Text))+' из 160';
end;
end;


Окно рабочей программы на рис. 3. Остается занести данные об операторах сотовой связи. Открываем в Блокноте файл prov.ini и заполняем его таким образом:
QUOTE
[main]
provider_list=SMSka,TelefonKa,some_operator
//Пишите список операторов через запятую и без пробелов
//Все операторы вымышлены. Пишите настоящих операторов

[SMSka]
prefix=38012
domain=2sms.smska.net

[TelefonKa]
prefix=38013
domain=2sms.TelefonKa.net

[some_operator]
prefix=38014
domain=2sms.some_operator.net
//Эти настройки также вымышлены

user posted image

В конце концов этот файл должен иметь примерно такое содержание:
QUOTE
[main]
provider_list=SMSka,TelefonKa,some_operator

[mail]
auth=1
email=vasiliy_pupkin@mail.ua
host=smtp.mail.ua
port=25
login=vasiliy_pupkin
pass=menya_zovut_vasya

[SMSka]
prefix=38012
domain=2sms.smska.net

[TelefonKa]
prefix=38013
domain=2sms.TelefonKa.net

[some_operator]
prefix=38014
domain=2sms.some_operator.net

Приведены вымышленные почтовые настройки и несуществующие операторы. Почтовые настройки узнавайте у вашего почтового провайдера (для исходящей почты), а настройки некоторых национальных операторов смотрите в таблице 2. При желании программу можно дооснастить адресной книгой, списком шаблонов, возможностью переключения раскладки клавиатуры, поддержкой транслитерации и т.д.
user posted image
PMEmail Poster
Top
DelphiST
Отправлено: Mar 17 2008, 12:49 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1093
Пользователь №: 796
Регистрация:
23-May 07



Слизано с http://articles.org.ru/cn/showdetail.php?cid=2971
Уважай авторские права, ты же Человек!


--------------------
user posted image
PMEmail PosterICQ
Top
Домофонщик
  Отправлено: Mar 17 2008, 02:01 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 244
Пользователь №: 1099
Регистрация:
22-August 07



А что я???
Чуть что сразу я!!!
Я вобще эту статью из журнала взял!!!!!
И я не писал, что это моя статья unsure.gif
PMEmail Poster
Top
DelphiST
Отправлено: Mar 17 2008, 02:17 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1093
Пользователь №: 796
Регистрация:
23-May 07



А Домофонщик тут не причём!
А что, журнал это не источник?


--------------------
user posted image
PMEmail PosterICQ
Top
rds
Отправлено: Mar 17 2008, 09:32 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 764
Пользователь №: 102
Регистрация:
19-November 06



Домофонщик на будущие, всегда указывай ссылку на источник.. уважай людей..


--------------------
PM
Top
Домофонщик
  Отправлено: Mar 18 2008, 11:34 AM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 244
Пользователь №: 1099
Регистрация:
22-August 07



Договорились biggrin.gif
PMEmail Poster
Top
Кок
Отправлено: Mar 14 2014, 05:18 PM
Quote Post


  Сержант
*

Группа: Members
Сообщений: 10
Пользователь №: 4957
Регистрация:
10-December 13



Моя любимая домашняя кухня.
user posted image

Картофель «Дофин»

Самый простой рецепт приготовления известного блюда «Дофин» — картофель запекается в сливках. Следуя классике рецепта «Дофин», при желании можно добавить мускатный орех и посыпать картошку тертым сыром.

Продукты (на 6 порций)
Картофель — 800-900 г
Сливки нежирные (или жирное молоко) — около 2,5 стакана (600 г)
Соль - по вкусу
Перец - по вкусу
Чеснок — 2-3 средних зубчика


1. Разогрейте духовку до 190 градусов. Очистите и нарежьте картофель кружками толщиной примерно 0,5 см.

2. Сложите картошку в кастрюлю, залейте сливками, перемешайте. Посолите и поперчите.

3. Поставьте кастрюлю на средний огонь, доведите до кипения. Накройте крышкой, уменьшите огонь и варите 5-10 минут.

4. Переложите картошку в неглубокую посуду для запекания (объемом около 2,5 л). Посыпьте мелко нарезанным чесноком, добавьте соль и перец по вкусу.

5. Сливки, в которых варилась картошка, процедите и залейте сливками картофель с чесноком.

6. Накройте фольгой и готовьте картофель «Дофин» в духовке около 40 минут.

7. Снимите фольгу и запекайте «Дофин» еще примерно 15 минут до золотистого цвета.
PMEmail Poster
Top
Кок
Отправлено: Jan 9 2015, 09:59 AM
Quote Post


  Сержант
*

Группа: Members
Сообщений: 10
Пользователь №: 4957
Регистрация:
10-December 13



Вкусно сделать на обед минтай по домашнему.
Тефтели из минтая под маринадом

Рыбу разделать на филе без кожи и костей, нарезать мелкими кусками, соединить с замоченным в молоке хлебом, слегка спассерованным репчатым луком и дважды пропустить через мясорубку.
В фарш добавить соль, перец, оставшуюся от замачивания хлеба жидкость, хорошо перемешать и выбить.
Из полученной массы сформировать шарики (тефтели), обвалять их в муке, поджарить 5-7 минут на плите и довести до готовности в духовке. Готовые тефтели охладить.
При подаче на стол тефтели уложить в салатник и залить маринадом, приготовленным, как для скумбрии под маринадом. Готовое блюдо посыпать мелко шинкованным зеленым луком или зеленью петрушки, укропа.

Продукты
рыба (мелочь) 1 кг
молоко 300 мл
или вода 300 мл
или бульон 300 мл
хлеб пшеничный 250 г
луковицы 2 шт.
мука пшеничная 100 г
масло растительное 100 мл
масло сливочное 2 ст. ложки
или маргарин 2 ст. ложки
перец по вкусу
соль по вкусу
маринад овощной по вкусу
PMEmail Poster
Top
jgxtyr
Отправлено: Feb 5 2015, 12:21 PM
Quote Post


  Солдат
*

Группа: unior
Сообщений: 3
Пользователь №: 5494
Регистрация:
5-February 15



спасибо за рецепты,очень вкусно
PMEmail Poster
Top
Midory
Отправлено: Jul 29 2015, 12:11 PM
Quote Post


  Сержант
*

Группа: Members
Сообщений: 17
Пользователь №: 1509
Регистрация:
7-April 08



QUOTE (jgxtyr @ Feb 5 2015, 12:21 PM)
спасибо за рецепты,очень вкусно


На здоровьеsmile.gif

Оцените еще маринад для скумбрии.

Скумбрия под овощным маринадом

Скумбрию варят в воде с овощами — морковью, петрушкой, репчатым луком и специями. Для этого воду с овощами довести до кипения и прокипятить на слабом огне 7—10 минут, затем положить в нее рыбу брюшком вниз и после вторичного закипания варить при слабом нагреве 15—20 минут. За 10 минут до окончания варки положить соль.
Готовую рыбу вынуть из бульона, удалить головы, плавники, кости. Филе уложить в глубокую посуду, залить горячим маринадом и охладить.
Приготовление маринада: овощи нашинковать соломкой или натереть на терке, и пассеровать на растительном масле до полуготовности, затем добавить томат и продолжают пассерование еще 10—15 минут. Пассерованные с томатом овощи залить бульоном, добавить специи, довести до кипения и тушить 15— 20 минут под закрытой крышкой. За 5 минут до готовности маринад заправить солью, сахаром и уксусом.

Продукты
рыба (тушки) 1 кг
морковь 400 г
луковицы 4 шт.
бульон рыбный 250 мл
томат-паста 200 г
или томат-пюре 200 г
или кетчуп 200 г
уксус 3% 200 мл
масло растительное 75 мл
корень петрушки 50 г
сельдерей 25 г
сахар 25 г
перец душистый горошком 4-5 шт.
лавровый лист по вкусу
гвоздика по вкусу
соль по вкусу
PMEmail Poster
Top

Topic OptionsСтраницы: (2) [1] 2  Reply to this topicStart new topicStart Poll

 



[ Script Execution time: 0.0332 ]   [ 10 queries used ]   [ GZIP выключен ]