Сергей Сергеев
-
Постов
144 -
Зарегистрирован
-
Посещение
-
Победитель дней
9
Сообщения, опубликованные Сергей Сергеев
-
-
Добрый всем день!
Уважаемые коллеги, столкнулись с такой проблемой.
Если есть DataSnap сервер, работающий в режиме Session, и клиент, написанный на Delphi с использованием TSqlConnection к серверу по протоколу DataSnap.
то все работает. Т.е. клиент открывает соединение, вызывает методы сервера , при этом на сервере, в экземпляре класса ServerMethod ( живущий от Коннекта, до его закрытия) - хранятся все данные сессии, ИД клиента, его настройки и т.д., и закрыват соединение, при этом сервер уничтожает экземпляр класса ServerMethod, со всеми данными.
Встал вопрос, как использовать этот же сервер, с другими клиентами, работающими по REST, например PHP, JS.
У DS сервера есть rest протокол, НО! после любого обращения по REST, сервер создает и уничтожает сразу класс ServerMethod ( т.е. работает в режиме LifiCicle = Invocation, о чем честно написано в документации)
Т.е. хранить данные подключения не получится.
Чтобы не переписывать сервер, решили попытаться прикинуться клиентом DS. Поставили между сервером DS и клиентом DS снифер. Выяснилось, что они общаются между собой по интерфейсу tunel.
т.е. вместо http://docwiki.embarcadero.com/RADStudio/Rio/en/DataSnap_REST_Messaging_Protocol
Цитатаhttp://host:port/datasnap/rest/[ClassName]/[MethodName]/[ParamValue]
надо обращаться на http://host:port/datasnap/tunnel/[ClassName]/[MethodName]/[ParamValue]
вообщем там целая жизнь из команд PUT, GET..
Описания этого протока не нашел..
Может кто уже имел такой опыт по сопряжению REST клиента и DS сервера в режиме LifeCicle = Session.
В приложенном файле протоколе обмена
- открытие соединения c с клиента , без авторизации ( TSqConnect )
- выполнение метода LoginByKartVDevOsDOC с параметрами - внутренний логин в систему,
пс. а почему txt нельзя прикрепить?? пришлось зарарить..
-
Думаю, что если в Андроид, WIN проблем нет, то, скорее всего глюк в реализации под IOS, чего нибудь
Нужно попытаться обойти, например, убрать динамическое создание полей SG1, из текста не понятно, что к чему привязано.. я в таких случаях делаю пустую форму, с необходимым минимальным "падающим" функционалом, и уже на ней тестирую варианты..
и этот проект уже можно выложить целиком, если кого то попросить потестировать, посмотреть. Правда непонятно что делать с базой, приложить дампы ( усеченные) необходимых таблиц.
-
Привет всем!
столкнулся с такой проблемой, пример из Delphi и vkbdhelper не работают, если на форме, внутри VertScrollBox есть, кпримеру, набор TEdit которые не входят по высоте в форму и изначально содержимое имеет скролл.
Все хорошо, пока выбирается TEdit в видимой области, если же проскроллировать вниз списка и пытаться выбрать элементы из низа списка,
то это сделать невозможно, VertScrollBox перепрыгивает в верхнюю позицию, и выбранный элемент остается нивидимым, под ( или даже ниже) вирт. клавиатуры.
Похоже, в обоих случаях, не учитывается начальное смещение СкроллБокса.
Причем в примере Дельфи, там выравнивание Layout задано как Client , которое изначально "убивает" Scroll, у себя поставил Top, для сохранения высоты Layout, чтобы изначально Scroll появился.
Приложил свой тестовый проект.. с vkbdhelper .
Неужели после стольких лет fmx нет нормального решения из коробки для создания формы с длинным вертикальным списком Едитов и возможностью внесения информации в конце списка?
все в детских штанах..
-
1 час назад, Barbanel сказал:
но в разных версиях студии а не андроида,
точно, компиляция в 10.2 и 10.3 дают
разный видDatePicker. От стиля Delphi зависит цвет вот эти вот панелек ( темные, светлые) - собственно и вопрос - как поменять.. т.е. похоже не нативный, хотя может от версии SDK андроида зависит..пс. все таки одинаковый - "современный", SDK 22 и SDK 28.. хм..
а крутилки помню, Seatle или Berlin по моему были.. а сейчас - тыкалки.. придется самому делать наверное календарь "в цвет"
-
33 минуты назад, Barbanel сказал:
Подозреваю что туда она попадает из style-файла.
Вот.. правда в v21.xml ничего не нашел, как и в .style, скорее всего отрисовка както завязана на, например, условно стиль "правый угол TaskBar" ( чтоб никто не догадался). И еще меня смущает нативность этих элементов, коллеги утверждают, что в разных Версиях они разные, а тут одинаковые..
пс. Не нашел файл FMX.Pickers.Android - где они?
-
31 минуту назад, Barbanel сказал:
де-то в свойствах проекта прописывается, какую цветовую схему должен использовать Андроид чтобы отображать эти диалоги.
Полагаю что это в одном из "манифесто-подобных" xml файлов.проект один - из Sample DatePicker, разные стили цепляю ( т.е. загружаю файл *.style в StyleBook) Delphi - получаю разные цвета .. вряд ли при этом xml файл меняется.. неужели не предусмотрена возможность менять? и даже отключить это непонятно как.. разве что не использовать TDateEdit..
-
-
Стиль Андроид Л. Все сине-зеленые квадратики в *.png файлах стиля и линии заменил на свои. В списке элементов стиля не т такого элемента как Picker. Откуда он берет эти панельки над днями месяца?
-
9 часов назад, Barbanel сказал:
В зависимости от того, как выглядят ваши файлы (которые нарисовал дизайнер)
4 файла с разными разрешениями картинок ( иконки кнопок, пунктов горизонтального и вертикального меню, сами кнопки ( круглые с тенями , фоны, и т.д). стандартных элементов там нет, он про них ничего не знает.
Я взял не StyleBook и в нем редактировать, а BitMap StyleDesigner, загрузил в него Android L Light Style, добавил в него 4 файла с картинками дизайнера ( в добавок к стандартым) и пробовал в нем добавить новый Object - на основе (копии) CheckBox - пытался добавить надпись снизу, чтобы получился обьект с картинкой и надписью под ней. Не получилось. Смог только заменить картинку для состояния чек и анчек. Ссделал 8 таких обьектов - по количеству элементов горизонтального меню, картинку которого привел. Загрузил это в стиль приложения. Потом на TLayout положил чекбокс , указал ему один из новых стилей. Под ним, по центру положил Ttext, это надпись пункта меню. Но! это три обьекта, на каждый надо вешать онклик, все отдельно перекрашивать ( чекбокс и надпись), следить чтобы не "троило" ( т.е. если сработал он клик на одном обьекте ( надписи к примеру), то не реагировать на онклик панели или чекбокса). Поэтому и хочу - одним обьектом через стили.
9 часов назад, Barbanel сказал:Если нельзя, я бы сделал в файле стилей три чекбокса (а лучше три РадиоИтема). Каждому из них присвоить свою картинку для активного и неактивного состояния (черный или оранжевый по-вашему).
т.е. я так и сделал.. а хотел одним обьектом с надписью и панелью, ну большой чек бокс, чтоли, с надписью внизу и фоном.
-
А сам демо пример работает? если его не менять? если работает, то как в детстве - найди 5 отличий..
пс. там еще манифест менять, +файл подкладывать в проект, для новых проектов , вроде, 10.3 сама это делает, а для старого - я вручную правил манифест и файл создавал и в деплой размещал..
-
посмотрите как сделано в примере из поставки, и заодно проверьте работает ли у вас. PhotoEditorDemo - у меня все работает.. там есть кнопка - сделать фото с камеры и получаются все разрешения.
-
Доброго времени суток..
Столкнулся с такой проблемой, - добавляю новые обьекты в Bitmap Style Designer - панельки с разными картинками ( задание углов картинки мышкой - это издевательство! почему нельзя вписать координаты?? окно есть для координат но только на отображение, прямо игра в минер.. особенно радует указывание 5! картинок например для чекбокса чекед + 5 для анчекед и все это в 4х разрешениях - 40 картинок! мышкой!).. потом сохраняю как style FMX.
Открываю файл в StyleBook, он затирает предидущий стиль приложения, и не дай бог что либо подредактировал в StyleBook - все пропадает.
Есть такой элемент MultiView. В исходнике стиля AndroidL Light ( vsf ) - в списке обьетов он отсутствует (?) хотя есть почти в каждом приложении.. шторка в нем , по умолчанию серая, сменить можно только редактирую в StyleBook, но последующая перезагрузка стиля, естественно все стирает. Как выпутаться из этого замкнутого круга? Merge стилей двоит все обьекты, нельзя ли както делать свои стили уже в формате .style , которые бы "прибавлялись" к загруженному из vsf?
-
7 часов назад, Barbanel сказал:
Ну так вы спрашивайте, здесь много людей могут ответить на такие вопросы.
Также уверен, здесь есть люди, прошедшие эти курсы
Спасибо за поддержку..
разместил первый вопрос в теме создание стилей..
вот второй
-
Приветствую Вас!
нарисовал дизайнер проект приложения, и по моему недосмотру не дал отдельные файлики для каждой картинки, а все картинки в одном файле для каждого разрешения, 1x 15x 20x и 30x.
Также есть для 4х и 5х. Но сразу оговорюсь - использовать их не получилось - прикрепил, ссылки в них сделал, но похоже они заменили 2х и 3х, т.е. координаты для 2х и 3х почемуто применялись для файлов 4х и 5х
Может ошибаюсь, убрал файлы 4 и 5 и ссылки вних - все заработало. Может в будущем пригодится.
Так вот, использовать эти "простынки" с наборами картинок, я так понял можно через стили. Загрузил стиль АндроидЛайт и в нем начал пробовать добавлять обьекты. Сразу скажу - ни один из добавленных вручную ( через кнопки в правом верхнем углу ) обьектов не захотел работать - т.е. ничего не показывал. Работали только копии уже существующих в стиле обьектов - пока склонировал два - панель и чекбокс.
Приложил картинку нижнего меню - набор таких вот обьектов, активный оранжевый, остальные черные.
Хотел сделать обьект : общая панелька, в которой есть обьект битмап и текст под ним, все по горизонтали по - центру. Отступы от верха панельки - картинок и надписей одинаковы.
Можно сказать что это чекбокс такой, с двумя состояниями - вкл и выкл. Главное чтобы работало как один обьект - панелька+ картинка + надпись. Из готового стиля чекбокса смог только заменить в нем картинку - получил обькт только для картинки - зато с двумя состояниями - чек и анчек. Понятно, что положив это на Лайоут и добавив надпись снизу - получу визуально похожее, но это три онклика на каждом, замена цветов в надписи вручную..
Как сделать вот такой единый обьект стилями?
пс. кстати там еще значек - что есть нечто требующее внимание - оранжевый круг у программ на картинке.. если еще и для него удастся в стиле место приделать.. было бы здорово.
Заранее всем спасибо за ответы - советы.
-
Есть пока около 40 экранов в zeplin, прототип, и 5 наборов картинок иконок, лого, полосок и т.д. в 5 разрешениях. С пнд только начал делать новое приложение, разбираюсь со стилями.. К сожалению, я так понял, курсы по стилям из шапки сайта не работают, ответа на запросы не получил.. Есть вопросы, позже напишу в теме стилей..
-
-
Сделал так..
TEdit положил внутри THorzScrollBox. Ширина TEdit больше чем Scroll, что не влезло справа, обрезалось. Спрятал ScrollBar, чтобы не портил вид.
Положил на форму TrackBar c Value от 0 до 150. Для значения Value добавил TFloatAnimaton с изменением Value от 0-150 по циклу и с реверсом.
На событие OnChangeValue TrackBar повесил обработчик в котором, в зависимости от значения Track меняю у HorzscrollBox позицию ползунка ( .ScrollBy (dX,dY) - еле нашел!)
Результат на видео https://youtu.be/crtw-qQmjFc. Проект вечером прикреплю - может кому понадобится.
"мозг" тут :
var Form1: TForm1; currPos : integer=0; implementation {$R *.fmx} {$R *.LgXhdpiPh.fmx ANDROID} {$R *.Windows.fmx MSWINDOWS} procedure TForm1.TrackBar1Change(Sender: TObject); var cnt : integer; cp :integer ; begin lbT.Text := TrackBar1.Value.ToString; cp := Round(TrackBar1.Value) ; cnt := currPos - cp; currPos := cp; HorzScrollBox1.ScrollBy(cnt,0) ; end;
-
Привет! Как сделать "бегущую строку" в TLabel или TEdit - длинный текст, если не влазит в отведенное место по ширине, то авто скролл горизонтальный..
пробовал через добавление TFloatAnimation в CustomStyle к свойству Text, изменяя position - ничего не происходит, пробовал Font.Size менять ( для проверки - а вообще оно работает?) тоже ничего не происходило.
Запускаю в Win, а нужно вообще для Androiod и Ios.
-
Бюджет 40000 р.
срок 2-3 недели - до файла стилей.
-
Есть, написанная на Delphi FMX приложение - личный кабинет пациента поликлиники.
Руководством поставлена задача :
"Привести дизайн приложения в соответствие корпоративной программе идентификации.
Привлечь аутсорсинг-дизайнера на рестайлинг текущей версии, заложить стилистику новых страниц"
Речь идет о том, чтобы уже для существующего приложения, сделать новый "воздушный, легкий" дизайн.
на первом этапе мы бы хотели получить несколько вариантов дизайна, желательно с работающими прототипами wireframe
к уже существующим страницам приложения, будут добавлены новые - онлайн оплата услуг через сбер, возможно другие, но все они будут следовать и повторять дизайн уже готовых страниц.
на втором этапе - создание стилей для Delphi для утвержденного руководством дизайна. Все компоненты в приложении из поставки Delphi, без использования доп. платных компонентов.
ну и поддержка, доработка, исправление, если понадобится на этапе редизайна приложения с использованием Ваших стилей нашими силами.
Если Вас интересует подобное предложение, пожалуйста, оцените его по срокам и стоимости.Заранее спасибо.
-
Поставил Токио для проверки, такого я не ожидал, скажу честно. Проект, который достаточно безболезненно двигался с Сиетла в Берлин, и количество глюков уменьшалось, просто "умер" в Токио. в Андроид 4.4.2 просто не стартует после splash экрана, до точки останова на первой же команде не доходит, segmentation fault. В Андр 5.1 , 6.0 хоть запускается. Опять пропадают картинки с кнопок ( допилили). Форма с анимацией, пока идёт соединение в потоке, не анимирует. Шрифт на этой форме искажен, с зелёной обводкой. Форма не закрывается после установки соединения. Сказать что я разочарован, не сказать ничего.
-
Проблема решена - приложение в Апп сторе.
Опишу как решил.
Конфигурация - Berlin 10.1 - update 2, Xcode 8.
Datasnap сервер, использую tcpIp.
Компоненты на клиенте TSqlConnection - для Datasnap, TIdTcpClient - использую для проверки соединения перед открытием ДатаСнар соединения, т.к. в нем не работает ТаймОут и есть вероятность "залипнуть"
Сервер так и остался в ИП4 ( вначале хотел перевести его в ип6, но провайдер МТС ответил, что такие адреса не дает, сделал туннель с tunnelbroker.net на тестовый сервер, но так и не пригодилось ( кстати бесплатно, но без гарантии пропускной способности) .
Никаких квадратных скобок , если у вас имена хостов а не ИП адреса не нужны.
Смысл простой - у обоих компонентов нужно выставить свойства протоколов в зависимости от сети нахождения клиента.
Вначале ставлю у обоих ИПв4, если коннект ексептиться - то ставлю ипв6 и еще раз пробую коннектится. и только второй ексепт скажет, что сети действительно нет.
function TClientModule1.gethost(aHost : string):string; var dbxProps: TDBXDatasnapProperties; begin try TabbedForm.HostDS := TabbedForm.Host4; TabbedForm.HostP := TabbedForm.Host4; // ставим все в ип4 IdTCPClient1.IPVersion := TIdIpVersion.Id_IPv4; IdTCPClient1.Host:=TabbedForm.Host4; IdTCPClient1.Port:=StrToInt(TabbedForm.port); //порт сервера DataSnap idTCPClient1.ConnectTimeout := 12000; //заданный тайм-аут Assert(SQLConnection1.DriverName = 'DataSnap', 'Driver must be DataSnap'); dbxProps := SQLConnection1.ConnectionData.Properties as TDBXDatasnapProperties; dbxProps.CommunicationProtocol := 'tcp/ip'; dbxProps.CommunicationIPVersion := 'IP_IPv4'; IdTCPClient1.Connect; if IdTCPClient1.Connected then begin //подключились result:=TabbedForm.Host4; TabbedForm.HostDS := TabbedForm.Host4; TabbedForm.HostP := TabbedForm.Host4; IdTCPClient1.Disconnect; end; except on E: Exception do begin //toast ('IPv4 except '+E.Message); try IdTCPClient1.IPVersion := TIdIpVersion.Id_IPv6; IdTCPClient1.Host:= TabbedForm.Host6P; IdTCPClient1.Port:=StrToInt(TabbedForm.port); //порт сервера DataSnap idTCPClient1.ConnectTimeout := 12000; //заданный тайм-аут IdTCPClient1.Connect; if IdTCPClient1.Connected then begin //подключились result:=TabbedForm.Host6DS; TabbedForm.HostDS := TabbedForm.Host6DS; TabbedForm.HostP := TabbedForm.Host6P; IdTCPClient1.Disconnect; dbxProps.CommunicationIPVersion := 'IP_IPv6'; end; except on E: Exception do begin //не подключились result:='Не подключились'; dbxProps.CommunicationIPVersion := 'IP_IPv4'; IdTCPClient1.IPVersion := TIdIpVersion.Id_IPv4; TabbedForm.HostDS := TabbedForm.Host4; TabbedForm.HostP := TabbedForm.Host4; end; end; end; end;
Тут немного есть излишества кода - думал что для Ип4 и Ип6 будут разные имена хостов, но сейчас это одно и тоже имя Сервера который находится в Ип4 и не имеет ни выхода ни адреса в ип6.
вызвав эту фунцию я заполняю глобальные переменные ( ds- датаснап сервер. P- для пробного открытия ("пинг" )) на самом деле они тоже одинаковые.
клиента проверял, как описано http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/
т.е. макбук подключен через 3ж модем в сеть и через WiFi раздает ИпВ6 сеть и Айфон к ней присоединен. Если приложение работает в этой внутренней ипв6 сети, то все - проблема решена - Аппле именно так и проверяет.
-
что то я так и не понял - обязательно или нет серверу иметь адрес ipv6?
сделал, как описано выше, с помощью макбук подключенному в 3ж сеть (ipv4) , расшаренную вай-фай подсеть dns64/nat64, в нее смог приконнектится только Iphone ( два китайских смарта повисли при подключении на словах - получение ИП адреса, один подключается, получает ип6 адрес, но без инета)
внизу, если раскрыть 2 адреса в разделе ipv6 есть два длинных ipv6 адреса
не очень понимаю - в какой сети iphon - 6 или 4?
мой сайт имеющий ipv4 адрес ( по имени хоста) TWebbrowser открывает, в то же время попытка открыть connection ( TIdTcpClient) ipv4 по имени или ип адресу не работает.. exception
поставил программу пинг - google.com - показывает его ipv6 адрес.
как приконнектится к хосту с ИП4 только?
-
В 15.04.2017 в 13:09, Равиль Зарипов (ZuBy) сказал:
а сам хост(сервер) имеет IPv6 адрес?
вот у меня тоже самое было, пока не выдал провайдер IPv6 адрес, я не смог опубликовать
спасибо за подсказку.. в пнд буду разбираться и со скобками, вокруг хоста, и с адресом сервера..
DataSnap sever с сессией через REST клиент (php, js..)
в DataSnap
Опубликовано
да, про это и написано в доках. Но при обращении на rest, в хедере, директиве Pragma=dss=ИД сессии , сервер возвращает ИД. Если слать ему ее обратно на сервер, то идет обмен все время с этим ИД. Т.Е сессия на Рест живет, Но ServerMethod уничтожается. Чего нет при обращении по tunnel ( вместо rest). Зачем ид сессии по рест, если сессии в ДС нет? явная недоделка, которую и хотел немного подправить - смоделировав обмен, как будто ДС клиент.
Фреймворки не смогут.. ну можно библиотечку для PHP, JS сделать.. и смогут..
Но, к сожалению. времени нет, описания протокола tunnel нет, решил переделать методы ДС сервера на открытые, т.е. все параметры в запросе.. а сессию пусть пхп-браузер в своих куках, переменных держат. Моя сторона только ДС сервер, задача сделать АПИ для других организаций.
Но если кто то раскопал про тунели.. буду рад любой информации.