Шутка, разумеется, но ещё один способ незаметной передачи информации для тех, у кого есть компьютер, возможно, на что-нибудь сгодится. Заодно и познакомитесь с новыми компонентами.
Речь здесь пойдёт не о передаче файлов или другой компьютерной информации, а о передаче коротеньких (или длинных - у кого какое терпение :) сообщений между, например, коллегами по работе. Но главное условие - передача должна быть достаточно незаметной. Никаких сообщений на экране (типа ICQ)!
Сегодня мы будем передавать информацию с помощью азбуки Морзе. Однако звуки легко услышать, а потому воспользуемся не звуками, а светодиодами клавиатуры. Вы должны хорошо знать азбуку Морзе. Это нетрудно, достаточно потренироваться на досуге.
А со светодиодами умеет работать компонент со вкладки "Система" LedKey. Множество важных методов спрятано у него на вкладке "Точки" в панели параметров. Вот первоначальный пример работы с компонентом.
Здесь есть таймер, который автоматически включается после запсука программы (потому что параметр Enable у него = True). Затём идёт счётчик. Он замкнуто перебирает 3 числа: 0, 1 и 2, потому что это задано в его параметрах Min и Max. А при выдаче числа IndexToChanel генерирует одно из своих событий. Разумеется, все они идут по порядку, ведь счётчик считает по порядку, а событие IndexToChanel, понятно, зависит от значения счётчика.
Перейдём к более сложным вещам. Сделаем наконец передачу информации через светодиоды клавиатуры. Пусть NumLock будет у нас за точку, CapsLock за тире, а ScrollLock - разделитель между символами. Конечно, это не совсем правильно, ведь в идеале один светодиод должен уметь передавать всё, причём за точку он должен мигать быстро, а за тире - подольше гореть. Но для удобства сделаем так.
Эта сложная на первый взгляд схема очень просто расшифровывается, если начать с начала, а именно - с нажатия кнопки. При этом сначала через разветвители идёт сигнал на выключение всех светодиодов, чтобы при наблюдении за ними не запутаться. Затем используется компонент CharArray. В него загружается строка из поля ввода, и каждый символ сразу становится элементом массиа. Дальше работа идёт уже с массивом символов.
Событие onLoad компонента CharArray, происходящее после загрузки строки в массив компонента, вызывает целый ряд событий (через разветвитель). Во-первых устанавливается максимальное значение счётчика, оно должно быть равно количеству символов строки (или элеменов массива символов, что одно и то же). Затем счётчик получает начальное значение -1. Массивы нумеруются с 0, поэтому при движении счётчика вперёд первым будет как раз 0.
Затем устанавливается максимальное количество срабатываний таймера. Оно тоже равно числу символов. Ну а потом таймер запускается и через каждые 600 миллисекунд (это установлено в его параметр Interval) передвигает счётчик на 1 вперёд. При этом из массива символов извлекается новый символ, и элемент Case его проверяет. Если это точка - загорается (и через 300 мсек гаснет) NumLock, если тире - CapsLock, ну а если слеш, то ScrollLock, и это означет конец символа.
Объясню, зачем нужен таймер. Дело в том, что поставить компонент ArrayEnum, который просто перебирает массив, нельзя, потому что этот компонент выдаёт значения сразу одно за другим, а нам нужна некоторая задержка, чтобы можно было увидеть изменение светодиода. Ну а другие три таймера гасят светодиод, чтобы было удобней. У них, кстати, автостоп установлен в параметрах и равен 1, т.е. таймеры эти будут срабатывать только 1 раз (ведь нам же 1 раз нужно погасить светодиод).
Осталось лишь рассказать, как наладить связь между двумя компьютерами для передачи данных. Это можно сделать разными способами, я выбрал UDP. Этот компонент находится на вкладке "Интернет". Вот схема с его использованием.
Здесь вам нужно немного разобраться с компонентом UDP. Этот компонент создаётся сокет на вашем компьютере, через который возможно общение с другими компьютерами. LocalPort и RemotePort - это порты для привязки сокета и отправки данных. Они для всех программ должны быть одинаковыми, такими, как уже установлено.
LocalIP - это IP-адрес вашего компьютера в сети. Конечно, 127.0.0.1 нужно изменить на ваш IP, ведь именно на него будут присылать данные.
RemoteIP - это IP-адрес компьютера, куда вы будете отправлять данные. Если вы хотите связываться с несколькими компьютерами, то ничего в этом параметре указывать не нужно, а нужно RemoteIP указать в одноимённой верхней точке (при этом AutoConnect компонента UDP должно быть в False). Как показано в примере, вы должны вписывать IP-адрес компьютера, на который хотите отправить своё послание, в верхнее поле ввода.
Метод doSendTo отправляет данные на указанный IP, в указанный порт. Не спутайте её с точкой doSend, эта точка нужна для отправки данных на фиксированный IP-адрес, который указывается в параметре RemoteIP, но там ничего не указано, потому что IP-адрес у вас не фиксированный, вы сами его вводите.
Ну а если вам кто-то отправит послание (адресант должен отправлять на тот IP-адрес, который вы указали в параметре LocalIP), то сработает событие onReceive, данные останутся в памяти (Memory), и прозвучит звуковой сигнал (компонент для звукового сигнала находится на вкладке "Мультимедиа"), после чего запустится двухсекундный таймер (с автостопом = 1), и только потом начнут мигать светодиоды. Это сделано, чтобы вы реагировали на приход данных и успевали их прочитать.
Этот проект - для юных радистов, осваивающих азбуку Морзе.
ОтветитьУдалитьМежду тем идея хороша для светового оформления действий пользователя с программой. Она открывает новый, прежде никогда не использовавшийся канал воздействия - только не азбукой Морзе, а иллюминацией.
а можно передавать текст?
ОтветитьУдалитья хочу создать чат напишите мне pnv99game@gmail.com или создайте видео урок заранее спасибо
лучше сделайте урок а то я не разобрался
ОтветитьУдалитьи нечего не получилось моя почта pnv99game@gmail.com
Урок будет практически таким же, что уже есть (см. в конце этой статьи), поэтому делать его смысла нет. Разница лишь в том, что с точки onReceive компонента UDP будет выходить текст, который можно передать в поле ввода (просто подключить UDP к компоненту Edit). А в поле, где были знаки Морзе, надо вводить текст, который нужно отправить. В остальном практически всё то же самое.
ОтветитьУдалитьа можете мне перикинуть по почте готовый sha файл чата pnv99game@gmail.com
ОтветитьУдалитьпожалуйста пришлите мне готовый sha чат pnv99game@gmail.com
ОтветитьУдалитьhttp://hi-asm.narod.ru/sha/bh280.sha - это сервер чата
ОтветитьУдалитьhttp://hi-asm.narod.ru/sha/bh281.sha - клиент. Сначала запускается сервер. В клиенте (схеме) надо сначала прописать IP-адрес, где находится сервер. А потом скомпилировать клиент и установить подключение. Схемы несложные. Другие примеры, кстати, есть в папке Elements\Delphi\Example\Internet\TCP_Chat
спасибо
ОтветитьУдалитьа там есть fast chat как его использовать
ОтветитьУдалитьа то с сервером не разобрался
Что такое fast chat?
ОтветитьУдалитьElements\Delphi\Example\Internet\chat.sha
ОтветитьУдалитькароче upd chat как его исп