kami

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

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

  • Посещение

  • Days Won

    28

Все публикации пользователя kami

  1. Дочерние компоненты удалятся, если на них не осталось ссылок.
  2. Слегка запоздалый ответ, но... Выставляешь нужные keyboardtype полям ввода ... и всё. Если нужно анализировать какие-то другие поля - в моей клаве есть метод GetKeyboardTypeForObject, в котором можно провести нужные (не предусмотренные штатным механизмом) манипуляции
  3. Доброго времени суток! Есть необходимость для некоторых TEdit вызывать "собственную" клавиатуру (конкретизирую - исключительно с цифрами, кнопкой Backspase, знаком "-" и Enter. Приложение будет для iPad, а там (к сожалению) клавиатура Numbers&Punctuation не отличается от NumbersOnly). Самостоятельно я "докопался" до того, что подобное в теории возможно при использовании TEdit.ControlType = Platform, тогда в Edit.PresentationProxy.NativeObject будет лежать UITextField и можно ему присвоить "левый" UIView. Тогда, судя по документации Apple https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextField_Class/index.html#//apple_ref/occ/instp/UITextField/inputView этот "левый" UIView будет вызываться вместо стандартной клавиатуры. К сожалению, для Edit.ControlType = Styled нативный контрол не создается, что сводит на нет все мои поиски, т.к. нужны именно стилизованные компоненты Вторая потенциальная возможность, которую я рассматривал - узнать, где и как "глобально" вызывается клавиатура и подменить параметры вызова на свои. Но... во внутренностях всяких вызовов при получении элементом фокуса ввода я, если честно, запутался. Там много всего фигурирует, начиная от TCustomEditModel, заканчивая TFMXViewBase в TTextServiceCocoa.EnterControl. И непонятно, где же собственно вызов самой клавиатуры Есть ли возможность (хотя бы направление) заменить стандартную клавиатуру на собственную, желательно - с сохранением при этом событий OnKeyboardShow / Hide и с использованием стилизованных компонентов ? Конфигурация: Delphi XE7 upd1, iPad, iOS 8.2
  4. Раз уж пошла такая пьянка - выложу сюда то, что по виртуальной клавиатуре есть у меня на текущий момент (в телеграме уже выложил). Поддерживаются операционные системы: iOS, Windows. Оттестировано на 10.1 (Berlin) Итак: архив распаковать куда угодно, в проект в uses подключить модули uCommonCustomKeyboard (отвечает за подмену "штатной виртуальной клавиатуры" на свою) и ufrCustomNumpad (отвечает за отображение цифровой клавиатуры). Алфавитную, e-mail-овскую и тому подобные виды клавиатур оставляю на ваше усмотрение. Они делаются на основе ufrCustomNumpad, там больше заморочек с красивым размещением кнопок, чем с кодом. CustomKeyboards.7z
  5. Your code can be replaced with: var Stream: TStream; begin Stream:=TMemoryStream.Create; try SourceBitmap.SaveToStream(Stream); Stream.Seek(0, soBeginning); NewBitmap.LoadFromStream(Stream); finally Stream.Free; end; end;
  6. NewBitmap.Assign(SourceBitmap); or NewBitmap.CopyFromBitmap(SourceBitmap);
  7. Где фотоотчет и краткое содержание? @Vitaldj , @Error Телеграм телеграмом, но далеко не все там сидят, да и темы в чате быстро уходят в небытие. Срочно зафиксировать здесь для потомков!
  8. Завтра!!! 5 октября, в 19:00, на "Чердаке" ( https://yandex.ru/maps/-/CBUIUKb0PD Куйбышева 38/40, ближайшее метро - Горьковская ) (А то сам уже почти забыл )
  9. Не забываем выставлять Parent у объектов. Не уверен, а копаться лень. Вариантов "правильной" очистки в FMX несколько, например: for i:=lbCells.Count-1 downto 0 do lbCells.ItemByIndex(i).Release;
  10. Этот компонент - контейнер из сетки "панелек", Опять-таки, на каждую из этих панелек можно накидать чего-нибудь.
  11. для начала можно использовать TListBox. он попроще в понимании и подходит для небольших объемов информации. На объемах от двух экранов и более начинает тормозить, там уже нужен ListView, у которого совсем другой подход. Вкратце: у TListBox есть элементы, которые (если проводить аналогию с vcl) - просто панельки. На эти "панельки" можно накидать любые компоненты и, выставляя их свойства (начиная от текста и заканчивая выравниванием и стилем), уже регулировать отображение.
  12. Нет. FMX - совсем другой фреймворк, его нельзя сравнивать с привычным вам VCL.
  13. COM-порт это потоковая штуковина. Считайте, что с точки зрения компьютера работа с ком-портом это получение / отправка непрерывного потока данных. Ни компьютер, ни подключенное устройство не имеют ни малейшего представления о том, что вы ожидаете какой-то конкретный ограниченный по объему набор байт. Они отдают ровно то, что есть в буфере на текущий момент. Посему, правильно будет делать так: одна часть приложения постоянно что-то читает из порта и добавляет считанное в конец общего буфера. другая часть приложения выбирает с начала общего буфера данные до тех пор, пока не поймет, что "вот оно - сообщение полностью прочитано". И после этого считанное удаляет из начала буфера.
  14. Апну тему, пусть в топе повисит, может еще кто подтянется. Все-таки 5 октября уже не за горами.
  15. windows

    Код, который привел Равиль - не самый лучший (заточен на частный конкретный случай), не стоит его использовать.
  16. windows

    Исходный код TCustomWebBrowser.FormHandleCreated исправлен? На всякий случай - привожу сам код исправления. Файл FMX.WebBrowser.pas необходимо скопировать из исходников студии себе в проект, положив его рядом с dpr. И уже в нем сделать метод FormHandleCreated следующего вида (часть проверок 100% лишняя, но когда менял - подумал "пусть будет"): procedure TCustomWebBrowser.FormHandleCreated(const Sender: TObject; const Msg: TMessage); var WBService: IFMXWBService; begin if not Assigned(Self) then Exit; if not Assigned(Self.Root) then Exit; if Sender <> Self.Root.GetObject then Exit; if not(csDesigning in ComponentState) and TPlatformServices.Current.SupportsPlatformService(IFMXWBService, WBService) then // if not Assigned(FWeb) then begin if FWeb <> nil then WBService.DestroyWebBrowser(FWeb); FWeb := nil; // possibly, this not needed... FWeb := WBService.CreateWebBrowser; FWeb.SetWebBrowserControl(Self); FWeb.UpdateContentFromControl; FWeb.URL := FURL; FWeb.Navigate; end; end;
  17. Программное изменение обычно используется при инициализации. Чаще всего требуется, чтобы "программное изменение" не вызывало onChange и что-либо в этом духе. Это просто не нужно, поскольку вы и так знаете, что вот в этот момент времени значение меняется. Посему - срабатывание события отключают. Например, так: var OldOnChange: TNotifyEvent; begin OldOnChange:=myContol.OnChange; try myControl.OnChange:=nil; // вырубили обработчик события myControl.чего-то-там; // делаем то, что потенциально может вызвать onChange finally myControl.OnChange:=OldOnChange; // восстановили его end; end; Если после подобных манипуляций нужно вызвать "штатный" обработчик - в коде можно это сделать, например, так: OldOnChange(myControl); // и вот здесь, если все-таки требуется что-то различать, стоит использовать, например, Nil в качестве Sender-а И в самом обработчике уже проверять Sender-а, и в зависимости от него - выполнять нужные действия.
  18. Нет. ReturnKeyType - это всего лишь какая надпись будет на кнопке Enter. Поведение по нажатию на эту кнопку задаете именно вы. Система Андроид не знает о том, какой порядок табуляции установлен у ваших контролов, ей это глубоко симметрично. Если переход по Enter необходим - действительно используйте SetFocus, но на всякий случай - оберните его в TThread.ForceQueue
  19. Сложно загадывать, далеко еще до этой даты. Но я за! Пы.Сы. Место нужно с вишневым пивом
  20. а там не пришли к единому мнению. Но с учетом At present, doing so is not officially supported with Delphi. (это про высокую версию SDK) - лучше (имхо) обойтись targetSdkVersion.
  21. Use Jedi API: https://sourceforge.net/projects/jedi-apilib/?source=navbar да, "старовато", но наиболее полно и правильно.
  22. С учетом того, что все элементы уже в массиве (кстати, почему в массиве, а не в TObjectList<T>?) - почему бы не обратиться так: myArrayOfItems[1].Visible:=False; ?
  23. Значит, после прочтения не были сделаны выводы из числа тех, которые я расписал. Это утверждение. Хм... даже после объяснений из (1.а) - (2) ?