kami
-
Постов
643 -
Зарегистрирован
-
Посещение
-
Победитель дней
41
Активность репутации
-
kami получил реакцию от Andrey Efimov в Нестандартная клавиатура для своего приложения
Раз уж пошла такая пьянка - выложу сюда то, что по виртуальной клавиатуре есть у меня на текущий момент (в телеграме уже выложил).
Поддерживаются операционные системы: iOS, Windows. Оттестировано на 10.1 (Berlin)
Итак: архив распаковать куда угодно, в проект в uses подключить модули uCommonCustomKeyboard (отвечает за подмену "штатной виртуальной клавиатуры" на свою) и ufrCustomNumpad (отвечает за отображение цифровой клавиатуры).
Алфавитную, e-mail-овскую и тому подобные виды клавиатур оставляю на ваше усмотрение. Они делаются на основе ufrCustomNumpad, там больше заморочек с красивым размещением кнопок, чем с кодом.
CustomKeyboards.7z
-
kami получил реакцию от mazayhin в Встреча в Питере!
Где фотоотчет и краткое содержание? @Vitaldj , @Error
Телеграм телеграмом, но далеко не все там сидят, да и темы в чате быстро уходят в небытие.
Срочно зафиксировать здесь для потомков!
-
kami получил реакцию от Равиль Зарипов (ZuBy) в Встреча в Питере!
Где фотоотчет и краткое содержание? @Vitaldj , @Error
Телеграм телеграмом, но далеко не все там сидят, да и темы в чате быстро уходят в небытие.
Срочно зафиксировать здесь для потомков!
-
kami получил реакцию от Brovin Yaroslav в Встреча в Питере!
Завтра!!!
5 октября, в 19:00, на "Чердаке" ( https://yandex.ru/maps/-/CBUIUKb0PD Куйбышева 38/40, ближайшее метро - Горьковская ) (А то сам уже почти забыл )
-
kami получил реакцию от Равиль Зарипов (ZuBy) в настройки при чтении с Com порта, Windows
COM-порт это потоковая штуковина. Считайте, что с точки зрения компьютера работа с ком-портом это получение / отправка непрерывного потока данных.
Ни компьютер, ни подключенное устройство не имеют ни малейшего представления о том, что вы ожидаете какой-то конкретный ограниченный по объему набор байт. Они отдают ровно то, что есть в буфере на текущий момент.
Посему, правильно будет делать так:
одна часть приложения постоянно что-то читает из порта и добавляет считанное в конец общего буфера.
другая часть приложения выбирает с начала общего буфера данные до тех пор, пока не поймет, что "вот оно - сообщение полностью прочитано". И после этого считанное удаляет из начала буфера.
-
kami получил реакцию от Brovin Yaroslav в Встреча в Питере!
Апну тему, пусть в топе повисит, может еще кто подтянется. Все-таки 5 октября уже не за горами.
-
kami получил реакцию от Alex7wrt в настройки при чтении с Com порта, Windows
COM-порт это потоковая штуковина. Считайте, что с точки зрения компьютера работа с ком-портом это получение / отправка непрерывного потока данных.
Ни компьютер, ни подключенное устройство не имеют ни малейшего представления о том, что вы ожидаете какой-то конкретный ограниченный по объему набор байт. Они отдают ровно то, что есть в буфере на текущий момент.
Посему, правильно будет делать так:
одна часть приложения постоянно что-то читает из порта и добавляет считанное в конец общего буфера.
другая часть приложения выбирает с начала общего буфера данные до тех пор, пока не поймет, что "вот оно - сообщение полностью прочитано". И после этого считанное удаляет из начала буфера.
-
kami получил реакцию от Vitaldj в Встреча в Питере!
Апну тему, пусть в топе повисит, может еще кто подтянется. Все-таки 5 октября уже не за горами.
-
kami получил реакцию от krapotkin в настройки при чтении с Com порта, Windows
COM-порт это потоковая штуковина. Считайте, что с точки зрения компьютера работа с ком-портом это получение / отправка непрерывного потока данных.
Ни компьютер, ни подключенное устройство не имеют ни малейшего представления о том, что вы ожидаете какой-то конкретный ограниченный по объему набор байт. Они отдают ровно то, что есть в буфере на текущий момент.
Посему, правильно будет делать так:
одна часть приложения постоянно что-то читает из порта и добавляет считанное в конец общего буфера.
другая часть приложения выбирает с начала общего буфера данные до тех пор, пока не поймет, что "вот оно - сообщение полностью прочитано". И после этого считанное удаляет из начала буфера.
-
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;
-
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;
-
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;
-
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;
-
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-а, и в зависимости от него - выполнять нужные действия.
-
kami отреагировална Vitaldj в Встреча в Питере!
Коллеги, определились с местом. Встреча 5-го октября в "Чердаке" по адресу Куйбышева 38\40 . Начало в 19-00. Подтягивайтесь, кто во сколько сможет.
-
kami получил реакцию от Равиль Зарипов (ZuBy) в returnkeytype Next не работает переход между контролами
if Self.Focused.GetObject is TEdit then траляля не?
-
kami получил реакцию от enatechno в returnkeytype Next не работает переход между контролами
Нет.
ReturnKeyType - это всего лишь какая надпись будет на кнопке Enter. Поведение по нажатию на эту кнопку задаете именно вы.
Система Андроид не знает о том, какой порядок табуляции установлен у ваших контролов, ей это глубоко симметрично. Если переход по Enter необходим - действительно используйте SetFocus, но на всякий случай - оберните его в TThread.ForceQueue
-
kami получил реакцию от Равиль Зарипов (ZuBy) в returnkeytype Next не работает переход между контролами
Нет.
ReturnKeyType - это всего лишь какая надпись будет на кнопке Enter. Поведение по нажатию на эту кнопку задаете именно вы.
Система Андроид не знает о том, какой порядок табуляции установлен у ваших контролов, ей это глубоко симметрично. Если переход по Enter необходим - действительно используйте SetFocus, но на всякий случай - оберните его в TThread.ForceQueue
-
kami получил реакцию от Anatoliy в Политика конфиденциальности
а там не пришли к единому мнению. Но с учетом At present, doing so is not officially supported with Delphi. (это про высокую версию SDK) - лучше (имхо) обойтись targetSdkVersion.
-
kami получил реакцию от Anatoliy в SetupAPI есть для билдера. А для делфи что?
Use Jedi API: https://sourceforge.net/projects/jedi-apilib/?source=navbar
да, "старовато", но наиболее полно и правильно.
-
kami получил реакцию от Равиль Зарипов (ZuBy) в Удаление сложных классов, Android
нет, совсем не на раз. Эта задача решается не совсем очевидным способом в том числе и на Windows (раз два три , и это так - навскидку ). То, что вы не наткнулись на грабли в Windows - это очень хорошо. Вернее, плохо, потому что теперь вы считаете, что так делать можно. И потом возможны вопросы "вот почему раньше получалось, а с вот этим вот компонентом - нет".
Кросс-платформенные варианты:
Item.Release; TThread.CreateAnonimousThread(... TThread.Queue(...здесь любой использованный вами ранее код удаления всех компонентов)).Start: или аналог CreateAnonimousThread - TTask.Run
-
kami получил реакцию от enatechno в Удаление сложных классов, Android
нет, совсем не на раз. Эта задача решается не совсем очевидным способом в том числе и на Windows (раз два три , и это так - навскидку ). То, что вы не наткнулись на грабли в Windows - это очень хорошо. Вернее, плохо, потому что теперь вы считаете, что так делать можно. И потом возможны вопросы "вот почему раньше получалось, а с вот этим вот компонентом - нет".
Кросс-платформенные варианты:
Item.Release; TThread.CreateAnonimousThread(... TThread.Queue(...здесь любой использованный вами ранее код удаления всех компонентов)).Start: или аналог CreateAnonimousThread - TTask.Run
-
kami получил реакцию от Andrey Efimov в Удаление сложных классов, Android
Как вы считаете, удалять объект из самого этого объекта - это нормально?
-
kami получил реакцию от Равиль Зарипов (ZuBy) в Define для релиз-версии
Вам же дали ссылку на Conditional Defines. Это именно то, что вы спрашивали - что под какой платформой неявно задефайнено.
-
kami получил реакцию от RoschinSpb в June FSM (FMX SPb Meeting)
небольшой фотоотчет. Будет время - напишу еще и результаты блиц-интервью участников.
Начало встречи.
потом было вот это
ну и эпилог:
на последнем фото, слева направо (без учета z-order): @kami @Error @Nik @Brovin Yaroslav