Перейти к содержанию
  • Регистрация

Евгений Корепов

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

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

  • Посещение

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

    84

Весь контент Евгений Корепов

  1. Смотрю в секции Variables можно на лету вычисления делать. Через как арифметика считается (чтоб по исходникам не искать)? просто интересно. И можно ли там использовать динамические параметры? Типа ширины ListView (или итема с учетом отступов)? Было бы вообще прикольно. Я обычно размер картинки как раз вычисляю динамически, в зависимости от ширины (типа 30% от ширины итема). ЗЫ Присмотрелся, вижу itemwidth - видимо это как раз то что мне нужно.
  2. Или получать по http с сервера - тут вообще простор, можно дизайн списка менять на лету ))))
  3. К сожалению тема никакого отношения в Умному дому не имеет. В телеграмме я поднимал тему о реальных технологиях умного дома - датчиках (задымление, протечка, газ, открытие двери/окна, движение), протоколы и технологии соединения всего этого, к примеру ZigBee, ну и работа со всем этим хозяйством. Тема прикольная и интересная. Написал на delphi класс работы в ZigBee шлюзом, нормально опрашиваю все датчики, но запись реализовать не удалось из за отсутствия в delphi библиотек шифрования "из коробки". Наработок куча, но все они времен Delph 7 - абсолютно все используют короткие ANSI строки, и в современных версиях среды результат шифрования/дешифровки может быть какой угодно, но не правильный. Пока все что нужно по быстрому написал на php, там хоть с шифрованием порядок, не надо изобретать велосипед или адаптировать код двадцатилетней давности. Так что теперь могу включать/выключать свет с помощью умной розетки, включать светильник на основном хабе, выбирая яркость и палитру, но на php ))))
  4. Смотрите, вот ваш код: 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. И еще куча вариантов.... Посмотрите как реализовано у меня (по первому варианту)
  5. Вопрос решился благодаря компонентам https://www.jvesoft.com/wp/ads-and-in-app-payments/ . Подробности в этой теме
  6. По служебной необходимости сижу в Интернете через Чешский 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 * * * Превышен интервал ожидания для запроса.
  7. Понял в чем дело - шаблоны лежат тут \vkrapotkin-vklistview-2389334d1383\Demo\Win32\Debug , а exe файл компилятор создает тут \vkrapotkin-vklistview-2389334d1383\Demo\ В настройках проекта, в Delphi Compiler, Output Direcrory = '', вместо '.\$(Platform)\$(Config)' по умолчанию.
  8. Предлагаю улучшение ) 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;
  9. Вылетает 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;
  10. У меня ругается на отсутствие JsonableObject. В x-superobject вроде такого нет. Где взять?
  11. Там видимо все контролы ControlType Platform подвержены этому глюку. А Браузер - это нативный контрол по умолчанию.
  12. Я в своем сообщении указал способ решения: https://quality.embarcadero.com/browse/RSP-25523 Там Dave Nottage написал причину и способ исправления: Прикладываю архив с исправленным FMX.Platform.iOS.pas - положите в папку с проектом и все заработает нормально (я проверил). P.S. Несчастный FMX.Platform.iOS.pas изуродовали в Рио бесчеловечно )) Какой то индус прошелся по нему в наркотическом угаре. FMX.Platform.iOS.pas.7z
  13. Да, легко удалось воспроизвести проблему - набрал yandex.ru, нажал Go (открылась страница), на странице нажал ссылку "Картинки" - появилась клавиатура, которая не получает фокуса, не реагирует на тыканье. Среда 10.3.2, iPhone SE, iOS 12.3.1 Возможно проблема перекликается с https://quality.embarcadero.com/browse/RSP-25523
  14. Закиньте сюда тестовый проект, я проверю на своем устройстве.
  15. И сделайте лучше как я предложил - отдельно преобразование класса, отдельно получение данных. Тут invalid class type cast скорее ошибка TListViewItem (ListView1.Items.Item), а не AsCurrency. Вы никак не ускоряете код записывая его одной строкой, но ухудшаете читабельность и усложняете поиск ошибок.
  16. Да, последняя строчка моего сообщения как раз об этом:
  17. Все тоже самое что и 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; сделать, но для наглядности я сделал именно так.
  18. На будущее - при создании темы указывайте все исходные данные (как минимум вашу версию среды), что бы люди не давали вам советы, а потом уже узнали советы для какой версии среды они вам нужны. Я поставил Берлин и попробовал - ничего не получилось, результат такой же как у вас. Разбираться времени нет. Вот вам варианты: 1. Постарайтесь избавится от http и перейти на https. В наше время почти не возможно найти сайт http, даже самые отсталые госслужбы перешли на https на своих порталах. Если это ваш сервер, то я могу проконсультировать по способам перевода его на https. 2. Перейдите на Delphi 10.3.2. 3. Сделайте на каком нибудь другом сервере прокладку между запросами приложения по https и запросами к вашему серверу по http.
  19. Хм. Вот тут не подскажу. 10.1 лениво ставить. Закиньте суда свой AndroidManifest.template.xml (уже отредактированный). И кстати, попробуйте прогнать его онлайн валидатором xml
  20. Я разобрался в чем дело: Вместо TMapAccess.Write используйте TMapAccess.ReadWrite. TMapAccess.Write по какой то причине затирает если не все, то некоторые последние изменения канваса. В доке http://docwiki.embarcadero.com/Libraries/Rio/en/FMX.Graphics.TBitmap.Map не нашел упоминания о таком поведении.
  21. Вы где то ошиблись. Или в левой кодировке сохранили файл, или еще что. На тестовом проекте добавил - все отлично собралось. Вот мой 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) -->
  22. К сожалению начиная с Токио, Эмбаркадера почти полностью поломала 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;
  23. Вот тут рецепт, в манифест добавьте поля, https://stackoverflow.com/questions/51902629/how-to-allow-all-network-connection-types-http-and-https-in-android-9-pie
×
×
  • Создать...