Доска почета


Popular Content

Showing most liked content since 18.01.2017 Во всех областях

  1. Сделал пример приложения для работы с Microsoft Word из приложения Delphi. Такое приложение может использоваться для обмена данными между объектами семейства Microsoft Office. Исходные коды приложения помогут вам понять, как работать с объектной моделью Microsoft Word. Чтобы лучше разобраться с нюансами Word, предлагаю ознакомиться со справочником Word VBA reference на MSDN. Проект создан в среде FireMonkey Delphi Berlin 10.1 Протестирован в MS Word 2010, 2016, Windows 7x64 и 10x64. Чтобы посмотреть пример, просто распакуйте zip-файл проекта и щелкайте по порядку кнопки на форме. Скачать Delphi Word Test WordTest.zip
    6 likes
  2. android-** (** - версия АПИ, чем выше цифра, тем больше нового поддерживает обёртка. Обратная совместимость поддерживается.) Выбираете файл по АПИ под которое пишите. По вашему примеру: JList уже определён в файле "Androidapi.JNI.JavaTypes.pas", т.е. нет необходимости подключать стороннюю обёртку. Указываете в uses Androidapi.JNI.JavaTypes и работаете с JList. p.s. Обёртки, которые вы скачали, необходимо проверять, т.к. многие из них сгенерены с ошибками.
    4 likes
  3. 3 likes
  4. Можешь попробовать такой вариант:
    3 likes
  5. клиентскую часть, т.е. непосредственно само приложение - никак. Без доступа к серверу в моем случае оно бесполезно. Сервер может обладать информацией о всех устройствах, которые когда-либо к нему подключались и может блокировать новые, если лимит используемых устройств превышен. Или блокировать конкретные, если они выведены из эксплуатации. Или вообще залочить доступ всем устройствам клиента - по усмотрению. Но это в моем случае, т.к. приложение не общедоступно и не будет выкладываться в AppStore. Ну и "вылечивать" приложение в моем случае смысла нет - достаточно скоро его функционал просто устареет, и крякнутая программа просто станет не актуальной. В общем и целом, если программе требуется подключение к серверу - защиту нужно реализовывать имено на нем. Но от взлома защищаться бессмысленно - когда приложение станет действительно популярным, его все равно поломают. А до тех пор - можно спать спокойно, взломщики даже не посмотрят в вашу сторону.
    3 likes
  6. Если грубо, то примерно вот так: uses Androidapi.JNI.App, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os, Androidapi.JNIBridge; function IntArrayToJArray(const OrigArray: array of Integer): TJavaArray<Integer>; var I: Integer; begin Result := TJavaArray<Integer>.Create(Length(OrigArray)); for I := Low(OrigArray) to High(OrigArray) do Result.Items[I] := OrigArray[I]; end; procedure TForm3.Button1Click(Sender: TObject); var ActivityManager: JActivityManager; List: JList; Iterator: JIterator; Process: JActivityManager_RunningAppProcessInfo; ArrayMemoryInfo: TJavaObjectArray<JDebug_MemoryInfo>; begin ActivityManager := TJActivityManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE)); List := ActivityManager.getRunningAppProcesses; Iterator := List.iterator; while Iterator.hasNext do begin Process := TJActivityManager_RunningAppProcessInfo.Wrap(Iterator.next); ArrayMemoryInfo := ActivityManager.getProcessMemoryInfo(IntArrayToJArray([Process.pid])); Memo1.Lines.Add(JStringToString(Process.processName) + ' ' + ArrayMemoryInfo[0].getTotalSharedDirty.ToString); end; end; Повторюсь, это грубый, но рабочий пример. Рекомендуется доработать его перед использованием в рабочем проекте!
    3 likes
  7. Решил вопрос своими силами. Может кому-то будет полезно. Такая ошибка возникает, если архитектура устройства отличается от разрядности приложения, которое пытаюсь запустить. iPad у меня оказывается 32 битный, приложение запускаю как x64. Переключился в Project Manager'е на 32bit и все запустилось! Вот документация по ошибкам http://docwiki.embarcadero.com/RADStudio/XE8/en/RunIOSDeviceFailedHelpPage
    3 likes
  8. А можно и не выходить из IDE: Ctrl+Shift+F, выбираем Search in directories.
    3 likes
  9. GetActivityManager - что это? такого в АПИ нет... Может вы имели ввиду ActivityManager -> getRunningAppProcesses() ? Если так, то вам необходимо подключить файл Androidapi.JNI.App.pas. Чтобы быстро найти файл, в котором реализован интерфейс/класс/метод из АПИ, можно воспользоваться любой утилитой позволяющей искать текст в файлах. Это может быть FAR, Total Commander и др. (я использую Total Commander)
    3 likes
  10. Утилита написана на JAVA, т.к. у вас уже установлен JRE, то просто скачиваете и запускаете. Более подробно про утилиту можно почитать по ссылке из статьи Улучшенный 9-patch редактор
    3 likes
  11. 3 likes
  12. да, смысл вопроса ускользает если нужно оставить прибор в покое на N мсек, заведите таймер, или сделайте поток, в нем сначала Sleep(N) а потом - запуск следующего шага
    3 likes
  13. мы в чатике обсуждали такое поведение, решается через CopyFromBitmap TakePhoto.zip
    2 likes
  14. 2 likes
  15. "Создать" <> "Активировать". Стиль (Который нужно загрузить в TStyleBook) - создаете сами. Что бы понять как их создавать - можете воспользоваться курсами от @Brovin Yaroslav
    2 likes
  16. когда нужен срочный ответ, пишите в телеграм-чат Fire-Monkey имени Равиля ZuBy frame.7z
    2 likes
  17. Слева вверху студии во время отладки есть Стек вызовов методов. Сверху вниз выбирай нужный метод (2е нажатие ЛК Мыши) и студия будет показывать выбранный метод. Чуть ниже будет таблица Локальных переменных. Поочередно спускайся вниз по колл-стеку и проверяй состояния переменных.
    2 likes
  18. ну вот такая есть штука у меня Это нативные окошки пока только под андроид NativeView.zip
    2 likes
  19. например kami у него софт, связанный с авиацией (куда уж серьезнее?) и написан как раз на FMX под iOS (если не ошибаюсь)
    2 likes
  20. Почему так - скажут знатоки андроида. Емнип, UIThread != MainThread (пока еще) А вообще - посоветую взять из fgx ActivityDialog
    2 likes
  21. Вы подменяете терминологию. Никакое приложение само по себе не является устойчивым к взлому, если оно не содержит средства защиты от этого взлома. На каком бы языке ни было написано. Более того, нужно отличать хак приложения (чтобы оно запустилось вне зависимости от наличия лицензии) и получение данных, с которыми работает это приложение.
    2 likes
  22. Ну как-бы все вроде из названия понятно Debug конфиг есть возможность пользоваться дебагером вес приложения больше из-за доп. файлов (deployment) Release конфиг дебагер не работает вес меньше возможность публикации приложении в магазины платформ
    2 likes
  23. Для таких таблиц лучше ее рисовать на ListView. Пока не видел достойных гридов для Андроид. Пример реализации:
    2 likes
  24. 2 likes
  25. Поиск по форуму сэкономил бы много времени как раз то что вы хотите сделать, даже код есть
    2 likes
  26. Зачем вообще указывать имя компоненту, создаваемому в runtime? Они прекрасно живут и без этого, а для идентификации конкретного - есть куча свойств TagXXX
    2 likes
  27. Вот так подготовили Как добавить "резиновый" SplashScreen в XE7 ? p.s. Старайтесь прикладывать проекты к темам, так будет проще вам помочь.
    2 likes
  28. 2 likes
  29. Спасибо вам за ваше сообщение, оно подало мне отличную идею, которая наконец решила мою проблему. Ещё раз моя проблема: FDConnection не мог подключится к БД на чужом ПК с любово места на HDD. Эта проблема заключалась в том, что в компоненте, кинутой на форму, я указывал статический путь к базе данных. Решение: Удалить путь к файлу в компонете FDConnection и программно указать его, например в методе формы FormShow или FormCreate. Ещё раз всем спасибо за понимание и поддержку! С уважением Владимир test.zip
    2 likes
  30. 2 likes
  31. есть Open/Libre Office и библиотеки для работы с ним
    1 like
  32. да, этот деплой кнопочка Run и Run without debug сначала вызывают компиляцию, затем деплой
    1 like
  33. Сам столкнулся с этой проблемой. Скомпилировалось так: TStyleCollectionItem* ci = StyleBook->CurrentItem; Fmx::Types::TFmxObject *style = ci->Style; StyleObject = style->FindStyleResource(AImageName);
    1 like
  34. Это конечно не кросс платформ, ибо OLE есть только в windows, но очень полезная статья. Те кому нужна только винда, must have!
    1 like
  35. Я компилю apk, затем просто устанавливаю его по сети на разные устройства. Компиляция занимает секунд 10.
    1 like
  36. Не правльно. Вы проектируете фрейм как вам хочется: кидаете на него нужные компоненты, ставите нужные свойства - и т.д.. Когда нужно будет показать фрейм - делаете так: FMyFrame: TMyFrame; ... Begin FMyFrame := TMyFrame.Create(Родитель;); FMyFrame.Parent := Родитель; Когда нужно скрыть его - пишешь FMyFrame.Free;
    1 like
  37. ну это и есть родные окошки андроида, с родными стилями (Dark, Light) в окошках не используются делфи контролы
    1 like
  38. Проверил на своей приставке UHD200 - по FormKeyDown приходят только цифровые клавиши (0-9), стрелки вверх, вниз, влево, вправо - соответствуют кодам на pc клавиатуре, и приходит код от кнопки назад. На этом все. Как использовать способы предложенные Brovin Yaroslav, не понял совсем, буду гуглить в надежде на прояснение. Цветные кнопки пульта игнорируются полностью, и что самое обидное, самая главная кнопка "Ok" тоже никак себя не проявляет. Даже пробовал форму с единственной кнопкой, принудительно в onShow устанавливал ей фокус, но реакции ноль.Смена ControlStyle на Platform тоже не помогает. Хотя все не дельфи приложения адекватно реагируют на кнопку - установил десяток различных приложений, все контролы переключаются нормально. И еще проблема - в fmx под андроид нет визуального подтверждения фокуса на контроле. Сделал приложение которое по таймеру устанавливает фокус нескольким контролам, но на экране никакой разницы нет, все контролы мертвые. Вывод пока неутешительный - писать что то под андроидные тв-приставки в Дельфи можно, но управлять приложениями с штатного пульта можно только переключая в режим мышки, что конечно жуткий ад.
    1 like
  39. такой возможности нет, т.к. (Default) - это константы если не ошибаюсь для Windows - 12, Android - 16, IOS - ... для adnroid программно для ios программно
    1 like
  40. смотрите видео от испанского автора. в предыдущей теме была ссылка там все работает а сервер по рассылке либо свой на базе php либо их много сейчас бэкендов
    1 like
  41. Да, не спорю. Пару версий назад, данный поиск у меня глючил и я окончательно вернулся на Total Commander (он меня ещё ни разу не подводил )
    1 like
  42. Вот это, мне кажется, должно ТС подойти
    1 like
  43. MyControl.Release; Это отложенное удаление, реализованное самой платформой. Надо только не забывать после Release заNil-ить ссылку на объект в массиве. Ну и вместо массива лучше использовать дженериковский список.
    1 like
  44. TGestureManager кинуть на форму связать контрол и TGestureManager через свойство Touch выбрать LongTap в InteractiveGestures в событии OnGesture контрола написать примерно такое if EventInfo.GestureID = igiLongTap then ShowMessage('Long Tap'); а меню это уже совсем другая тема
    1 like
  45. если уж до конца соблюдать стилистику магистра Йоды, то надо говорить примерно так: "в раздел интересующий зайти должен ты, сверху-справа кнопку нужную найдешь".
    1 like
  46. http://www.fmxexpress.com/leaderboards-and-achievements-with-google-play-game-services-in-delphi-xe5-xe6-xe7-firemonkey-on-android/
    1 like
  47. Ссылка: http://blog.rzaripov.kz/2017/01/blog-post.html Автор: Зарипов Равиль @ZuBy Описание: Онлайн-сервисы в помощь разработчику по дизайну
    1 like
  48. Тоже интересовал этот вопрос. Нарыл кучу информации, но в конце концов реализовал этот механизм. Смотрите прикрепленный архивчик - там простенький проект, показывающий как ото сделать. Проверял на Delphi 10 Seattle + OS X El Capitan 10.11.4 OpenWith.zip
    1 like
  49. Блин, че-то даже неловко стало). FPS большой на ПК, а на андройде ~40 фпс. Не знаю с чем это все связано, но просто надо дальше ковырять FMX в сторону того же самого 3D, это должно быть быстрее обычного канваса. За отрисовку отвечает только TEngine2D и его объекты, т.е. если 3D быстрее, переделывать недолго. Можно еще в сторону отрисовки в нескольких потоках смотреть, я о ней всё время думал: что-то типа два потока реденрят в два имеджа, а когда оба готовы, то рендерят один имедж в другой. Я занят не только развитием движка, а еще работой, халтурами и прочими вещами) Но по движку стараюсь делать как минимум коммит в день (Или побольше в выходные) По самой игре... Вот как раз её код не очень. Движок я рефакторил активно последний месяц, поэтому на него немного приятней смотреть) В общем я бы не спешил с переделкой игры, т.к. хоть формат объектов и возможность их создания в SSB реализована, но это всё еще не прикручено и возможно что-то изменится. Сейчас имхо самая лучшая помощь,- это донесение информации о проекте, а лучший способ донесения информации, - это собрать еще какую-нибудь несложную игру и выложить её на маркет) На все вопросы я с радостью отвечу, по мере свободного времени конечно, но также вполне возможны ответы: это еще сыровато, лучше это не делать(делать конечно можно, но возможно придется переделывать) . :-)
    1 like
  50. Вопрос решён. Для воспроизведения/открытия/просмотра аудио/видео встроенными средствами написал такую функцию: void HiddenPlay(String FileName) { _di_JMediaPlayer Player = TJMediaPlayer::JavaClass->init(); Player->setDataSource(StringToJString(FileName)); Player->prepare(); Player->start(); } Для воспроизведения/открытия/просмотра любого файла установленными на устройстве программами такая функция: void PlayMulti(String FileName, String MimeType) { _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW); _di_Jnet_Uri Data = StrToJURI(FileName); Intent->setDataAndType(Data, StringToJString(MimeType)); SharedActivity()->startActivity(Intent); } Вторым аргументом надо передать mime-type файла. Пример вызова: PlayMulti("test.jpg", "image/jpeg");
    1 like
This leaderboard is set to Москва/GMT+03:00