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

kami

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

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

  • Посещение

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

    41

Активность репутации

  1. Like
    kami получил реакцию от Andrey Efimov в Нестандартная клавиатура для своего приложения   
    Раз уж пошла такая пьянка - выложу сюда то, что по виртуальной клавиатуре есть у меня на текущий момент (в телеграме уже выложил).
    Поддерживаются операционные системы: iOS, Windows. Оттестировано на 10.1 (Berlin)
    Итак: архив распаковать куда угодно, в проект в uses подключить модули uCommonCustomKeyboard (отвечает за подмену "штатной виртуальной клавиатуры" на свою) и ufrCustomNumpad (отвечает за отображение цифровой клавиатуры).
    Алфавитную, e-mail-овскую и тому подобные виды клавиатур оставляю на ваше усмотрение. Они делаются на основе ufrCustomNumpad, там больше заморочек с красивым размещением кнопок, чем с кодом.
    CustomKeyboards.7z
  2. Like
    kami получил реакцию от mazayhin в Встреча в Питере!   
    Где фотоотчет и краткое содержание? @Vitaldj , @Error
    Телеграм телеграмом, но далеко не все там сидят, да и темы в чате быстро уходят в небытие.
    Срочно зафиксировать здесь для потомков!
  3. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в Встреча в Питере!   
    Где фотоотчет и краткое содержание? @Vitaldj , @Error
    Телеграм телеграмом, но далеко не все там сидят, да и темы в чате быстро уходят в небытие.
    Срочно зафиксировать здесь для потомков!
  4. Like
    kami получил реакцию от Brovin Yaroslav в Встреча в Питере!   
    Завтра!!!
    5 октября, в 19:00, на "Чердаке" (  https://yandex.ru/maps/-/CBUIUKb0PD  Куйбышева 38/40, ближайшее метро - Горьковская  ) (А то сам уже почти забыл   )
  5. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в настройки при чтении с Com порта, Windows   
    COM-порт это потоковая штуковина. Считайте, что с точки зрения компьютера работа с ком-портом это получение / отправка непрерывного потока данных.
    Ни компьютер, ни подключенное устройство не имеют ни малейшего представления о том, что вы ожидаете какой-то конкретный ограниченный по объему набор байт. Они отдают ровно то, что есть в буфере на текущий момент.
    Посему, правильно будет делать так:
    одна часть приложения постоянно что-то читает из порта и добавляет считанное в конец общего буфера.
    другая часть приложения выбирает с начала общего буфера данные до тех пор, пока не поймет, что "вот оно - сообщение полностью прочитано". И после этого считанное удаляет из начала буфера.
  6. Like
    kami получил реакцию от Brovin Yaroslav в Встреча в Питере!   
    Апну тему, пусть в топе повисит, может еще кто подтянется. Все-таки 5 октября уже не за горами.
  7. Like
    kami получил реакцию от Alex7wrt в настройки при чтении с Com порта, Windows   
    COM-порт это потоковая штуковина. Считайте, что с точки зрения компьютера работа с ком-портом это получение / отправка непрерывного потока данных.
    Ни компьютер, ни подключенное устройство не имеют ни малейшего представления о том, что вы ожидаете какой-то конкретный ограниченный по объему набор байт. Они отдают ровно то, что есть в буфере на текущий момент.
    Посему, правильно будет делать так:
    одна часть приложения постоянно что-то читает из порта и добавляет считанное в конец общего буфера.
    другая часть приложения выбирает с начала общего буфера данные до тех пор, пока не поймет, что "вот оно - сообщение полностью прочитано". И после этого считанное удаляет из начала буфера.
  8. Like
    kami получил реакцию от Vitaldj в Встреча в Питере!   
    Апну тему, пусть в топе повисит, может еще кто подтянется. Все-таки 5 октября уже не за горами.
  9. Like
    kami получил реакцию от krapotkin в настройки при чтении с Com порта, Windows   
    COM-порт это потоковая штуковина. Считайте, что с точки зрения компьютера работа с ком-портом это получение / отправка непрерывного потока данных.
    Ни компьютер, ни подключенное устройство не имеют ни малейшего представления о том, что вы ожидаете какой-то конкретный ограниченный по объему набор байт. Они отдают ровно то, что есть в буфере на текущий момент.
    Посему, правильно будет делать так:
    одна часть приложения постоянно что-то читает из порта и добавляет считанное в конец общего буфера.
    другая часть приложения выбирает с начала общего буфера данные до тех пор, пока не поймет, что "вот оно - сообщение полностью прочитано". И после этого считанное удаляет из начала буфера.
  10. Like
    kami получил реакцию от Rusland в Вызов TPopup ломает поведение TWebBrowser   
    Исходный код 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;  
  11. Like
    kami получил реакцию от Alex7wrt в Вызов TPopup ломает поведение TWebBrowser   
    Исходный код 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;  
  12. Like
    kami получил реакцию от enatechno в Вызов TPopup ломает поведение TWebBrowser   
    Исходный код 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;  
  13. Like
    kami получил реакцию от Вадим Смоленский в Вызов TPopup ломает поведение TWebBrowser   
    Исходный код 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;  
  14. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в какие евенты нужно использовать ?   
    Программное изменение обычно используется при инициализации.
    Чаще всего требуется, чтобы "программное изменение" не вызывало 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-а, и в зависимости от него - выполнять нужные действия.
  15. Like
    kami отреагировална Vitaldj в Встреча в Питере!   
    Коллеги, определились с местом. Встреча 5-го октября в "Чердаке" по адресу Куйбышева 38\40 . Начало в 19-00. Подтягивайтесь, кто во сколько сможет.

  16. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в returnkeytype Next не работает переход между контролами   
    if Self.Focused.GetObject is TEdit then траляля не?
  17. Like
    kami получил реакцию от enatechno в returnkeytype Next не работает переход между контролами   
    Нет.
    ReturnKeyType - это всего лишь какая надпись будет на кнопке Enter. Поведение по нажатию на эту кнопку задаете именно вы.
    Система Андроид не знает о том, какой порядок табуляции установлен у ваших контролов, ей это глубоко симметрично. Если переход по Enter необходим - действительно используйте SetFocus, но на всякий случай - оберните его в TThread.ForceQueue
  18. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в returnkeytype Next не работает переход между контролами   
    Нет.
    ReturnKeyType - это всего лишь какая надпись будет на кнопке Enter. Поведение по нажатию на эту кнопку задаете именно вы.
    Система Андроид не знает о том, какой порядок табуляции установлен у ваших контролов, ей это глубоко симметрично. Если переход по Enter необходим - действительно используйте SetFocus, но на всякий случай - оберните его в TThread.ForceQueue
  19. Like
    kami получил реакцию от Anatoliy в Политика конфиденциальности   
    а там не пришли к единому мнению. Но с учетом At present, doing so is not officially supported with Delphi. (это про высокую версию SDK) - лучше (имхо) обойтись targetSdkVersion.
  20. Like
    kami получил реакцию от Anatoliy в SetupAPI есть для билдера. А для делфи что?   
    Use Jedi API: https://sourceforge.net/projects/jedi-apilib/?source=navbar
    да, "старовато", но наиболее полно и правильно.
  21. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в Удаление сложных классов, Android   
    нет, совсем не на раз. Эта задача решается не совсем очевидным способом в том числе и на Windows (раз  два три , и это так - навскидку ). То, что вы не наткнулись на грабли в Windows - это очень хорошо. Вернее, плохо, потому что теперь вы считаете, что так делать можно. И потом возможны вопросы "вот почему раньше получалось, а с вот этим вот компонентом - нет".
    Кросс-платформенные варианты:
    Item.Release; TThread.CreateAnonimousThread(... TThread.Queue(...здесь любой использованный вами ранее код удаления всех компонентов)).Start: или аналог CreateAnonimousThread - TTask.Run
  22. Like
    kami получил реакцию от enatechno в Удаление сложных классов, Android   
    нет, совсем не на раз. Эта задача решается не совсем очевидным способом в том числе и на Windows (раз  два три , и это так - навскидку ). То, что вы не наткнулись на грабли в Windows - это очень хорошо. Вернее, плохо, потому что теперь вы считаете, что так делать можно. И потом возможны вопросы "вот почему раньше получалось, а с вот этим вот компонентом - нет".
    Кросс-платформенные варианты:
    Item.Release; TThread.CreateAnonimousThread(... TThread.Queue(...здесь любой использованный вами ранее код удаления всех компонентов)).Start: или аналог CreateAnonimousThread - TTask.Run
  23. Like
    kami получил реакцию от Andrey Efimov в Удаление сложных классов, Android   
    Как вы считаете, удалять объект из самого этого объекта - это нормально?
  24. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в Define для релиз-версии   
    Вам же дали ссылку на Conditional Defines. Это именно то, что вы спрашивали - что под какой платформой неявно задефайнено.
  25. Like
    kami получил реакцию от RoschinSpb в June FSM (FMX SPb Meeting)   
    небольшой фотоотчет. Будет время - напишу еще и результаты блиц-интервью участников.
    Начало встречи.

    потом было вот это

    ну и эпилог:

    на последнем фото, слева направо (без учета z-order): @kami @Error @Nik @Brovin Yaroslav
×
×
  • Создать...