ENERGY

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

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

  • Посещение

  • Days Won

    16

ENERGY last won the day on 21 мая

ENERGY had the most liked content!

1 подписчик

О ENERGY

  • Звание
    Продвинутый пользователь
  1. @RoschinSpb Сетка появляется на всех картинках, без исключения, посмотрите выше, там была оранжевая картинка. Просто на цветных картинках она не сразу "проявляется", а постепенно. Может вы запостите баг? Просто, вы лучше объясните вероятную причину этого явления, т.к. знаете этот компонент и внутренности FMX гораздо лучше меня, а мы поддержим голосами. Да и к вам будет больше доверия, т.к. вы FireMonkey разработчик, возможно баг сразу запуститься в обработку. Картинки портятся только при работе в Design Time - так что это в любом случае касается всех платформ. В уже скомпилированной программе они вроде не портятся, если конечно не были до этого испорчены в design time, но не проверял.
  2. При переключении с соты на соту параметры сети могут меняться. Компонент на это не стабильно реагирует, и может порушить всю программу. Поищите как делать get запрос. Посмотрите проект Равиля: https://github.com/rzaripov1990/ModernListView Здесь есть все что вам надо.
  3. @RoschinSpb Может запостить баг? Или он уже есть? Я кстати думал что про него уже все давно знают.. Просто нет времени.. Между прочим картинка в Timage тоже портится со временем в Design Time.
  4. @Евгений Корепов По поводу функции AnalyzeResponse - у вас просто ставиться флаг неактивности, а что если сразу удалять из базы этот ID ?
  5. А токен который генерится на телефоне, он постоянный? Или его нужно каждый раз при старте приложения записывать в базу?
  6. Вот сейчас кинул новый чистый список, решил добавить иконки только размером 48x48. Начал добавлять, и уже на 3 иконке начала появляться сетка на уже добавленных иконках. Я даже дизайнер ImageList не закрывал. Я приаттачил зип файл с иконками 48x48, возможно кто-то может проверить у себя, возможно этот баг только у меня? Спасибо. new.zip Решение проблемы пока такое: Добавляем картинки в ресурсы, и при старте в OnCreate DataModule загружаем их из ресурсов в ImageList. unit DataModule; interface uses System.SysUtils, System.Classes, FMX.Types, FMX.Controls, System.ImageList, FMX.ImgList, FMX.Graphics, System.Types, FMX.MultiResBitmap, System.UITypes; type TImageListHelper = class helper for TImageList function Add(aBitmap: TBitmap): integer; end; TDataMod = class(TDataModule) StyleBook: TStyleBook; ImageList: TImageList; procedure DataModuleCreate(Sender: TObject); private procedure LoadImagesToImageList; public { Public declarations } end; var gDataMod: TDataMod; implementation {%CLASSGROUP 'FMX.Controls.TControl'} {$R *.dfm} procedure TDataMod.DataModuleCreate(Sender: TObject); begin LoadImagesToImageList; end; // from resource procedure TDataMod.LoadImagesToImageList; var vBmp: TBitmap; i: Integer; procedure AddResourceToImageList(const aName: string); var vRes: TResourceStream; begin vRes := TResourceStream.Create(hInstance, aName, RT_RCDATA); try vBmp.LoadFromStream(vRes); ImageList.Add(vBmp); finally vRes.Free; end; end; begin vBmp := TBitmap.Create; ImageList.BeginUpdate; try for i := 0 to 16 do begin AddResourceToImageList('i' + i.ToString); end; finally vBmp.Free; ImageList.EndUpdate; end; end; function TImageListHelper.Add(aBitmap: TBitmap): integer; const SCALE = 1; var vSource: TCustomSourceItem; vBitmapItem: TCustomBitmapItem; vDest: TCustomDestinationItem; vLayer: TLayer; begin Result := -1; if (aBitmap.Width = 0) or (aBitmap.Height = 0) then exit; // add source bitmap vSource := Source.Add; vSource.MultiResBitmap.TransparentColor := TColorRec.Fuchsia; vSource.MultiResBitmap.SizeKind := TSizeKind.Source; vSource.MultiResBitmap.Width := Round(aBitmap.Width / SCALE); vSource.MultiResBitmap.Height := Round(aBitmap.Height / SCALE); vBitmapItem := vSource.MultiResBitmap.ItemByScale(SCALE, True, True); if vBitmapItem = nil then begin vBitmapItem := vSource.MultiResBitmap.Add; vBitmapItem.Scale := Scale; end; vBitmapItem.Bitmap.Assign(aBitmap); vDest := Destination.Add; vLayer := vDest.Layers.Add; vLayer.SourceRect.Rect := TRectF.Create(TPoint.Zero, vSource.MultiResBitmap.Width, vSource.MultiResBitmap.Height); vLayer.Name := vSource.Name; Result := vDest.Index; end; end.
  7. Вот я сам не знаю. Этот баг меня преследует давно. У меня кстати dpi 150% в системе (в Design time) может с этим связано? А у вас есть такой баг? Delphi Berlin Update 2, все картинки png 24 bit Вот скрин, и точно такая же фигня на релизе. Вот здесь на скрине я только только обновил все картинки на новые, и линии рисуются сразу после добавления картинки на всех других. Чем больше добавляешь (обновляешь Source), тем четче становятся. @RoschinSpb Выручайте пожалуйста, что посоветуете?
  8. Сейчас столкнулся с большой проблемой перед самым релизом для заказчика.. 17 картинок, разного размера. Сейчас в TImageList сетка рисуется постоянно при обновлении Source каждой картинки. C каждым разом становится сетка четче. Если раньше я просто обновлял на новые картинки, и таким образом решал проблему, то сейчас после обновления source картинок сетка остается на многих картинках, причем я даже не закрываю TImageList . Только начинаю замещать одни картинки, на других появляется сетка.. И вот что теперь делать незнаю.. Да кстати картинки портятся и в TImage со временем в Design Time. Сетка означает что картинку много раз масштабируют. Но почему не сохраняют оригинал, это мне не понятно.. Что тут можно придумать? Delphi Berlin Update 2
  9. Всю голову уже сломал. В Android выпадает TCombobox с popup списком, напротив каждого Item стоит RadioButton, Как поменять цвет RadioButton, а также цвет выделения на этом списке? По идее это же ListBox? Я не нашел где это можно поменять. Я уже полностью поменял цвет встроенного png, все поменялось втч и стандартные Radio Button, а цвет Radio Button в раскрытом списке TCombobox без изменений. Где они меняются подскажите пожалуйста?
  10. @RoschinSpb Ну нет же. В не ARC (Auto reference counter), классическом компиляторе (Windows и Mac) Free всегда вызывает деструктор и освобождает память выделенную под класс и его поля. Т.е. если обратиться потом к такому классу произойдет исключение AV. А вот в ARC компиляторах, DisposeOf вызовет деструктор, но память выделенная под класс и его поля, останется занятой, и не освободиться. Т,е. если после DisposeOf обратится к полям класса, не будет исключения AV, но поля уже будут очищены. При этом в деструкторе можно освободить свои данные и уничтожить инкапсулированные классы. Такие объекты называют зомби-объекты - т.к. они остаются висеть в памяти до конца работы программы, и даже если ссылка позже на него уменьшиться до 0, память не освободиться и деструктор не будет вызван повторно. Чтобы узнать находится ли объект в зомби состоянии, есть метод Disposed - это аналог Assign. Повторюсь всем рекомендую статью GunSmoker, там эта тема хорошо освещена.
  11. @Алмаз Амангельды это не то. TPath.GetPublicPath - вернет путь на внешней флешке. Public директория всегда на внешней флешке, если она есть конечно. GetPublicPath вызывает getExternalFilesDirs на Android. https://developer.android.com/reference/android/content/Context.html getExternalFilesDirs(String type) Returns absolute paths to application-specific directories on all shared/external storage devices where the application can place persistent files it owns. И вот еще список Path функций для Delphi.
  12. @dnekrasov Кстати у меня есть привычка, - методы, которые вызываются в отдельном потоке, к их именам обычно добавлю слово Thread. SetLogoThread. Очень рекомендую от путанницы. Ну и если спорить дальше, то SetLogo не будет вызван в отдельном потоке, т.к. название метода уже намекает на GUI, а значит только главный поток, и анонимный поток внутри.
  13. Если так рассуждать, тогда нужно каждое обращение к элементу интерфейса облачать в ForceQueue конструкцию. "А вдруг с другого потока обратятся"? Имхо "не следует множить сущности без необходимости".
  14. Чтобы помигать кнопкой или любым другим контролом, для привлечения внимания я делаю так: Добавить на кнопку TGlowEffect, установить нужный цвет. Внутрь TGlowEffect добавляю TFloatAnimation . В нем выбираю PropertyName = Opacity. Дальше устанавливаю Start и Stop 0 и 1. AutoReverse := true; Loop := true; Duration (0.3) Все. В коде включаем : GlowEffect.Enable := true и FloatAnimation.Enable := true - заставит пульсировать кнопку. Например так: procedure TfrmMain.PulseEMRGButton; begin GlowBtnEMRGNum.Enabled := true; animGlowBtn.Enabled := true; TThread.CreateAnonymousThread(procedure begin Sleep(1250); // general duration TThread.Queue(nil, procedure begin animGlowBtn.Enabled := false; GlowBtnEMRGNum.Enabled := false; end); end).Start; end; Ксати Major переименуйте тему в "Пульсирующая кнопка".
  15. @AliZairov Эта конструкция: end else begin T := TThread.CreateAnonymousThread( procedure begin TThread.Synchronize(TThread.CurrentThread, procedure() begin ListView.Items[id].Bitmap.LoadFromFile(Cache + code + '.png'); end); end); T.start; end; end; равнозначна одной строчке (ее можно заменить:): ListView.Items[id].Bitmap.LoadFromFile(Cache + code + '.png'); TThread.Synchronize - означает "остановить текущий поток, и запустить указанную процедуру в главном (GUI) потоке". Еще один момент except MS.Free; << эта строка не нужна, т.к. код в finally будет выполнен при срабатывании исключения. end; finally HTTP.Free; MS.Free; end; Если вам нужно загасить исключение - то можно сделать пустой блок, без кода. try except end;