Перейти к содержанию
Fire Monkey от А до Я

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

Пользователи
  • Постов

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

  • Посещение

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

    100

Активность репутации

  1. Thanks
    Евгений Корепов получил реакцию от Vladimir Gaivoronsky в Ввод числа - самый простой способ фильтрации   
    Посмотрел на код и решил еще на пару строк сократить, совместил проверку на "пусто" и минус в одном условии
    procedure TFormMain.Edit1ChangeTracking(Sender: TObject); Var FEdit : TEdit; FFloat : Single; begin If Not (Sender is TEdit) Then // Защитимся от не выспавшегося самого себя Exit; FEdit:=(Sender as TEdit); // Для удобства... FEdit.Text:=FEdit.Text.Replace(' ',''); // Убираем случайные пробелы if (FEdit.Text.IsEmpty) or (FEdit.Text.Equals('-')) then // Если пусто (ничего не введено или все удалено) или только минус, ничего не делаем Exit; FEdit.Text:=FEdit.Text.Replace('.',','); // Заменяйм точку запятой if FEdit.Text.Equals(',') then // Если введен разделитель, добавляем перед ним ноль для красоты (не обязательно) begin FEdit.Text:='0,'; FEdit.CaretPosition:=FEdit.CaretPosition+1; // без этого курсор останется между нулём и запятой end; if TryStrToFloat(FEdit.Text,FFloat) Then // Пробуем преобразовать в число FEdit.TagString:=FEdit.Text // Если удалось, сохраняем в временном хранилище Else FEdit.Text:=FEdit.TagString; // Если не удалось, восстанавливаем из временного хранилища end;
  2. Like
    Евгений Корепов получил реакцию от AngryOwl в IdTCPClient, IdTCPServer и соеденение   
    Тут все просто - нужно ждать. Ваш код работает корректно только в идеальных условиях. Но если вторая сторона не ответила мгновенно, то вы уже ничего не получите.
    Перед отправкой/получением вам надо проверить наличие соединения функцией FTCPClient.IOHandler.CheckForDisconnect()  - при отсутствии соединения она сгенерит исключение:
    try FTCPClient.IOHandler.CheckForDisconnect(); except on E: EIdException do begin LogError('TUTM5StreamProtocol.Run CheckForDisconnect ERROR ' + E.Message); Reconnect(); end; end; Читать с ожиданием данных можно несколькими способами:
    1. Задавать FTCPClient.IOHandler.ReadTimeout в надежде что в отведенное время что то придет.
    2. Использовать FTCPClient.IOHandler.ReadLnWait() для чтения строки.
    3. Или обрабатывать проверять наличие данных и читать по мере их поступления:
    if FTCPClient.IOHandler.CheckForDataOnSource(FConnectParams.Timeouts.TCPReadTimeout) then читаем....  
  3. Like
    Евгений Корепов отреагировална GASCHE в Создать класс с параметром и без   
    А так не пробовали?
    constructor TMyClass.Create(pos: String = '');  
  4. Like
    Евгений Корепов получил реакцию от Tumaso в Компонент/библиотека для работы с bzip2   
    Вы ошибаетесь. TZipFile отлично работает с TStream и остальными TMemoryStream, TFileStream и т.д.
    Вот пример:
    uses System.Zip; .... procedure TForm1.Test(); var FZip : TZipFile; AArchiveStream : TStream; AFileStreamSource : TStream; ADecompressionStream, AFileStreamDest : TStream; ALocalHeader : TZipHeader; AArchivePath, AFileSourcePath, AFileName : String; begin AArchivePath := 'D:\0\005\test.zip'; AFileSourcePath := 'D:\0\005\test.txt'; AFileName := TPath.GetFileName(AFileSourcePath); // Добавляем в архив AFileStreamSource := TFileStream.Create('D:\0\005\test.txt', fmOpenRead); AArchiveStream := TFileStream.Create(AArchivePath, fmCreate); FZip := TZipFile.Create; FZip.Open(AArchiveStream, TZipMode.zmWrite); FZip.Add(AFileStreamSource, AFileName, TZipCompression.zcDeflate); FZip.Close; FZip.Free; AArchiveStream.Free; // распаковываем из архива FZip := TZipFile.Create; AArchiveStream := TFileStream.Create(AArchivePath, fmOpenRead or fmShareDenyNone); FZip.Open(AArchiveStream, TZipMode.zmRead); FZip.Read(AFileName, ADecompressionStream, ALocalHeader); AFileStreamDest := TFileStream.Create('D:\0\005\test_dest.txt', fmCreate); AFileStreamDest.CopyFrom(ADecompressionStream, ADecompressionStream.Size); AFileStreamDest.Free; ADecompressionStream.Free; FZip.Close; FZip.Free; AArchiveStream.Free; end; В примере берем файл D:\0\005\test.txt и архивируем его в архив 'D:\0\005\test.zip. Потом достаем из этого архива файл test.txt и сохраняем как D:\0\005\test_dest.txt. Все через потоки. Код написан на коленке, при использовании в реальной задаче вам нужно добавить критические секции и обработчики try finally.
    Кстати вы можете использовать и сжатие BZIP2. В данном примере замените TZipCompression.zcDeflate на TZipCompression.zcBZIP2, ну и самое интересное для разработчика - напишите свою реализацию алгоритма архивирования и зарегистрируйте ее с помощью 
    FZip.RegisterCompressionHandler(TZipCompression.zcBZIP2, .....);  Да, это будет не просто, но опыта наберетесь с лихвой.
  5. Like
    Евгений Корепов отреагировална krapotkin в Подключение из приложения под Андроид к удаленной БД сайта MySQL в С++ Builder XE   
    Тезисно. Прямое подключение разрушается, когда соединение разрывается. А в мобильной сети оно постоянно может отключаться и включаться, переключаться между WiFi и 4G. Установление подключения к БД тогда требуется каждый раз, как происходит такой разрыв. У HTTP запрос проходит разово. Запросили - ответил, или нет. Соединение не требуется. Не прошел запрос, ничего, повторим.
  6. Like
    Евгений Корепов получил реакцию от Andrey Efimov в Узнать размер видеопамяти   
    Разобрался с помощью коллег из https://t.me/fmx_flood, спасибо kami!
    Определение:
    nvmlDeviceGetHandleByPciBusId_v2 : function (const pciBusId : PAnsiChar; pHandle: p_nvmlDevice_t) : nvmlReturn_t; stdcall; Импорт:
    function ProcNV(var Fun: Pointer; const FunName: WideString) : boolean; begin Fun := nil; Fun := GetProcAddress(LibHandleNV, PWideChar(FunName)); Result := Assigned(Fun); end; ... ProcNV(@nvmlDeviceGetHandleByPciBusId_v2, 'nvmlDeviceGetHandleByPciBusId_v2'); Использование:
    В функцию GPUusageNVIDIA надо вместо GPU ID передавать PCI BUS ID.
    PCI BUS ID получаем так
    clStatus := clGetDeviceInfo(PlatformDevices[DevN], CL_DEVICE_PCI_BUS_ID_NV, SizeOf(AValueCardinal), @AValueCardinal, @Returned_Size); if (clStatus = CL_SUCCESS) and (Returned_Size = 4) then ADevicesOpenCL[NumDevicesOpenCL].DevicePCIBusID := AValueCardinal; Ну и получение GPU_Handle :
    var ABusIDText : String; ... ABusIDText := '00000000:' + PCIBusID.ToString.PadLeft(2, '0') + ':00.0'; AnvmlReturn := nvmlDeviceGetHandleByPciBusId_v2(PAnsiChar(AnsiString(ABusIDText)), @GPU_Handle); If AnvmlReturn <> 0 then raise EAbort.Create(''); В nvmlDeviceGetHandleByPciBusId_v2 передается pciBusId, параметр должен быть вида domain:bus:device.function, к примеру '00000000:08:00.0' 
  7. Thanks
    Евгений Корепов получил реакцию от PowerOwl в Выполнение регулярных операций в сервисе - статистика   
    Попробовал AlarmManager. Интервал 30 секунд.
    Запускал сервис следующим образом:
    procedure TFormMain.InitServiceAlarmManager; var Intent: JIntent; PendingIntent: JPendingIntent; ATimerInterval : Integer; begin ATimerInterval:=30; Intent := TJIntent.Create; Intent.setClassName(TAndroidHelper.Context, StringToJString('com.embarcadero.services.ServiceTest090Service')); PendingIntent := TJPendingIntent.JavaClass.getService(TAndroidHelper.Context, 1, Intent, 0); TAndroidHelper.AlarmManager.&setRepeating(TJAlarmManager.JavaClass.RTC_WAKEUP, getTimeAfterInSecs(ATimerInterval), ATimerInterval * 1000, PendingIntent); end; procedure TFormMain.FormCreate(Sender: TObject); begin InitServiceAlarmManager; // FService:=TLocalServiceConnection.Create; // FService.StartService('ServiceTest090Service'); end; function TFormMain.getTimeAfterInSecs(Seconds: Integer): Int64; Var Calendar: JCalendar; begin Calendar := TJCalendar.JavaClass.getInstance; Calendar.add(TJCalendar.JavaClass.SECOND, Seconds); Result := Calendar.getTimeInMillis; end; end. Результат - та же хрень, вид сбоку:
    2017-02-25 21:35:40 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:35:40 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:34:40 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:34:40 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:33:38 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:33:10 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:32:45 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:32:10 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:32:10 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:31:06 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:30:59 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. А тут я заблокировал телефон кнопкой и началось.... 2017-02-25 21:30:06 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:29:36 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:29:06 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:28:36 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:28:06 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:27:36 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:27:06 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:26:36 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:26:07 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:25:36 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. 2017-02-25 21:25:06 195.22.104.13 AlarmManager в сервисе. Запрос раз в 0 сек. Оставлю на ночь, посмотрим что будет....
  8. Thanks
    Евгений Корепов получил реакцию от PowerOwl в Helper для TBitmap - асинхронная загрузка картинки из URL   
    Пока тестировал хелпер в боевом проекте он потихоньку оброс исрпавлениями/улучшениями:
    Загрузка из потока сделана через TBitmapSurface - это позволяет избежать множества глюков. LoadFromStream вынесен из Synchronize (основного потока) в поток HTTPClient - по результатам бенчмарка операция оказалась самая жручая. После исправления интерфейс перестал залипать совсем. Добавлен overload вариант с передачей в процедуру TListItemImage - для использования в TListView и корректной перерисовки подгруженных картинок через AListItemImage.Invalidate. unit BitmapAsyncLoader; interface uses FMX.Graphics, FMX.Surfaces, System.Net.HttpClient, System.Types, System.Classes, FMX.ListView.Types, FMX.ListView.Appearances; type TBitmapAsyncLoader = class helper for TBitmap procedure LoadFromURLAsync(const AUrl : String); overload; procedure LoadFromURLAsync(const AUrl : String; const AListItemImage : TListItemImage); overload; end; implementation var AHTTPClient : THTTPClient; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; ABitmapSurface : TBitmapSurface; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then begin ABitmapSurface:=TBitmapSurface.Create; if TBitmapCodecManager.LoadFromStream(AHTTPResponse.ContentStream, ABitmapSurface, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then TThread.Synchronize(Nil, procedure begin if Assigned(Self)then Assign(ABitmapSurface); ABitmapSurface.Free; end ) else ABitmapSurface.Free; end; end, AURL ); except end; end; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String; const AListItemImage : TListItemImage); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; ABitmapSurface : TBitmapSurface; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then begin ABitmapSurface:=TBitmapSurface.Create; if TBitmapCodecManager.LoadFromStream(AHTTPResponse.ContentStream, ABitmapSurface, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then TThread.Synchronize(Nil, procedure begin if Assigned(Self) and Assigned(AListItemImage) then begin AListItemImage.BeginUpdate; Assign(ABitmapSurface); AListItemImage.Invalidate; AListItemImage.EndUpdate; end; ABitmapSurface.Free; end ) else ABitmapSurface.Free; end; end, AURL ); except end; end; initialization AHTTPClient:=THTTPClient.Create; finalization if Assigned(AHTTPClient) then AHTTPClient.DisposeOf; end. Тестовый проект, на этот раз с ListView (по кнопке добавляется 100 итемов) прилагаю.
    BitmapAsyncLoaderListView.7z
  9. Thanks
    Евгений Корепов получил реакцию от PowerOwl в Helper для TBitmap - асинхронная загрузка картинки из URL   
    Для одного своего проекта сделал, поделюсь, вдруг кому пригодится. Тестировал под Windows и Android.
    Для использования просто добавьте BitmapAsyncLoader в uses, а дальше все просто:
    ImageControl.Bitmap.LoadFromURLAsync('https://bipbap.ru/wp-content/uploads/2017/10/0_8eb56_842bba74_XL-640x400.jpg'); Код юнита хелпера:
    unit BitmapAsyncLoader; interface uses FMX.Graphics, System.Net.HttpClient, System.Types, System.Classes; type TBitmapAsyncLoader = class helper for TBitmap procedure LoadFromUrlAsync(const AUrl : String); end; implementation var AHTTPClient : THTTPClient; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then TThread.Synchronize(Nil, procedure begin try Self.LoadFromStream(AHTTPResponse.ContentStream); except end; end ); end, AURL ); except end; end; initialization AHTTPClient:=THTTPClient.Create; finalization if Assigned(AHTTPClient) then begin AHTTPClient.DisposeOf; end; end. Архив с тестовым проектом прилагаю.
    BitmapAsyncLoader.7z
  10. Like
    Евгений Корепов получил реакцию от Ingalime в Андроид 9 и Интернет   
    На будущее - при создании темы указывайте все исходные данные (как минимум вашу версию среды), что бы люди не давали вам советы, а потом уже узнали советы для какой версии среды они вам нужны.
    Я поставил Берлин и попробовал - ничего не получилось, результат такой же как у вас. Разбираться времени нет.
    Вот вам варианты:
    1. Постарайтесь избавится от http и перейти на https. В наше время почти не возможно найти сайт http, даже самые отсталые  госслужбы перешли на https на своих порталах. Если это ваш сервер, то я могу проконсультировать по способам перевода его на https.
    2. Перейдите на Delphi 10.3.2.
    3. Сделайте на каком нибудь другом сервере прокладку между запросами приложения по https и запросами к вашему серверу по http.
     
  11. Like
    Евгений Корепов отреагировална kami в Проверка наличия прав   
    Похоже, ответ появился:  https://en.delphipraxis.net/topic/2949-zxing-delphi-for-104/?do=findComment&comment=23777
  12. Thanks
    Евгений Корепов получил реакцию от Мирзали Пирмагомедов в FMX 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; сделать, но для наглядности я сделал именно так.
  13. Like
    Евгений Корепов отреагировална Andrey Efimov в Работа с android.hardware.usb.UsbManager   
    Попробуйте так:
    var Device: JUsbDeviceConnection; ... Device := FUsbManager.JavaClass.openDevice();  
    p.s. Учитывайте тот факт, что обёртка могла сгенериться неправильно. Java2Op не всегда отрабатывает как надо, поэтому появляется необходимость проверки и правки результата.
    p.s.2. И вроде как у вас как раз такой случай... Попробуйте вот эту:
    JUsbManagerClass = interface(JObjectClass) ['{1048A6E9-E1B5-4DA5-A168-ED91E8DE5284}'] {class} function _GetACTION_USB_ACCESSORY_ATTACHED: JString; cdecl; {class} function _GetACTION_USB_ACCESSORY_DETACHED: JString; cdecl; {class} function _GetACTION_USB_DEVICE_ATTACHED: JString; cdecl; {class} function _GetACTION_USB_DEVICE_DETACHED: JString; cdecl; {class} function _GetEXTRA_ACCESSORY: JString; cdecl; {class} function _GetEXTRA_DEVICE: JString; cdecl; {class} function _GetEXTRA_PERMISSION_GRANTED: JString; cdecl; {class} property ACTION_USB_ACCESSORY_ATTACHED: JString read _GetACTION_USB_ACCESSORY_ATTACHED; {class} property ACTION_USB_ACCESSORY_DETACHED: JString read _GetACTION_USB_ACCESSORY_DETACHED; {class} property ACTION_USB_DEVICE_ATTACHED: JString read _GetACTION_USB_DEVICE_ATTACHED; {class} property ACTION_USB_DEVICE_DETACHED: JString read _GetACTION_USB_DEVICE_DETACHED; {class} property EXTRA_ACCESSORY: JString read _GetEXTRA_ACCESSORY; {class} property EXTRA_DEVICE: JString read _GetEXTRA_DEVICE; {class} property EXTRA_PERMISSION_GRANTED: JString read _GetEXTRA_PERMISSION_GRANTED; end; [JavaSignature('android/hardware/usb/UsbManager')] JUsbManager = interface(JObject) ['{6F603A25-E816-4012-9B23-054B428A4A75}'] function getAccessoryList: TJavaObjectArray<JUsbAccessory>; cdecl;//Deprecated function getDeviceList: JHashMap; cdecl;//Deprecated function hasPermission(device: JUsbDevice): Boolean; cdecl; overload;//Deprecated function hasPermission(accessory: JUsbAccessory): Boolean; cdecl; overload;//Deprecated function openAccessory(accessory: JUsbAccessory): JParcelFileDescriptor; cdecl;//Deprecated function openDevice(device: JUsbDevice): JUsbDeviceConnection; cdecl;//Deprecated procedure requestPermission(device: JUsbDevice; pi: JPendingIntent); cdecl; overload;//Deprecated procedure requestPermission(accessory: JUsbAccessory; pi: JPendingIntent); cdecl; overload;//Deprecated end; TJUsbManager = class(TJavaGenericImport<JUsbManagerClass, JUsbManager>) end;  
    p.s.3. С правилами создания обёртки можно ознакомиться тут https://delphifmandroid.blogspot.com/2014/07/java.html
    Статья старая, но правила связанные с полями/константами и методами действительны по сей день.
  14. Haha
    Евгений Корепов отреагировална krapotkin в [Android] Воспроизводить аудио   
    в оригинале нет такого слова AApplication
    посмотрите, что реально загрузилось
    обратите внимание, что delphi в 2021 все еще не умеет считать символы если перевод строки #10 а не #13#10 
    поэтому показывает на экране верно, а если что-то автоматически вставить, то промахивается 
    я бы рекомендовал пересохранить ваши файлы с переводом строки #13#10
     
  15. Thanks
    Евгений Корепов получил реакцию от Android в Не вижу опции Linux в Target Platforms   
    Если проект был сохранен в редакции не имеющей лицензии Linux, то вы никак не сможете добавить платформу Linux. Сам работаю дома на профе и у заказчика на энтерпрайзе и бесит эта хрень. Выход - удалите в проекте .dproj файл и откройте его в энтерпрайзе, добавьте платформу, сохраните и скопируйте файл .dproj в отдельную папку. Если проект был изменен и сохранен в профе, заменяйте .dproj на сохраненный.
  16. Like
    Евгений Корепов получил реакцию от Ingalime в Контора ищет FMX разработчика   
    Этот текст гугль находит по многим ресурсам с апреля 2020, думаю они или нашли уже себе разработчика,  или забили на проект )
  17. Like
    Евгений Корепов получил реакцию от Ingalime в FireDAC или UniDAC   
    FireDAC, он из коробки, бесплатно и покрывает 99% всех нужд. И отлично работает.
  18. Like
    Евгений Корепов получил реакцию от Ingalime в Не вижу опции Linux в Target Platforms   
    Если проект был сохранен в редакции не имеющей лицензии Linux, то вы никак не сможете добавить платформу Linux. Сам работаю дома на профе и у заказчика на энтерпрайзе и бесит эта хрень. Выход - удалите в проекте .dproj файл и откройте его в энтерпрайзе, добавьте платформу, сохраните и скопируйте файл .dproj в отдельную папку. Если проект был изменен и сохранен в профе, заменяйте .dproj на сохраненный.
  19. Like
    Евгений Корепов отреагировална slav_z в Разработка кросплатформенных приложений в одном проекте   
    ну как так то? условная компиляция! посмотрите в исходных кодах дельфи... там куча примеров...  КУЧА!!!

     
  20. Like
    Евгений Корепов отреагировална OnePeople в TListView  DynamicAppearance ItemAppearanceObjects.ItemObjects.ObjectsCollection   
    procedure TForm1.ListViewUpdateObjects(const Sender: TObject;
      const AItem: TListViewItem);
    begin
        TListItemText(AItem.Objects.FindDrawable('Detail')).Width:=Ваша ширина;
    end;
  21. Like
    Евгений Корепов отреагировална Ingalime в При публикации приложения на AppleStore вылезает ошибка - В каталог объектов xcode необходимо добавить значок приложения с разрешением 1024*1024 пикселей   
    https://community.idera.com/developer-tools/b/blog/posts/workaround-for-ios-appstore-1024x1024-icon-issue?fbclid=IwAR22IEFqfF7u6jgnL_CDsFOagHAJqItSeKsvG4DUUwPyGDZFB-nHreAxVZM
  22. Like
    Евгений Корепов получил реакцию от Ingalime в Изменить ширину скроллбара   
    Ширина задана в исходных кодах константой.
  23. Like
    Евгений Корепов получил реакцию от Ingalime в данные о железе   
    Выполняете любимую консольную команду выводящую сведения о железе (к примеру lspci -v) и парсите вывод.
  24. Thanks
    Евгений Корепов отреагировална gonzales в поломались ПУШи в 10.4   
    Нашел причину,
    В недрах класса TPushService
    TPushService = class abstract public type TPropPair = TPair<string, string>; TPropArray = TArray<TPropPair>; // commonly used names TServiceNames = record public const GCM = 'gcm'; // deprecated 'Is not available anymore. Please use FCM instead'; // Google cloud messaging FCM = 'fcm'; // Google Firebase cloud messaging APS = 'aps'; // Apple end; Соответственно нужно исправить
    FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM);
    на
    FPushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.FCM);
     
    Все работает
  25. Like
    Евгений Корепов получил реакцию от slav_z в информация о версии консольного приложения   
    https://unix.stackexchange.com/questions/58846/viewing-linux-library-executable-version-info
×
×
  • Создать...