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

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

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

  • Посещение

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

    51

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

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

    Воспроизведение без задержки

    Ну вряд ли найдется метод "более простой", я имел ввиду методы конкретной платформы, к примеру для андроида JAudioTrack или JAudioManager. Посмотрите вот тут http://www.fmxexpress.com/free-game-audio-manager-wrapper-class-in-delphi-xe6-firemonkey-for-android-ios-windows-and-osx/ может вам подойдет, или поищите (даже на этом форуме) JAudioTrack
  2. Евгений Корепов

    Воспроизведение без задержки

    Для начала избавьтесь от создания TMediaPlayer. Правда по приведенному коду неясно создается он каждый раз или используется первый созданный экземпляр. MediaPlayerOK и procedure Play_SoundOK потомки какой то одной формы? Ну и проигрывать звук лучше более простыми методами, хотя в большинстве они платформо-зависимы (к примеру sndPlaySound из Winapi.MMSystem.pas).
  3. Эта бредятина не из 1С случаем? 😉 А раскодировать эту муру, рожденную разумом под тяжелыми наркотиками вот так: Из ваших данных, берем только {#base64:AgFTS2/0iI3BTqDV67a9oKcNbZFRSsNAEIb1UcE7lHm22SSChBBTMFh8sCK2gm+y JEMSSHZLNiYV8QR6BC/hQ0Eo6hW2F9EruEmTNkr3bf75/mH/me/dnfr9LL4eYQyH 4AxmadIrMBMxZycAhqYD9JD5PIhZqISbybBvAQzcg32nsFIR2iMUgobYU0Ym7FpT XJTnU5uQwtIMX8vuSbqiBIBy7jXWc6QBZpXQKmczP6IsxKuEMle+yk/5Jt/lYvki P5bPcn7nIcszmnhRnAQeTacO2eLrzJtw1zi2WkpVnd4w46mr60bbretOvwl2yV3T bJmN1gGv0ce4wKAi19M6YhWY/E/ceE958LBe3Za9BTSn6gIrYibiDVKWpVYeaTwL ialSkNvRxdiPMKX9mImcMh8BSHWmv1934ekX} 1. Сначала удаляем из это строки мусорные непечатаемые знаки, такие как перевод строки (#10 , #13), ну и все другое (может быть и табуляция и просто случайный мусор) (их ОЧЕНЬ любит вставлять 1С везде и всюду) 2. Вырезаем спереди "{#base64 :" и сзади "}" . 3. С оставшейся строкой вам нужно сделать base64 decode. И вот мы на пути к успеху. Почти. Скорее всего вы получите не читаемые бинарные данные. 4. Скорее всего это окажется zip архив. Вам нужно его распаковать. И вот теперь у вас будет то что вам нужно (правда возможно с обилием мусора из не печатаемых символов, но его можно почистить). P.S. да, совсем забыл предупредить - после пункта 2, вам нужно выполнить еще одно : вырезать из начала строки "AgFTS2/0iI3BTqDV67a9oKcN" - это некий мусорный заголовок, всегда одинаковый.
  4. Евгений Корепов

    Реализовать рейтинг

    Вместо рисования звезды в TPath, проще использовать соотвествующий символ юникода. Char($2606) // Не закрашенная звезда Char($2605) // Закрашенная звезда https://unicode-table.com/ru/sets/stars-symbols/ Можно даже для еврейский магазинов сделать рейтинг 😉
  5. Евгений Корепов

    Raise убивает программу для Android

    Просто возьмите это под свой контроль - не используйте встроенный SearchBox, а создайте отдельное поле TEdit, а фильтрацию обрабатывайте руками. TListViewFilterEx = record Category : String; Name : String; Cart : String; end; procedure TFormMain.SearchBoxChangeTracking(Sender: TObject); begin Setting.Filter.Name:=SearchBox.Text; ListViewFilterEx(ListViewAction, Setting.Filter); LoadVisibleListViewItem(ListViewAction); end; procedure TFormMain.ListViewFilterEx(AListView : TListView; AFilter : TListViewFilterEx); begin AListView.Items.FilterEx:= function(X: TListItem): Boolean begin Result:= (AFilter.Category.IsEmpty or TListViewItem(X).Data['Category'].AsString.ToLower.Contains(AFilter.Category.ToLower)) And ((AFilter.Name.IsEmpty or TListViewItem(X).Data['Name'].AsString.ToLower.Contains(AFilter.Name.ToLower)) or (AFilter.Name.IsEmpty or TListViewItem(X).Data['Detail'].AsString.ToLower.Contains(AFilter.Name.ToLower))); end; end; procedure TFormMain.LoadVisibleListViewItem(const AListView : TListView; ATopItemIndex : Integer = -1); Var LTopItemIndex, I : Integer; begin if Setting.Flags.ListViewActionLoaded then begin if ATopItemIndex=-1 then LTopItemIndex:=GetListViewTopItemIndex(AListView) else LTopItemIndex:=ATopItemIndex; for I := LTopItemIndex to LTopItemIndex + LoadVisibleListViewItemCount do if I<=AListView.ItemCount-1 then begin AListView.Adapter.ResetView(AListView.Items.Item[I]); end; end; end; Суффикс Ex в AListView.Items.FilterEx игнорируйте, используйте AListView.Items.Filter. Это я для нормального поиска (по всем полям и Data, а не только по Text) переписывал исходники ListView... С таким кодом возможно у вас будет больше возможностей для перехвата исключения. Ну или игнорирования поиска пока работает скролл ListView.
  6. Если вы прибыли к нам из 1991 года и собираетесь использовать это приложение в прошлом тысячелетии - тогда все нормально. Если же вы наш современник - уберите из приложения и страницы все экзотические кодировки. Только UTF-8, только хардкор! AResponseInfo.ContentEncoding := 'utf-8'; AResponseInfo.ContentType := 'text/html; charset=utf-8'; AResponseInfo.ContentLanguage := 'ru'; AResponseInfo.CharSet := 'utf-8'; При формировании содержимого страницы - формируйте как есть, без перекодирования в экзотику.
  7. procedure TForm1.ListView1DeleteItem(Sender: TObject; AIndex: Integer); Var AMyItemIndex : Integer; begin AMyItemIndex:=(ListView1.Items.Item[AIndex] as TListViewItem).Detail.ToInteger; ... end;
  8. Евгений Корепов

    Сборка приложений под Linux

    Проблему решил. Сам дурак. Прописал в iptables разрешающее правило - все заработало.
  9. Да Z-Order заявлен (общедоступная информация). Но как оно в реальности - разглашать не могу 😞
  10. Вот как то так, на базе штатного примера: Такс, я малость лопухнулся, это пример я уже под карнавал переделал, работать на токио и остальных версиях не будет. Так что я его удалил. Поищите по форуму - уже неоднократно обсуждалась тема.
  11. Евгений Корепов

    Сборка приложений под Linux

    У меня PASserver нормально стартует на CentOS 7, пишет что повесился на порт. Но слушает он только интерфейс 127.0.0.1, на внешние интерфейсы он даже не пытается биндить прослушку порта. Что делать и как дальше жить?
  12. На последних версиях андроида вы должны спрашивать разрешение у пользователя перед операцией требующей прав.
  13. Евгений Корепов

    Рабочее место для IOS разработки

    Установил виртуалку MacOS на свой комп Rysen - вообще без проблем, все работает вроде. Правда пришлось биос перепрошить с версии F1 на F23 (за год gigabyte наклепало не хило прошивок), и с трудом найти где включается виртуализация (So apparently to enable virtualization support, you have to enable SVM. To activate it, click on the MIT tab, then Advanced Frequency Settings and then Advanced Core settings. Even though the manual says it should be enabled by default, it wasn't on my board.). Спасибо гуглю. По поводу телефона - глянун авито, и охренел. В моем маленьком городке с 100к жителей, просто хренова туча объяв о продаже. Не знал что у нас столько дебилов фанатов Apple 😉 iPhone 5s 16гб за 5500р нормально? Я в их модельном ряду полный профан. Подскажите, какие нюансы есть? Оперативки сколько там желательно и еще может что?
  14. Евгений Корепов

    Рабочее место для IOS разработки

    Понял, приму к сведению и попробую. На моих Rysen вроде с виртуализацией проблем не возникало. Надеюсь все заработает.
  15. Евгений Корепов

    Рабочее место для IOS разработки

    Погуглил по фразе "macos vmware amd", выдало кучу решений, вот к примеру https://hackintosher.com/guides/how-to-install-macos-sierra-on-a-ryzen-pc-virtual-machine-vmware/ . Откуда информация о несовместимости проца AMD?
  16. Евгений Корепов

    Рабочее место для IOS разработки

    Значит нужно: 1. Сертификат разработчика. С этим все ясно. 2. Любой телефон с 64 битной ОС. 3. Устройство с MacOS. Тут конечно вопросы есть. Машин с Интелом нет в принципе, железа куча, но везде AMD. Мне кажется проще будет купить Mac mini типа такого https://www.dns-shop.ru/product/9054c969697c3120/nettop-apple-mac-mini-mgem2rua/characteristics/ , потом продать как станет не нужен. Хватит такого комплекта на ближайшие 2-3 года? Не ожидается никаких хитрых изменений? А то Эппл новое правило выкатит и все это превратится в тыкву.
  17. Евгений Корепов

    Рабочее место для IOS разработки

    Присоединяюсь к вопросу. Тоже хочу окучить и яблочные устройства. Было бы замечательно получить советы и инструкции. Особенно в плане минимальных вложений.
  18. Евгений Корепов

    скачать файл

    Вот как то так: uses ......... Androidapi.JNI.JavaTypes, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText; ....... procedure TForm1.FormCreate(Sender: TObject); Var DownloadManager : JObject; begin DownloadManager:=SharedActivityContext.getSystemService(TJContext.JavaClass.DOWNLOAD_SERVICE); if DownloadManager <> nil then begin Используем... end; end; Вот как именно использовать - тут можно голову сломать, может кто и подскажет На java это делается вот так примерно: DownloadManager downloadmanager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); Uri uri = Uri.parse("http://www.example.com/myfile.mp3"); DownloadManager.Request request = new DownloadManager.Request(uri); request.setTitle("My File"); request.setDescription("Downloading"); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); request.setDestinationUri(Uri.parse("file://" + folderName + "/myfile.mp3")); downloadmanager.enqueue(request); Подозреваю что вам придется самостоятельно описать класс (интерфейс) DownloadService.
  19. Евгений Корепов

    Ошибка QuotedStr

    http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.QuotedStr Возможно : "Примечание. При работе с многобайтовыми системами символов ( MBCS) вместо этого используйте AnsiQuotedStr ." ?
  20. Евгений Корепов

    Не работает OverWrite в Deployment

    Или в среде, меню Run, Parameters, поле Parameters - добавьте туда -cleaninstall, при запуске на устройстве будет производиться чистая установка.
  21. Евгений Корепов

    скачать файл

    Ну а в тему - если это винда, то можете попробовать открыть ссылку на файл с помощью ShellExecute, если андроид, то запустить активити как тут https://stackoverflow.com/questions/49200962/delphi-10-2-how-can-i-open-a-url-in-androids-web-browser-from-my-application (вместо TJIntent.JavaClass.ACTION_VIEW можете попробовать использовать другие экшены). В ios не подскажу...
  22. Евгений Корепов

    скачать файл

    Надо отвечать 42 😉 https://ru.wikipedia.org/wiki/Ответ_на_главный_вопрос_жизни,_вселенной_и_всего_такого А автору топика совет - хотите получить ответ, задавайте вопросы правильно и подробно. Какая платформа? Что такое "стандартный загрузчик"? И так далее...
  23. Евгений Корепов

    System.Net.Socket.TSocket

    Сейчас только увидел в тексте " и для Android", сорри. Вы кусок кода отправки/получения покажите, может кто увидит в чем проблема.
  24. Евгений Корепов

    System.Net.Socket.TSocket

    Выдернул из рабочего проекта кусок, надеюсь вам поможет. Процедура SendCommand(Var ASendingData : TSendingData), в блокирующем режиме посылает текст на сервер и получает результат. unit UnitExcavatorWinTCPThread; interface uses classes, SysUtils, System.Types, System.Generics.Collections, System.Win.ScktComp, UnitExcavatorThread, UnitExcavatorTypes; type TExcavatorWinTCPThread = class(TExcavatorThread) protected FClientSocket : TClientSocket; CStream : TWinSocketStream; procedure CreateNetwork; override; procedure DestroyNetwork; override; procedure SendCommand(Var ASendingData : TSendingData); override; public end; implementation procedure TExcavatorWinTCPThread.CreateNetwork; begin FClientSocket:=TClientSocket.Create(Nil); FClientSocket.Host:=FExcavatorInstance.Host; FClientSocket.Port:=FExcavatorInstance.PortTCP; FClientSocket.ClientType:=TClientType.ctBlocking; CStream:=TWinSocketStream.Create(FClientSocket.Socket, FTimeouts.ConnectTimeout); end; procedure TExcavatorWinTCPThread.DestroyNetwork; begin if Assigned(CStream) then FreeAndNil(CStream); if Assigned(FClientSocket) then FreeAndNil(FClientSocket); end; procedure TExcavatorWinTCPThread.SendCommand(Var ASendingData : TSendingData); Var AReaded, ACount : integer; ABuffer : TBytes; ACommand, AStringBuffer : AnsiString; ACommandIdString : String; ADone : Boolean; begin ACommandIdString:='"id":' + ASendingData.CommandId.ToString; ASendingData.Error:=False; ACommand:=AnsiString(ASendingData.Value) + #10; ASendingData.Value:=''; if Not FClientSocket.Active then try FClientSocket.Open; except on E:Exception do begin ASendingData.Error:=True; ASendingData.Value:=E.Message; exit; end; end; if FClientSocket.Active then begin try // Считываем из буфера все что там есть. while CStream.WaitForData(CStream.TimeOut) do AStringBuffer:=FClientSocket.Socket.ReceiveText; except end; try FClientSocket.Socket.SendText(ACommand); except on E:Exception do begin ASendingData.Error:=True; ASendingData.Value:=E.Message; exit; end; end; try ADone:=False; ACount:=0; repeat if CStream.WaitForData(CStream.TimeOut) then ASendingData.Value:=ASendingData.Value + FClientSocket.Socket.ReceiveText; if ASendingData.Value.Contains('"id":1') then break; if ASendingData.Value.Contains(ACommandIdString) then break; Inc(ACount); if ACount > 2 then break; until ADone; except on E:Exception do begin ASendingData.Error:=True; ASendingData.Value:=E.Message; exit; end; end; end else begin ASendingData.Error:=True; ASendingData.Value:='Not connected'; end; end; end.