Akad

Пользователи
  • Публикаций

    45
  • Зарегистрирован

  • Посещение

Информация о Akad

  • Звание
    Продвинутый пользователь

Посетители профиля

110 просмотров профиля
  1. TGrid vs Тач интерфейс

    Эээ... Разве? Я как только прикасаюсь к таблице, ещё палец не убираю, сразу вызывается OnCellClick.Т.е. не важно, после касания я провёл пальцем или сразу отпустил OnCellClick вызывается у меня в любом случае. Есть настройка этого поведения? Я сейчас как раз и обрабатываю Mouse Down/Up, вычисляя радиус между нажатием и отпусканием. Но это имхо не правильно. Поэтому и возник вопрос. P.S. А каким тогда компонентом правильнее сделать список на подобии такого: вывод отличается в зависимости от кучи параметров (например если адрес не влез в строку уменьшаем шрифт). Сейчас я перехватываю DrawColumnCell и рисую что и как мне надо. Самые очевидные для подобной задачи ListBox/ListView не умеют такого, на сколько я понял? Мне нужно что бы под мобильными платформами это всё без затруднений скроллилось и открывалось при клике.
  2. TGrid vs Тач интерфейс

    Как можно отследить, что пользователь кликнул на ячейку грида (режим только чтение, при клике программа должна выполнить действие в зависимости от выбранной ячейки)? Теоретически этим должны заниматься OnCellClick/OnClick. Но по факту они ловят событие нажатия на грид, не рассматривая случай скролла. Т.е. мимо. OnSelChanged - почти оно, кроме случая когда пользователь ткнул на выделенную ячейку. OnTap - вызывается до изменения выделенности (очередной баг?). Соответственно тоже мимо. Есть ли корректный способ отследить нажатие пользователем на ячейку TGrid?
  3. Кстати вопрос в тему: а как закэшировать всё это при старте приложения (ВСЕ компоненты во всех формах создаются динамически). У меня тоже при первом открытии дочерних форм ощущаются подлагивания.
  4. Непонятки с TWebBrowser

    А если не перегружать страницу, а скриптом править размер?
  5. Из сторонних компонент использую только TMSWebBrowser. В стеке вызовов при падении нет ничего от не Embarcadero.
  6. Хочу, что бы минимальное требование к версии андроида была, например, 4.4. Соответственно в настройках выбираю SDK api level ...android-sdk-windows\platforms\android-19 На 6 и 7 андроиде работает все замечательно, но если приложение устанавливается на 5 или 4.4 - при запуске оно падает. Что надо ещё поправить, что бы понизить требуемый API level? Падает в самом начале ExecJNI, if InvokeData.MethodID = nil then raise EJNIFatal.CreateRes(@SJNIUnknownMethod); Студия 10.2. Собирал и на SDK, которая идёт с RAD Studio, и с той, что ставил отдельно. Результат един. NDK выставлял 9, ничего не меняется.
  7. Вылетает приложение с TNetHTTPClient

    Стандартная ситуация. "Лечить" как всегда try/except.
  8. Да, они действительно существуют. Но во времена XE2 они как-то очень "странно" работали. Поэтому написал свои. Возможно сейчас ситуация стала лучше.Не проверял. Беру свои слова обратно. Но TerminateThread в любом случае нет, а нужен он.
  9. Как миниум нет полноценного класса. Но вопрос не в этом. Cancel не работает. Поток не убивает. Только что проверил на запросе который длится 6-7 сек. Через секунду потоку делаю Cancel, но он всё равно доходит до конца и даже память освобождает. В общем не работает. Оно очевидно из кода. Любое межпоточное взаимодействие нужно осуществлять на локах (если нужно быстро, но в дельфе нет, только через апи). Ну или по извращённому/тормозному/но дельфёвому. Через Synchronize например. Ну если не интересно отлаживать приложение на устройствах клиента с разницей во времени часов в 12, и явным не желанием пользователя этим заниматься. Потому что единственная цель жизни потока в данном случае - обратиться к серверу с 'select тра-ля-ля' и заполнить таблицу. Таблиц на форме может быть 5-6. Соответственно потоков столько-же. Костылей наставить можно, но правильнее при закрытии формы поток прибить. Точнее под винду так и поступаю, но сейчас портирую на мобилки. И без конструкции вида TerminateThread(ServerReader.Handle,$DEAD); пока не представляю как это сделать.
  10. Нужен полноценный поток, как отдельный класс. Тем более Это явный краш всей системы. Когда поток высвободит ресурсы между if и cancel. Ага. Только когда он отвиснет, не будет ни сам существовать ни все переменные, которые в нём. А равно как и форма, один из компонентов которой он заполнял. Под андроидом сложно игнорировать краш всей программы и закрытие её. По крайней мере у меня не получается. Если в одном из потоков тотальный краш - это всё.
  11. Есть TThread, который что-то там своё делает. При этом он может "подвиснуть", особенно на 3g TCP соединениях. И соответственно часто случается, что его надо "пристрелить" не дожидаясь пока он сам сообразит что пора закругляться. Под винду есть чудесная TerminateThread. Но как ту же задачу выполнить под Android? iOS?
  12. Indy IRC

    А что реально приходит (дебагер показывает, что в буфере)? Помню там была проблема с отсечением последнего символа. Но приходил корректный текст. Можно инди пересобрать и в колл-стеке глянуть где криво переход анси в юникод. Возможно сервер ожидает utf8, а там 1251 например приходит.
  13. Как правило акк+название девайса. Ну для страховки можно мак. Проще читай - данные придут не повторяемые. На андроиде даже IMEI не 100% гарантия уникальности. Так как опять-же на китайце его можно изменить. Но это хоть 99% уникальности. Вообще лично я сейчас вычисляю md5 от кучи параметров (IMEI, версия прошивки, название и пр.) это даёт шанс уникальности. Но лишь шанс. )))
  14. На андроиде если есть симка - по IMEI, если нет, то ни как. На мак адреса и пр. полагаться нельзя из-за обилия китайцев. С IOS всё проще. Там эти мак айди аккаунта. Номер винта может меняться даже на протяжении жизни одной ОС на нём. Вот тут как раз лучше про маки вспоминать. Про дату биоса, цпу айди и пр.
  15. Мдя... Win api реально крепкий орешек. WinExec будет молчать до последнего. Это факт. ShellExecute что-то проронит, но увидев зомби-фразу fmx - сдуется. Так что останется только кошерный CreateProcess. И ничего с этим не поделать. Хотя он имеет весьма не большое отношение к форумтагу...