Перейти к содержанию
Fire Monkey от А до Я

kami

Пользователи
  • Постов

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

  • Посещение

  • Победитель дней

    41

Весь контент kami

  1. Если не используете LiveBindings - то смысл есть. Главное - не что нового, а что исправили. Посмотрите список багфиксов.
  2. Вполне возможно - это ограничение Android на количество занимаемых системных ресурсов. После активации таймера проверьте его свойство Enabled - если таймер не удалось создать, оно будет False. Но это не отменяет моего предыдущего высказывания - куча таймеров является абсолютно излишней. Это некорректное проектирование приложения.
  3. В первую очередь - это жесть, делать кучу таймеров, занимая ресурсы системы, когда вполне достаточно одного.
  4. И чуть менее смехотворные - за багрепорты сразу с "pull request" - ведь гораздо быстрее принять предлагаемый вариант решения бага, чем думать, а как же можно исправить ошибку.
  5. Так посмотрите в исходниках Indy - вполне возможно, разновидность метода Write, пересылающий Stream, самостоятельно добавляет длину потока.
  6. Не юзайте idCMD, используйте idTCP. Это действительно длина посылки, $0C = 12
  7. Хммм. есть кнопочка "Нравится". А кнопочки "Не нравится" - нету. Жаль. БОльшая часть сообщений в этой теме - просто крик души, но, увы, абсолютно не по адресу. Посему - несмотря на то, что я склонен частично согласиться с некоторыми высказываниями, считаю все эти изливания абсолютно излишними. От Embarcadero буквально недавно висели вакансии - требовались разработчики. Думаю, и сейчас от квалифицированных кадров не откажутся. Хотите изменений - идите собеседуйтесь, принимайтесь к ним на работу и участвуйте в этих изменениях, на деле доказывая правоту своего мнения. А так... с дивана и государством управляется легко и непринужденно. Извините, наболело. Мне тоже не все нравится в текущем положении дел, но Embarcadero, по моему мнению, движется в правильном направлении, причем - имхо, быстрее, чем MS со своим .Net, который только начал движение в сторону кроссплатформенности.
  8. Сделайте отдельным методом и оберните это в хелпер, к примеру. Аналогичного метода вроде как нет, даже TCustomEdit.PasteFromClipboard использует похожий механизм.
  9. Сам не люблю индейцев, но у TidTCPServerSocket до подключений можно достучаться так: procedure THeaderFooterForm.btn2Click(Sender: TObject); var ConnList: TList<TidContext>; i: Integer; begin ConnList:=IdTCPServer1.Contexts.LockList; try for i := 0 to ConnList.Count-1 do ConnList[i].Connection.IOHandler.Write(bla-bla-bla); finally IdTCPServer1.Contexts.UnlockList; end; ...
  10. И не будет. Ведь при работе с TServerSocket вы не пытались отправить данные непосредственно через него? Потому что сам ServerSocket - слушающий, а отправлять нужно через реальные подключения. В TServerSocket - это массив Connections, а что у индейца - смотрите сами. Кроме того - советую обратить внимание на кодировку (если вы работаете с последними версиями Delphi - то скорее всего будет UCS2 - 2 байта на символ, а вот контроллер, наверное, работает с ANSI - 1 байт на символ).
  11. Ну, в качестве костыльного решения могу предложить менять MultiView.DrawerOptions.TouchAreaSize на 0. Это должно убрать появление MultiView при слайде пальцем от левого края экрана. А при активации другой закладки возвращать значение по умолчанию.
  12. Z-order, скорее всего, не поможет - если я не ошибаюсь, то TMapView - это враппер над нативным контролом. А нативный контрол всегда будет поверх FMX-контролов. Что бы там ни выставили. Такая же ситуация с (к примеру) браузером, который тоже никак не хочет уходить под MultiView.
  13. Выглядит криво... (это я не про ответ, а изначальное проектирование ScrollBox)... Неужели нельзя было сделать так, чтобы ScrollBox использовал Padding для выравнивания дочерних компонентов, в том числе и Content? Тогда все выглядело бы нормально - несмотря на то, что у самого Content все Padding`и = 0, сам Content выровнен с использованием значений родителя и визуально отличий нет. Ну или "зеркалить" ScrollBox.Padding в Content.Padding, хотя это кривее будет... да и SetPadding находится в strict private TControl-а... А так получается "свойство есть, даже в инспекторе объектов его видно, но вы его не используйте, потому что оно не работает".
  14. То, что вы сказали форме/любому другому контролу "появись/изменись" не дает моментального эффекта на мобильных платформах. Контрол становится в очередь на перерисовку и "в реале" изменится, емнип, на OnIdle приложения. Вердикт - Sleep - не поможет, а processmrssages нужен после действий с контролом. Т.е. - вместо Sleep.
  15. "вроде как" да. Однако: п.3.1 - при распространении модифицированного кода (исходников) - вы обязаны распространять их под этой лицензией (это не запрещает вам продавать их в соответствии с п.2.1b) п.3.2 - при распространении исполняемых файлов... в данном случае это не актуально, "Covered Software" не компилируется в исполняемые файлы. Хотя - возможно, вы модифицируете примеры, идущие в комплекте. В таком случае вы обязаны уведомить пользователей, как они могут получить (бесплатно, заметьте) исходники модифицированного кода. п.3.3. Если компоненты (в том числе - модифицированные) включаются в состав вашего продукта... вот тут я завис , потому что перевод этого пункта выглядит как "делайте все, что угодно, но с соблюдением требований MPL 2.0 в отношении этих компонентов. На весь продукт выставляйте любую лицензию по своему усмотрению.". Плюс еще в этом пункте косвенно говорится, что исходники компонентов (в том числе - модифицированные) должны быть доступны получателю вашего продукта. Ну вот как-то так...
  16. FireMonkey тут не совсем "причем". "Верстка" приложения под планшет и телефон - отдельная большая задача. Понятно, что можно приложение, скриншот которого представлен, без изменений запустить на телефоне. Но выглядеть это будет... никак не будет То же самое касается и отображения (про возможные различия в коде я промолчу) на различных платформах - сделать так, чтобы приложение следовало гайдлайнам Apple на iOS устройствах и Google на Android ... это не Hello, world сбацать
  17. Классно! А какая версия Delphi используется? А для телефонов адаптировано будет? А когда бета-тестирование?
  18. Спасибо, конечно... Но, насколько я понимаю, автором компонентов является Brovin Yaroslav (или я ошибаюсь?), соответственно - ответ "можете" или "не можете" может поступить только от него В любом случае - я пока обошел это без правки исходников, но получившееся решение мне не нравится...
  19. Добрый день! Подскажите, пожалуйста - могу ли я несколько модифицировать код компонентов для "собственного" использования? Если более конкретно - мне нужно изменить ActivityDialog под iOS, поскольку при его показе и изменении текста вызывается Application.ProcessMessages. В совокупности с асинхронными вызовами (TThread.Queue) это дает крайне нежелательный для меня эффект - метод Hide диалога легко может "случиться" внутри ProcessMessages и диалог останется на экране навечно. К сожалению, в архиве нет упоминания - под какой лицензией преодставляются исходники...
  20. Код в OnKeyDown у вас полностью закомментирован в {} Если не обращать внимания на это, тогда: KeyChar in set - не работает на юникодных версиях, всегда будет возвращать False. Это же касается CharInSet, к сожалению. Вариант с case...of выглядит корректно, раскомментируйте его и используйте. OnKeyUp - уберите, он не нужен. Привожу свой модуль, предназначенный для работы TEdit только в цифровом режиме. У него есть некрасивость - он зависит от свойства Tag поля ввода, в остальном - все хорошо Использование: подключаете в uses нужной формы или фрейма/своего компонента после модуля FMX.Edit. И все. Для Delphi "ничего" не меняется, все изменения проявляются только в run-time. Новый Edit начинает фильтровать данные, если выставлена edit.KeyboardType = NumberPad и ориентируется на Tag: 0: беззнаковые целые 1: целые со знаком 2: дробные без знака 3: дробные со знаком. В алгоритме есть некоторые неточности (можно "извратиться" и поставить не тот символ), но мне хватает. Если это излишне - смотрите реализацию KeyDown unit uCustomEditForNumbers; interface uses System.Classes, FMX.Types, FMX.Edit; type TCustomEditForNumbers = class(FMX.Edit.TEdit) protected procedure KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); override; end; TEdit = class(TCustomEditForNumbers) end; implementation uses System.SysUtils; { TCustomEditForNumbers } procedure TCustomEditForNumbers.KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); var bAllowed: Boolean; s: string; Ch: WideChar; begin if KeyboardType = TVirtualKeyboardType.NumberPad then begin case Tag of 0: // беззнаковые целые bAllowed := (KeyChar >= '0') and (KeyChar <= '9'); 1: // знаковые целые. Надо бы проверять и положение каретки. begin bAllowed := ((KeyChar >= '0') and (KeyChar <= '9')) or // ((KeyChar = '-') and (CaretPosition = 0)); end; 2: begin // беззнаковые Float s := Text; Ch := TFormatSettings.Create.DecimalSeparator; bAllowed := ((KeyChar >= '0') and (KeyChar <= '9')) or // ((KeyChar = Ch) and (Pos(Ch, s) = 0)); end; 3: // знаковые Float begin s := Text; Ch := TFormatSettings.Create.DecimalSeparator; bAllowed := ((KeyChar >= '0') and (KeyChar <= '9')) or // ((KeyChar = '-') and (CaretPosition = 0)) or // ((KeyChar = Ch) and (Pos(Ch, s) = 0)); end; else bAllowed := True; end; if not bAllowed then KeyChar := #0; end; inherited; end; end.
  21. Приведите код из OnKeyDown. Буквально вчера реализовывал TEdit для беззнаковых/знаковых целых/дробных чисел - никаких проблем не было.
  22. Для наследников TFMXObject на мобильных платформах метод Free не работает. Соответственно, не будет работать и FreeAndNil (в переменную запишется nil, но сам объект уничтожен не будет): procedure TObject.Free; begin // under ARC, this method isn't actually called since the compiler translates // the call to be a mere nil assignment to the instance variable, which then calls _InstClear {$IFNDEF AUTOREFCOUNT} if Self <> nil then Destroy; {$ENDIF} end; Остаются DisposeOf и Release, причем второй вариант правильнее, но бывают исключения, связанные с TCaret (не обязательно с показанной клавиатурой). К примеру, с помощью Release можно легко удалить кнопку по нажатию на ней же. DisposeOf скорее всего вызовет AV.
  23. В OnKeyDown проверять и менять KeyChar Key используется только для непечатаемых символов.
  24. Господа, спасибо за участие в обсуждении! Принимая во внимание кучу параметров, я "заморочился" на написание собственной клавиатуры. Проанализировав и продебажив кучу кода FMX, удалось подменить стандартную клавиатуру собственной. На текущий момент концепт готов и работает, но обладает одним недостатком - из-за особенностей работы процедуры RegisterShowVKProc стандартный вызов клавиатуры теряется без возможности восстановления. Посему - я буду реализовывать нужные мне виды + повторять стандартные Ru и Eng, возможно - с некоторыми изменениями. Концепт предназначен для работы только под iOS. Использование: подключаете к проекту модуль из архива... и всё. Кастомная клавиатура теперь будет показываться вместо стандартной во всех контролах, в которых вообще показывается клавиатура. Известные недостатки: 1. Нет анимации появления/скрытия. 2. Не реализовано нажатие кнопки Return (пока не думал, как это делается) 3. Не реагирует на флаги TVirtualKeyboardStates 4. Не уверен в корректном удалении фрейма при завершении приложения. 5. Нет тулбара (не уверен, правда, что он нужен в собственной клавиатуре) Если необходимо - готов дать пояснения по коду. Ввиду того, что я только начинаю работать с FMX, любая критика приветствуется! iOSCustomKeyboard.zip
×
×
  • Создать...