Ingalime
-
Постов
354 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Активность репутации
-
Ingalime отреагировална ddr 2 в Векторный стилевой класс
Задумался о применении векторных изображений в стилях контролов. На примере TButton, т.е. создать векторный "стилевой" класс по аналогичный с растровым TButtonStyleObject,
где для 4-х визуальных представлений будет использовать не TBitmapLinks, а TPath.
Минусы:
Не будет 9parts, а значит только фиксированное соотношение сторон; Не родное решение (ниже Сомнение№2); Плюсы:
Самый очевидный - один стиль с 4-мя картинками, вместо в много раз(10+) больше картинок под разные scale/разрешений экрана/размеров....(в зависимости от выбронного способа избавления от "мыла" для работы приложения на любых экранах и мониторах с любым разрешением и scale); Меньшая ресурсоёмкость. Будет шустрее работать (как минимум НЕ медленне), что не критично для Windows, но актуально для большей части комьюнити данного форума, разработчиков под мобильные платформы. Только за счет отказа от 9parts, быстродействие отрисовки вырастет. См. реализацию TCustomStyleObject.DoDrawToCanvas -9 частей отрисовываются всегда(9 вызовов Canvas.DrawBitmap(...)), даже если они фактически не используются. Я, к примеру, 9parts использую только у стиля листбокса, который "внутри" комбобокса. В остальных случаях, дефакто - 1 область + 8 областей нулевой площади. При желении, даже у листбокса можно отказаться от 9parts. Время загрузки Стиля- (+/-)10% по сравнению к растровому решению. Сомнения:
Поизучав FMX.Styles.Objects.pas "легкой" реализации, что бы, что-нибудь наследовать и пару строк дописать, я не нашёл. Для меня понятное решение, это полностью скопировать(взять за основу "векторных" стиливых классов) TCustomStyleObject и TButtonStyleObject и править... Это 1500+ строк кода. Зная свой темп работы, я для себя переписывание и отладку оцениваю в 2-е недели работы. А потом выйдет 10.4.3 или если сильно повезет, то переставать работать "векторный" класс будет лишь на каждом втором релизе и... goto п.1 ПРЕДЛАГАЮ ОБСУДИТЬ + И - ТАКОГО РЕШЕНИЯ, РЕАЛИЗАЦИЮ, ЦЕЛЕСООБРАЗНОСТЬ, АЛЬТЕРНАТИВЫ.
-
Ingalime отреагировална qz5 в Как сделать управление в TWebBrowser под Win как на мобильных платформах
Есть еще вариант использовать CEF4Delphi - https://github.com/salvadordf/CEF4Delphi
-
Ingalime отреагировална haword в Как сделать управление в TWebBrowser под Win как на мобильных платформах
на таких постоматах есть листание экрана кнопками такой, метод и использовать.
либо использовать компоненты типа html component library либо thtmlview если vcl и там уже реализовать что надо.
-
Ingalime отреагировална brunnengi в Как сделать управление в TWebBrowser под Win как на мобильных платформах
Будем отталкиваться от мысли что обычные браузеры из под винды тоже через Tap не пашут.
У вас стоит инфомат. Если у вас там просто текст и кликане по элементам не требуется, а просто листают вниз текст, то можно сохранить как картинку или pdf и положить в vertdscroll. А уже потом обрабатывать самому tap и свайпы.
Но в целом, вообще, эта работа, больше по части фронтовика, т.е. фронтенд разраба. Ему ничто не мешает сделать ветку сайта с JS кодом который запрещает выделение текста на странице, а сролл делать либо по клику какой нить круглой кнопки внизу по центру странице или обработать зажатие ЛКМ, свайп вверх или вниз и отпускание.
Однако на моей практике при работе с терминалами и инфоматами, лучше писать именно ПО, а не грузить в браузер свою страницу. А если уж горит через веб браузер, то надо саму страницу адоптировать всё таки, так как даже всё сделать как вы хотите, то тыкать портянки текста вниз и читать никто не будет. Максимум пару экранов в сторону отлистают и всё и интереса больше нет.
Но повторюсь что ПО, exe файл куда лучше пашет. Получаете с сервера разметку текста, картинки спокойно отображаете у себя. В FMX это вообще задачка три-семь дней, если речь именно о инфомате.
-
Ingalime отреагировална krapotkin в В DataSnap TClientDataSet установка фильтра
Можно воспользоваться OnFilterRecord
там все ручное, под контролем
-
Ingalime отреагировална krapotkin в Как сделать управление в TWebBrowser под Win как на мобильных платформах
prerequisite
/priːˈrɛkwɪzɪt/ noun plural noun: prerequisites a thing that is required as a prior condition for something else to happen or exist. "sponsorship is not a prerequisite for any of our courses" системные требования по-местному -
Ingalime отреагировална krapotkin в Как сделать управление в TWebBrowser под Win как на мобильных платформах
хм. а ведь в каждом браузере есть встроенный режим "смартфон" в панели разработчика
-
Ingalime отреагировална Tumaso в Создание HTTP сервера
Почему?)
Я делал в виде демона для ubuntu с использованием indy + mysql + json. Работает уже как два года, полет нормальный, ни разу не крешилось
-
Ingalime отреагировална OnePeople в [Android] Воспроизводить аудио
По поведению на различных прошивках я не могу вам ни чего сказать вообще не думаю что это связанно с версией андроида, а связанно с прошивкой вендора.
Выдернул из рабочего проекта, строго не пинать, за корявость)
1.
type {$IFDEF ANDROID} TMyAudioFocusChangeListener = class; {$ENDIF} TForm1 = class(TForm) 2.
private { Private declarations } {$IFDEF ANDROID} afChangeListener: TMyAudioFocusChangeListener; 3.
public procedure onAudioFocusChange(focusChange: Integer); end; TAudioFocusChangeEvent = procedure(focusChange: Integer) of object; TMyAudioFocusChangeListener = class(TJavaLocal, JAudioManager_OnAudioFocusChangeListener) private [weak] FParent : TForm1; FOnAudioFocusChanged: TAudioFocusChangeEvent; public constructor Create(AParent : TForm1); property OnAudioFocusChanged: TAudioFocusChangeEvent read FOnAudioFocusChanged write FOnAudioFocusChanged; Destructor Destroy; Override; procedure onAudioFocusChange(focusChange: Integer); cdecl; end; 4.
constructor TMyAudioFocusChangeListener.Create; begin inherited Create; FParent := AParent; end; destructor TMyAudioFocusChangeListener.Destroy; begin inherited; end; procedure TMyAudioFocusChangeListener.onAudioFocusChange(focusChange: Integer); begin if Assigned(FOnAudioFocusChanged) then begin FOnAudioFocusChanged(focusChange); end; FParent.onAudioFocusChange(focusChange); end; procedure TForm1.onAudioFocusChange(focusChange: Integer); begin Form1.Memo2.Lines.Add('focus change:'+focusChange.ToString); if (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then begin MusicControl.AudioFocus:=false; case MusicControl.MusicType of TMusicType.Music: if MusicControl.Music.MusicState=TMusicState.Play then begin MusicPlayPause; exit; end; TMusicType.Radio: if MusicControl.Radio.MusicState=TMusicState.Play then begin RadioPlayPause; exit; end; end; end; end; 5.
procedure TForm1.GetAudioFocus; begin // {$IFDEF ANDROID} CallinUIThread(procedure var AudioFocusRequest: JAudioFocusRequest; playbackAttributes: JAudioAttributes; afHandler: JHandler; res: integer; begin afChangeListener:=TMyAudioFocusChangeListener.Create(Self); afHandler:= TJHandler.Create; playbackAttributes := TJAudioAttributes_Builder.Create .setUsage(TJAudioAttributes.JavaClass.USAGE_MEDIA) .setContentType(TJAudioAttributes.JavaClass.CONTENT_TYPE_MUSIC) .build(); AudioFocusRequest:=TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create .setAudioAttributes(playbackAttributes) .setAcceptsDelayedFocusGain(true) .setOnAudioFocusChangeListener(afChangeListener, afHandler) .build(); res:=FAudioManager.requestAudioFocus(AudioFocusRequest); if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED') else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then begin MusicControl.AudioFocus:=true; LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED'); end else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED'); end ); {$ENDIF} end; P.S. Для android 8 выше! для поддержки ранешних версий Android нужно немного дописать
-
-
Ingalime отреагировална OnePeople в ListViewItem - Изменение цвета фона зависимости от данных в Dataset
Align и vertAlign ====== center ????
-
Ingalime отреагировална krapotkin в Android SDK - с чем едят и как бороться?
Delphi никакого отношения к вашим SDK/NDK не имеет, она использует то что вы установили/ настроили.
и даже предлагает установить кое-что, с чем точно умеет работать
Я начиная с XE5 просто ставил Android Studio и SDK / NDK, чтобы иметь возможность контролировать что где у меня стоит, и не лазить по папкам с путем длиной 2000 знаков.
Просто без AS нет SDK manager, и настройки делать неудобно.
Потом выбираем те версии, которые нужны. (запоминаем, что там Delphi хотела поставить) и прописываем пути в настройках delphi
К последним версиям это стало работать практически в один клик.
Выбирать, какие устройства видны или нет, тоже делфи ни при чем. Она все делает через ADB. Если ADB не видит девайс, то ни одна другая программа не увидит тоже. Для решения этой проблемы тоже есть тема на форуме, где правится sys - файл с описаниями доступных VendorId / ProductId в стандартном драйвере Googel ADB
-
Ingalime отреагировална CyberStorm в Rad Studio 10.4.2
Вышла новая версия на днях.
Список улучшений: https://blogs.embarcadero.com/announcing-the-availability-of-rad-studio-10-4-2-sydney-release-2/
Это хорошая новость для всех програмистов!
-
Ingalime отреагировална OnePeople в Права на запись
Если в манифесте есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
то все должно работать!
Context.getExternalFilesDir(String) и Context.getExternalCacheDir() в эти каталоги должно и без разршения записывать если API 19 или выше!
-
Ingalime отреагировална OnePeople в Скопировать файл из root директории
У всех, кто запросил разрешение на это;)
-
Ingalime отреагировална Tumaso в Не получается скачать файл по https
Используй TNetHTTPClient вместо инди, проблема с ssl уйдет.
При использовании инди и указании https в URL например в виндах требуется две дополнительные dll-ки (libeay32.dll / ssleay32.dll), для андроида libcrypto.so / libssl.so и т.д. Поэтому проще перейти на TNetHTTPClient
-
-
Ingalime отреагировална #WAMACO в Онлайн-курсы
Если знаете английский, вышла хорошая книга
Delphi GUI Programming with FireMonkey
https://www.packtpub.com/product/delphi-gui-programming-with-firemonkey/9781788624176
Mastering Delphi Video
https://www.packtpub.com/product/mastering-delphi-video/9781788624312
-
Ingalime отреагировална krapotkin в Онлайн-курсы
по первому вопросу все очень просто. к бд мобильное приложение не должно подключаться
делайте веб-сервер, а к нему подключайтесь через THttpClient
2 и 3 ответы вам не понравятся))
камера работает стремно, и никогда не будет работать как в обычных приложениях. но при большом желании можно просто посмотреть в демо-примерах это есть
а NFC и вообще все, чего не хватает, обычно можно прикупить тут https://www.winsoft.sk/products.htm
-
Ingalime отреагировална Slym в TWebBrowser грузит старую страницу
Так себе, отключать кеш... можно разово при запуске
{$IFDEF ANDROID} var NativeBrowser:JWebBrowser; if Supports(WebBrowser,JWebBrowser,NativeBrowser) then NativeBrowser.clearCache(true); {$ENDIF ANDROID}
-
Ingalime отреагировална Vitaldj в Серия статей, как настроить Android, OS X, iOS Simulator, iOS с RAD Studio (Delphi, C++ Builder)
Симулятор не работает, не в курсе, (Я отлаживаю на живом устройстве) вроде не слышал, что его чинили.
-
Ingalime отреагировална juppy в [Google Play] Создать новый выпуск
Приветы!
Если кнопка недоступна, проверьте, есть черновик версии.
Его надо либо выпустить для проверки, либо удалить.
обзор выпусков/панель управления выпусками/выпуски.
Там будет видно. Если есть черновик будет синяя кнопка "Удалить"
-
Ingalime отреагировална krapotkin в Переход 10.3.3 -> 10.4.1
несколько странно выглядит код
response = get(); if (...) then Synchronize(... response := nil;) а если else, то что с response ?
10.4.4 Win64/Win32
тестовый код
procedure TForm1.btn1Click(Sender: TObject); begin ttask.Run( procedure var http: THTTPClient; resp: IHTTPResponse; begin http := THTTPClient.Create; resp := http.Get('http://www.google.com'); TThread.Synchronize(nil, procedure begin m1.Lines.Text := resp.ContentAsString(); end ); http.Free; end ); end; утечек не нашел
если поставить breakpoint на http.free то в отладчике вызовы IntfClear видны. так что не все так однозначно, как любят говорить в некоторых местах)
-
Ingalime отреагировална slav_z в Переход 10.3.3 -> 10.4.1
Переход с Delphi 10.3.3 на версию 10.4.1 вызвало проблемы во всех ОС без исключения.
Начну с простых случаев:
Linux (Ubuntu)
При компиляции вылезла ошибка: ld-linux.exe: error: cannot find -lgcc_s
Помогла установка (с последующим обновлением SDK) на ubuntu: sudo apt install gcc
При компиляции вылезла ошибка: ld-linux.exe: error: cannot find -lz
Помогла установка (с последующим обновлением SDK) на ubuntu: sudo apt install zlib1g-dev
iOS
Приложение при запуске стало занимать 2/3 экрана по высоте (в новом приложении хелловорд все было хорошо).
Для решения проблемы надо добавить следующую строку в "старый" файл info.plist.TemplateiOS.xml
Windows
В приведенном ниже коде перестал освобождаться интерфейс Response. При выходе программа сообщала о не освобожденных объектах (ReportMemoryLeaksOnShutdown:=True)
Вот код (помечена строка которую пришлось добавить для решения проблемы... сломали подсчет ссылок для интерфейсов, а это уже плохо...):
macOS
При деплое вылезло следующее:
[PAClient Error] Error: E0264 Unable to execute '"/usr/bin/codesign" --entitlements "/Users/macbookpro/PAServer/...../Contents/xxxx.entitlements" -s "-" -f "/Users/macbookpro/PAServer/scratch-dir/xxxx.app"' (Error 1)
[PAClient Error] Error: E0264 Failed to parse entitlements: AMFIUnserializeXML: duplicate dictionary key near line 19
Не знаю почему и как, но помогло убрать галочку здесь:
Android
Самые большие проблемы. В двух словах: ошибка при компиляции F2084 Internal Error: URW1237 или G14486 при использовании обобщенных классов (тот же код для других OC компилируется без проблем).
Позже покажу пример кода и как получилось уговорить компилятор.
-
Ingalime отреагировална krapotkin в С++Build 10.3 CE. Win10 и Android. Ведение графика работы.
неправильный вопрос. кто ж вам подскажет, как делать, если это ваше ТЗ.
сначала надо придумать картинку, вам самостоятельно.
можно взять за основу другие программы, посмотреть, как там сделано
а грид заполнить и клики в нем обработать - дело нехитрое
и напрягает наличие "администратора"
в локальной версии никакого администратора нет ессн
а в сетевой - нет связи с БД, надо делать промежуточный веб-сервер или пользоваться готовыми типа Firebase