flint |
Отправлено: 26.07.2005, 12:23 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
Суть такова:
Программа должна принимать через модем данные и сохранять их на компьютере пользователя в виде файла *.txt
В файле находятся данные о рисунке (координаты точек)
затем необходимо по точкам, заданным в файле, нарисовать фигуру(плоскую)
КАК ЭТО ВСЁ СДЕЛАТЬ?
Поиогите чем можете!!!
ОЧЕНЬ популярные ответы будут очень кстати
Рад буду даже ссылке на статью:)
заранее огромное спасибо всем, кто откликнется на вопрос.
|
|
flint |
Отправлено: 26.07.2005, 12:27 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
И ещё. Картинка получится намного больше, чем размер области, в которой она рисуется.
Надо что-то придумывать, или хватит обычных ScrollBar'ов?
А если ScrollBar'ы не причем, то как это сделать?
еще раз senq |
|
Vlad |
Отправлено: 26.07.2005, 13:42 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Прием файла, я бы сделал через РОР3 (компоненты Indy). Во первых при работе с модемом, ты будешь точно уверен,что получил целый файл. Я такую байду года 2 назад делал, только том другие данные и файл ДБФ. Гляну, могу куски кода кинуть, со старой байды, если найду. |
|
flint |
Отправлено: 27.07.2005, 07:06 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
спасибо. рад буду, если отправишь. А то я повис тут, и почитать нечего.
Хоть пошарюсь разберусь. |
|
Vlad |
Отправлено: 27.07.2005, 10:03 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Вот что то нашел. Вообщем смысл в следующем:
Использовать обычный виндовый диалер для установки соединения. Пусть он сам набирает. Кстати, он использует default установки винды.
CODE |
if(modem)
{
///////*connect to dialer
TRegistry * Reg= new TRegistry;
Reg->RootKey = HKEY_CURRENT_USER;
if (Reg->OpenKey("\\RemoteAccess", true) )
{
con=Reg->ReadString("Default");
Reg->CloseKey();
/*
покоцано цензурой
*/
con="rundll32.exe rnaui.dll,RnaDial " + con;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
if( !CreateProcess( NULL, // No module name (use command line).
con.c_str(), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
// ErrorExit( "CreateProcess failed." );
{
delete Reg;
return 0;
}
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
| |
|
Vlad |
Отправлено: 27.07.2005, 10:56 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Вот кусок еще , испозуется Indy, но не тот что по умолчанию в Билдере.
Используется 5 Билдер и библиотека Indy ,кажется 9, взятая с сайта Indy.
Кое где я постирал не значищий для вас код. Идет передача файла.
Учтите, что по стандарту, SMTP , сервер может требовать авторизации(имя и пароль), а может нет. Все зависит как сервак настроен.
CODE |
TIdAttachment(IdMessage1->MessageParts, ExtractFilePath(Application->ExeName)+"\\zak.dbf");
IdMessage1->Subject=USER_IDP+"*"+"#$89%";//USER_IDP;
IdMessage1->Recipients->EMailAddresses = to;
IdMessage1->ReceiptRecipient->Text= out_em;
IdMessage1->From->Text=out_em;
if(autr)
IdSMTP1->AuthenticationType = atLogin;
else
IdSMTP1->AuthenticationType = atNone;
IdSMTP1->Username = user;
IdSMTP1->Password =ix;
IdSMTP1->Host = em;
IdSMTP1->Port = StrToInt(port);
try{
IdSMTP1->Connect(0);
try {
IdSMTP1->Send(IdMessage1);
save_auto();
}
catch(...)
{
ShowMessage("Посылка почты не удалась!");
return 0;
}
}
__finally
{
IdMessage1->MessageParts->Clear();
IdSMTP1->Disconnect();
if(DM->T2->Active==false)
DM->T2->Active=true;
return 1;
}
}
else
{
/*
покоцано цензурой
*/
TIdAttachment(IdMessage1->MessageParts, ExtractFilePath(Application->ExeName)+"\Zak.dbf");
IdMessage1->Subject=USER_IDP+"*"+"#$89%";//USER_IDP;
IdMessage1->Recipients->EMailAddresses = to;
IdMessage1->ReceiptRecipient->Text= out_em;
IdMessage1->From->Text=out_em;
if(autr)
IdSMTP1->AuthenticationType = atLogin;
else
IdSMTP1->AuthenticationType = atNone;
IdSMTP1->Username = user;
IdSMTP1->Password =ix;
IdSMTP1->Host = em;
IdSMTP1->Port = StrToInt(port);
try{
IdSMTP1->Connect(0);
try {
IdSMTP1->Send(IdMessage1);
save_auto();
}
catch(...)
{
ShowMessage("Посылка почты не удалась!");
/*
*/
return 0;
}
}
__finally
{
IdMessage1->MessageParts->Clear();
IdSMTP1->Disconnect();
return 1;
}
|
Посмотрю где у меня есть прием, тоже брошу.
Есть вообще другой вариант приема файла, — используется любая почтовая прога установленная на компе, у неё забирается файлик и затем обрабатывается. Но это другая тема Хотя кодировать — меньше. |
|
Vlad |
Отправлено: 27.07.2005, 11:42 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
p.s. Про рисование лучше в аське потрепаться. Хотя всё элементарно. И еще печатать надо или нет? |
|
flint |
Отправлено: 27.07.2005, 12:02 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
Спасибо большое. Вот, пытаюсь разобраться.
Печатать Надо. На печать выводится часть рисунка, отображаемая в области ее просмотра...
|
|
flint |
Отправлено: 27.07.2005, 12:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
Только вот вопрос:
QUOTE |
"Использовать обычный виндовый диалер для установки соединения"
|
Моя вина:)
Суть программы в том, что существует некий прибор, у которого есть встроенный модем. По требованию хозяина прибора (нажатии на кнопку) модем соединяется с компьютером, на котором стоит программа. Она уже и обрабатывает поступившие данные.
?: причем тут dialer????
|
|
flint |
Отправлено: 27.07.2005, 12:11 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
!!!Важно: на приборе нет операционной системы.
Как быть в этом случае? |
|
Vlad |
Отправлено: 27.07.2005, 12:50 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
На компе с которым связывается прибор, что за софт стоит, который обрабатывает входящий звонок? Или комп стоит в локалке? без модема. |
|
flint |
Отправлено: 27.07.2005, 13:13 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
Так вот я и пишу этот софт, который обрабатывает входящий звонок!!! |
|
flint |
Отправлено: 28.07.2005, 06:43 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
Попробую еще подробнее.
Прорамма стоит на компьютере, который должен принять данные и их обработать. В идеале на этом компьютере, кроме этой программы ничего никогда не должно запускаться. Но это только в идеале.
Поэтому я сворачиваю её в трей (на будущее, пока не реализовал).
Эта программа постоянно следит за состояноием com-порта, на котором висит модем. И, как только поступают данные (Данные поступают без ранней договоренности, т.е. в ЛЮБОЕ время, и программа должна в это же время их принять), приложение их принимает, подается сигнал, и под руководством пользователя соответствующим образом обрабатывается.
Вот.....
|
|
flint |
Отправлено: 28.07.2005, 06:57 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
а протокол передачи могу тебе на аську скинуть
(если авторизируешь ) |
|
Vlad |
Отправлено: 28.07.2005, 07:50 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
стучись |
|
flint |
Отправлено: 28.07.2005, 09:20 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
Уж второй день стучусь |
|
Георгий |
Отправлено: 28.07.2005, 22:32 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
у меня тут нескольно вопросиков есть:
1. комп с программа связан с железкой проводом через RS232 или настоящей телефонной сетью через настоящий модем?
2. программа что то вроде сканера? получает в качестве исходных данных нечто, что потом переводит в bmp?
3. функции программы состоят в том, что бы принять данные от железки, показать картинку пользователю, распечатать. всё? |
|
flint |
Отправлено: 29.07.2005, 06:34 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
2 Георгий
у меня тут несколько ответиков есть :
1. Комп и прибор связаны настоящей телефонной сетью, через настоящий внутренний модем
2.программа что-то вроде сканера. Постоянно слушает модем. Получает в качестве исходных данных, так скажем, координаты точек, а по ним строит изображение, которое, не факт, что вмещается в область, выделенную под нее. именно эту область необходимо вывести на экран. ИЗОБРАЖЕНИЕ НЕ СОХРАНЯЕТСЯ! сохраняются переданные данные, по которым в любой момент изображение может заново построиться. Причем этих данных должно быть много (много понятие растяжимое В данном случае много — это 10приборов*10картинок=100 картинок )
3.QUOTE | функции программы состоят в том, что бы принять данные от железки, показать картинку пользователю, распечатать. |
А также сохранить переданный файл в базе данных (таблица базы данных состоит из номеров приборов). Или альтернативный вариант(кстати, даже более удобный): создать папку. имя — номер прибора. Затем туда помещать полученные данные.
Но картинки нужно будет рисовать, используя БД:
выбрал из БД номер прибора -> увидел какие рисунки есть -> выбрал из них нужный -> посмотрел/распечатал
Вот, вроде и вся суть.
Появится еще что- то напишу
Появятся еще вопросы — пишите вы
(или, лучше как появятся ответы )
Заранее спасибо... |
|