Евгений Корепов
-
Постов
738 -
Зарегистрирован
-
Посещение
-
Победитель дней
100
Сообщения, опубликованные Евгений Корепов
-
-
Вопрос решился благодаря компонентам https://www.jvesoft.com/wp/ads-and-in-app-payments/ . Подробности в этой теме
-
По служебной необходимости сижу в Интернете через Чешский forpsi.net , доступа к форму нет, приходится роутить маршрут отдельно для форума, что не удобно.
D:\>tracert fire-monkey.ru Трассировка маршрута к fire-monkey.ru [92.53.96.202] с максимальным числом прыжков 30: 1 76 ms 74 ms 80 ms 10.1.0.1 2 76 ms 75 ms 76 ms 3.211.forpsi.net [80.211.211.3] 3 77 ms 75 ms 76 ms bee-core.cloud-bee-bee.forpsi.net [81.2.192.93] 4 * * * Превышен интервал ожидания для запроса. 5 * * * Превышен интервал ожидания для запроса. 6 * * * Превышен интервал ожидания для запроса. 7 * * * Превышен интервал ожидания для запроса.
-
Понял в чем дело - шаблоны лежат тут \vkrapotkin-vklistview-2389334d1383\Demo\Win32\Debug , а exe файл компилятор создает тут \vkrapotkin-vklistview-2389334d1383\Demo\
В настройках проекта, в Delphi Compiler, Output Direcrory = '', вместо '.\$(Platform)\$(Config)' по умолчанию.
-
48 минут назад, krapotkin сказал:
ненавижу Deploy
опять потерялся файл pattern.json, поэтому не создавался шаблон в целом, и парсер его тоже
приложил. у меня запустилось штатно. проверьте plz
Предлагаю улучшение )
function TVK_LV_BaseAdapter<TDataItem>.AddPatternFromFile( const Filename: string): TVK_LVPattern; begin if Not TFile.Exists(Filename) then raise Exception.Create('Template file not found'); result := TVK_LVPattern.CreateFromFile(Filename); result.LV := LV; Patterns.Add(result); end;
-
-
Вылетает AV на GetValue(ItemSpaces.X), ItemSpaces нигде до этого не инициализируется вроде.
procedure TVK_LVPattern.SetupListView(const LV: TListView); var i: Integer; begin FNowParsing.Clear; LV.ItemSpaces.Left := GetValue(ItemSpaces.X); LV.ItemSpaces.Top := GetValue(ItemSpaces.Y); LV.ItemSpaces.Right := GetValue(ItemSpaces.X + ItemSpaces.W); LV.ItemSpaces.Bottom := GetValue(ItemSpaces.Y + ItemSpaces.H); end;
-
У меня ругается на отсутствие JsonableObject. В x-superobject вроде такого нет. Где взять?
-
3 часа назад, Сергей Сергеев сказал:
спасибо - завтра проверю на работе.. как то не провел параллель между тмемо и браузером..
Там видимо все контролы ControlType Platform подвержены этому глюку. А Браузер - это нативный контрол по умолчанию.
-
1 час назад, Сергей Сергеев сказал:
спасибо за проверку.. и встает вопрос - как с этим жить?
такое впечатление, что клавиатура становится на что то, что определяется как окно ввода, и поэтому появляется, почему не прячется по Done - не понятно..
также, в тексте примера обнаружил event не подключенный никуда ( понятно, что нужно на кейдаун поля адреса), и по кнопке возврат на клаве должен передать фокус на кнопку, что по идее прячет фокус
но этот частный случай не решает проблемы выскакивания клавы при хождении по сайту..
немного улучщил ситуацию так.. на onShouldLoadStartRequest , поставил активацию таймера, который через 100 мс - делает HideKeyBoard. Помогает, но не всегда.. Событие OnShoKeyBoard возникает при появлении фейковой клавы. Как бы понять , что она не нужна и захлопнуть, но все это пляски.. надо в Emb писать глюк - чтобы правили. Возможно это изза нового SDK Ios - в старой, в скомпиленной в 2017 г. версии в webBrowser такого не заметил. Куда заводить БагТрек, подскажите, или заведите, если не сложно..
Я в своем сообщении указал способ решения:
https://quality.embarcadero.com/browse/RSP-25523
Там Dave Nottage написал причину и способ исправления:
Прикладываю архив с исправленным FMX.Platform.iOS.pas - положите в папку с проектом и все заработает нормально (я проверил).
P.S. Несчастный FMX.Platform.iOS.pas изуродовали в Рио бесчеловечно )) Какой то индус прошелся по нему в наркотическом угаре.
-
Да, легко удалось воспроизвести проблему - набрал yandex.ru, нажал Go (открылась страница), на странице нажал ссылку "Картинки" - появилась клавиатура, которая не получает фокуса, не реагирует на тыканье.
Среда 10.3.2, iPhone SE, iOS 12.3.1
Возможно проблема перекликается с https://quality.embarcadero.com/browse/RSP-25523
-
Закиньте сюда тестовый проект, я проверю на своем устройстве.
-
5 часов назад, Aleks Serov сказал:
Нас троке TListViewItem (ListView1.Items.Item).Data['Cost'].AsCurrency вылетает ошибка: Invalid class type cast ((((
где i - переменная цикла перебирающего список
И сделайте лучше как я предложил - отдельно преобразование класса, отдельно получение данных. Тут invalid class type cast скорее ошибка TListViewItem (ListView1.Items.Item), а не AsCurrency.
Вы никак не ускоряете код записывая его одной строкой, но ухудшаете читабельность и усложняете поиск ошибок.
-
43 минуты назад, qz5 сказал:
вероятно потому, что Вы записали Integer, т.е. целое число, а читаете Currency, а это вещественное число
Поддерживаю. Пишите :=50.0
-
40 минут назад, qz5 сказал:
ASum:=ASum + AItem.Data['Cost'].AsCurrency;
Наверное будет работать и так в одну строку: TListViewItem (ListView.Items.Item).Data['Cost'].AsCurrency
Ваш Капитан Очевидность
Да, последняя строчка моего сообщения как раз об этом:
ЦитатаВторую процедуру можно было без AItem : TListViewItem; сделать, но для наглядности я сделал именно так.
-
22 часа назад, Aleks Serov сказал:
Здравствуйте! Вывожу данные в список ListView который состоит из двух колонок: Text1, Text2(DynamicAppearance):
var
MyItem:TListViewItem;begin
MyItem :=Form1.Listview1.Items.Add;
MyItem.Data['Text1']:='Яблоки';//товар
MyItem.Data['Text2']:='100';//ценаMyItem :=Form1.Listview1.Items.Add;
MyItem.Data['Text1']:='Груши';//товар
MyItem.Data['Text2']:='120';//ценаMyItem :=Form1.Listview1.Items.Add;
MyItem.Data['Text1']:='Дыни';//товар
MyItem.Data['Text2']:='80';//ценаend;
Заполнил строки и теперь по нажатию кнопки надо посчитать общую сумму товаров.
В VCL в цикле легко и просто, а вот в FMX нет такого понятия SubItems в ListView и обратиться к нему нельзя (((
Перепробовал все что удалось нагулить, результат нулевой. Как решить вопрос?
Все тоже самое что и VLC, только чуток по другому:
procedure TForm1.FillListView; var AItem : TListViewItem; begin AItem :=Listview.Items.Add; AItem.Data['Text1']:='Яблоки';//товар AItem.Data['Cost']:=100;//цена AItem :=Listview.Items.Add; AItem.Data['Text1']:='Груши';//товар AItem.Data['Cost']:=120;//цена AItem :=Listview.Items.Add; AItem.Data['Text1']:='Дыни';//товар AItem.Data['Cost']:=80;//ценаend; end; procedure TForm1.ProcessingListView; var I : Integer; AItem : TListViewItem; ASum : Currency; begin ASum:=0; for I := 0 to ListView.Items.Count - 1 do begin AItem:=(ListView.Items.Item[I] as TListViewItem); ASum:=ASum + AItem.Data['Cost'].AsCurrency; end; Label1.Text:=CurrToStr(ASum); end;
Обратите внимание - цену присваиваем как число, а не как строку (не за чем лишние преобразования делать)
AItem.Data['Cost']:=120;//цена
Вторую процедуру можно было без AItem : TListViewItem; сделать, но для наглядности я сделал именно так.
-
31 минуту назад, Татьяна сказал:
Есть еще идеи, как заставить Андроид 9 работать с http?
Help me please!
На будущее - при создании темы указывайте все исходные данные (как минимум вашу версию среды), что бы люди не давали вам советы, а потом уже узнали советы для какой версии среды они вам нужны.
Я поставил Берлин и попробовал - ничего не получилось, результат такой же как у вас. Разбираться времени нет.
Вот вам варианты:
1. Постарайтесь избавится от http и перейти на https. В наше время почти не возможно найти сайт http, даже самые отсталые госслужбы перешли на https на своих порталах. Если это ваш сервер, то я могу проконсультировать по способам перевода его на https.
2. Перейдите на Delphi 10.3.2.
3. Сделайте на каком нибудь другом сервере прокладку между запросами приложения по https и запросами к вашему серверу по http.
-
11 минут назад, Татьяна сказал:
Евгений Корепов
Может, это от того, что у вас 10.3, а у меня 10.1 ?
Хм. Вот тут не подскажу. 10.1 лениво ставить. Закиньте суда свой AndroidManifest.template.xml (уже отредактированный). И кстати, попробуйте прогнать его онлайн валидатором xml
-
Я разобрался в чем дело:
Вместо TMapAccess.Write используйте TMapAccess.ReadWrite.
TMapAccess.Write по какой то причине затирает если не все, то некоторые последние изменения канваса. В доке http://docwiki.embarcadero.com/Libraries/Rio/en/FMX.Graphics.TBitmap.Map не нашел упоминания о таком поведении.
-
16 минут назад, Татьяна сказал:
Notepad++ я меняю.
Сейчас удалила строку android:usesCleartextTraffic="true" и успешно скомпилировала apk-файл.
Мне непонятно сообщение:
No resource identifier found for attribute 'usesCleartextTraffic' in package 'android'
Вы где то ошиблись. Или в левой кодировке сохранили файл, или еще что.
На тестовом проекте добавил - все отлично собралось. Вот мой AndroidManifest.template.xml
<?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%" android:resizeableActivity="false" <!-- Вот сюда я добавил строчку --> android:usesCleartextTraffic="true"> <%provider%> <%application-meta-data%> <%uses-libraries%> <%services%> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <%activity%> <%receivers%> </application> </manifest> <!-- END_INCLUDE(manifest) -->
-
К сожалению начиная с Токио, Эмбаркадера почти полностью поломала TBitmap. Его поведение стало неадекватным.
Вместо сохранения можете делать
var BitmapSurface : TBitmapSurface; ... BitmapSurface:=TBitmapSurface.Create; BitmapSurface.Assign(Image1.Bitmap); BitmapSurface.Free;
Эта манипуляция в процедуре сохранения, как раз и помогает от затирания канваса. Почему это работает я не понял.
Не забывайте так же проверять удалось ли заблокировать канвас.
Вот я накидал пример:
procedure TForm1.Button1Click(Sender: TObject); var Bitmap : Tbitmap; BitmapData : TBitmapData; I: integer; J: integer; Distance: integer; Surf: TBitmapSurface; begin Bitmap := Tbitmap.Create; Bitmap.CreateFromFile('D:\2012643.jpg'); if Bitmap.Canvas.BeginScene then try Bitmap.Canvas.Stroke.Color := TAlphaColorRec.Blue; Bitmap.Canvas.DrawEllipse(TRectF.Create(10, 10, 20, 20), 1); finally Bitmap.Canvas.EndScene; end; Surf:=TBitmapSurface.Create; Surf.Assign(Bitmap); Surf.Free; if Bitmap.Map(TMapAccess.Write, BitmapData) then try Distance:=10; for I := 0 to Round(BitmapData.Width / Distance) - 1 do for J := 0 to Bitmap.Height - 1 do begin begin AlphaColorToPixel(TAlphaColorRec.Red, @PAlphaColorArray(BitmapData.Data) [J * (BitmapData.Pitch div PixelFormatBytes[Bitmap.PixelFormat]) + Distance * I], Bitmap.PixelFormat); end; end; finally Bitmap.Unmap(BitmapData); end; Image1.Bitmap.Assign(Bitmap); end;
-
1 час назад, Татьяна сказал:
да, на http. У того сайта нет https. Запрещены начиная с 9-го Андроида?
Вот тут рецепт, в манифест добавьте поля, https://stackoverflow.com/questions/51902629/how-to-allow-all-network-connection-types-http-and-https-in-android-9-pie
-
6 минут назад, Татьяна сказал:
Почему код, который работал на Андроид 7 (проверка, есть ли Интернет; отправка get-запроса), перестал работать в Андроид 9?
Это из-за разрешений? (permissions)
Возможно вы отправляете запрос на http вместо https ? Запросы без шифрования теперь запрещены по умолчанию. Но это можно обойти - тут в нескольких недавних темах это обсуждалось.
-
Вам удалось решить проблему для камеры? Перелопатил весь интернет, но похоже Эмба не озаботилась этим вопросом.
Пока присобачил костыль из говна и палок - в AppEvent определяю что приложение стало не активным TApplicationEvent.WillBecomeInactive, значит вылез диалог спрашивания разрешений, После этого по событию TApplicationEvent.BecameActive (диалог завершен), проверяю что приходит от камеры в FCamera.OnSampleBufferReady - если черный-черный ничего, то можно подумать что разрешение не было дано )))))))) От этого костыля у меня кровь из глаз....
-
На ваш вопрос я не могу дать ответа. Но зачем вам использовать OkHttp? Может достаточно стандартных возможностей?
Где указать ownerBitmap := true (ImageListItemBottomDetail)
в TListView
Опубликовано · Изменено пользователем Евгений Корепов
Смотрите, вот ваш код:
procedure TfmMain.LoadBitmapFromURL(const AURL: string; const AItem: TListViewItem; aBitmap: TBitmap; aSourceBmp: TRectangle); var K: Integer; // Анонимная процедура захватывает локальную переменную, а не обращается к AItem, которой уже может не быть в момент _окончания_ скачивания фотки FHTTPClient : THTTPClient; ResourceStream: TResourceStream; begin
Вы используете асинхронный вызов FHTTPClient.BeginGet , начинает выполнятся HTTP запрос, одновременно процедура LoadBitmapFromURL завершает работу и компилятор уничтожает локальные переменные, включая FHTTPClient. Асинхронные вызовы с получением результат происходят уже после уничтожения FHTTPClient и естественно ничего не работает. Вод виндой работает случайно - из за другой модели управления памятью.
У вас несколько путей:
1. Сделать FHTTPClient глобальным - лучший и простой путь.
2. Создавать поток самостоятельно, использовать в нем FHTTPClient.Get (не асинхронный)
3. И еще куча вариантов....
Посмотрите как реализовано у меня (по первому варианту)