Возможно это не самый лучший вариант, но он работает.
Схема с двумя текстбоксами (аналог тестового сервера в архиве DDEClient) получилась офигительно большой.
Основная проблема - распределение событий в зависимости от имён топиков и элементов.
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
|
|||
карма: 1 |
| ||
файлы: 1 | ddeserver_1_0.rar [5KB] [541] |
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Прекрасно.
Работает нормально, я не увидел косяков. Вот полная версия 1.00 Трохи клиента подправил в одном месте под FPC, иконки добавил, ну и косметика мелкая. Можно в пакет добавлять |
|||
карма: 22 |
| ||
файлы: 1 | project_dde_1_00.zip [9.8KB] [472] | ||
Голосовали: | tsdima |
Ответов: 2125
Рейтинг: 159
|
|||
За иконки - спасибо. Рисовать я совсем не умею
------------ Дoбавленo: А вот в пакет - пока рановато. Сервер доделать надо. Пока нельзя использовать несколько DDEServer или DDEServer и DDEClient совместно. Кроме того есть идея сделать свойство TopicList, чтобы избавить пользователя от необходимости проверять имя топика, плюс ещё и индекс топика снизу выдавать. Для совместимости можно сделать так, что если свойство пустое, то принимать все топики без ограничений. Тогда можно будет поставить два DDEServer с разными топиками (можно даже разнести по мультикам, для большей читабельности) и не заботиться об имени топика вообще. А ещё, я считаю, что можно было бы добавить в StrList точки doGetIndex,onGetIndex. Я уже несколько раз сожалел, что поиск индекса строки приходится делать несколькими компонентами, хотя там делов-то - вызвать FList.IndexOf |
|||
карма: 1 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
tsdima писал(а): Я уже несколько раз сожалел, что поиск индекса строки приходится делать несколькими компонентамиНу так надо добавить, если экономятся компоненты малой кровью |
|||
карма: 22 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Вобщем вот. Добавил свойство TopicList, причесал код. Это, наверное, пойдёт уже на SVN.
|
|||
карма: 1 |
| ||
файлы: 1 | project_dde_1_01.zip [10.6KB] [469] |
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-06-22 14:27:02 |
|||
карма: 0 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
tsdima, а что со StrList'ом делать будем
Добавить в него doGetIndex и onGetIndex ------------ Дoбавленo: Короче, я добавил doGetIndex в StrList |
|||
карма: 22 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Во всяком случае, скрытые они не помешают. Однако, например в схеме DDE_Server.sha удобнее брать значение для поиска с нижней точки сервера, а не из потока, и индекс используется не сразу, а потом. То есть пару точек снизу и сверху тоже пригодились бы (типа StrToFind и Index). Хотя для индекса, который используется потом, можно конечно и переменную воткнуть. Значение для поиска можно и с точки Str считывать, но т.к. смысл строк разный, вполне возможно, что обе точки пригодились бы.
Была ещё идея сделать не только doGetIndex (я хотел назвать doFind), но и поиск с использованием регулярных выражений (doMatch) с выдачей не только индекса, но и значений подвыражений (то, что обычно в выражении в скобках указано). Обработка строк для DDE-сервера, это тоже немаловажная фича, например обработка DDE-команды. Если бы была точка doMatch, то начало обработчика команд выглядело бы очень просто: DDE_Server --- StrList --- IndexToChannel, а уже после идёт обработка определённой команды с использованием параметров из МТ-потока. |
|||
карма: 1 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
С доп точками проблем никаких, добавить можно. А с doMatch я не совсем понял, что надо -- какой формат строки для поиска подается на вход -- ряд строк для поиска, заключенных в скобки(выражение), и что на выходе должно получиться -- индекс+найденное выражение (MT-поток), и так в цикле, пока все выражения не переберем, так что ли
------------ Дoбавленo: Добавил StrToFind и Index ------------ Дoбавленo: tsdima писал(а): поиск с использованием регулярных выраженийА у тебя, случаем, нет простенького парсера регулярных выражений, а то я нашел на 150 кило -- RegExpr называется ------------ Дoбавленo: Добавил в StrList еще и GetString Вот какой получился сервер с новым StrList'ом
В сервер надо бы добавить верхнюю точку -- ReturnItem, а то лишний компонент приходится ставить ------------ Дoбавленo: Короче, я все, вместе с примерами, добавил на SVN. Так проще будет корректировать. |
|||
карма: 22 |
|
Ответов: 2125
Рейтинг: 159
|
|||
nesco писал(а): А с doMatch я не совсем понял, что надо -- какой формат строки для поиска подается на вход На вход подаётся произвольная строка. А в StrList мы поместим список строк-регулярных-выражений. К какому выражению подойдёт строка, индекс того и выдавать. Например, на вход мы подаём имя ячейки (как в Excel) R10C5, а регулярное выражение, к которому она подходит: R([0-9]+)C([0-9]+). На выходе имеем индекс регулярного выражения в StrList-е и подстроки "10" и "5". nesco писал(а): а то я нашел на 150 кило Ну уж нет, такого монстра нам не надо ------------ Дoбавленo: А насчёт RegExp, я думаю, может не стоит мешать всё в одну кучу - сделать отдельный компонент. |
|||
карма: 1 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
tsdima писал(а): может не стоит мешать всё в одну кучу - сделать отдельный компонентО то, поди, самое лучшее решение. В текущем варианте взаимодействие сервер-клиент отрабатывает свой минимум нормально, все остальное -- это дополнительные приблуды. ------------ Дoбавленo: tsdima, слушай, а этот зоопарк по сети можно запустить, предположим, сервер находится на другой машине и надо осуществить передачу данных по сети |
|||
карма: 22 |
|
Ответов: 3514
Рейтинг: 184
|
|||
насколько я знаю, dde это для взаимодействия приложений..
|
|||
карма: 0 |
|
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
Астрамак, а это ты к чему
|
|||
карма: 22 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Это он к тому, что DDE - это обмен между приложениями на одном компьютере. Фактически, DDE реализован через посылку окну сообщения. А ddeml - это лишь надстройка, упрощающая работу с DDE, без неё на каждый чих сообщения слать и принимать надо.
nesco писал(а): сервер находится на другой машине и надо осуществить передачу данных по сети Это скорее DCOM будет, с его помощью и зарегистрированное приложение запустить можно (при разумных настройках безопасности), и объекты создать, и методы вызвать. |
|||
карма: 1 |
| ||
Голосовали: | andrestudio |
Разработчик
Ответов: 26151
Рейтинг: 2127
|
|||
tsdima, у меня есть задумка -- сделать ReceiveMessages для обмена сообщениями между своими приложениями, но я столкнулся с проблемой. Попробовал на CreateWindow, но нифига не получилось создать окно заданного класса, может тут лучше создать пустой Control и приаттачить к нему обработчик с выводом данных наружу. Что можешь подсказать, может у тебя простенький код завалялся по созданию пустых окно
|
|||
карма: 22 |
|