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

Лидеры

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

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

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


    • Баллы

      5

    • Постов

      738


  2. delphiex

    delphiex

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


    • Баллы

      4

    • Постов

      5


  3. ENERGY

    ENERGY

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


    • Баллы

      2

    • Постов

      568


  4. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      1

    • Постов

      842


Популярный контент

Показан контент с высокой репутацией 07.05.2017 во всех областях

  1. Да, интриган я тот еще. )) Ошибка оказалась банальной - разные форматы и разделители даты и времени. Из-за этого приложение сразу рушилось, ошибка не отображалась почему-то в отличие от других исключений. В англоязычных странах используют формат типа "07/02/2017" и тд. Подлечил приведением формата даты к нужному.
    3 балла
  2. Потому что это служебное поле, за которое объект-владелец не в ответе. Для иного вы можете использовать Image2.AddObject() - в этом случае Image2 будет знать о своих "детях" (Image2.Children в количестве Image2.ChildrenCount) и при самоубийстве покарает и детей. А в случае TagObject он проигнорирует содержащийся там объект и возникнет утечка памяти. Воспринимайте TagObject как средство хранения ссылки на реально существующий в приложении объект, а не как место хранения самого объекта.
    2 балла
  3. Ага, разобрался - все дело в объявлении TagObject как "слабой" ссылки: [Weak] FTagObject: TObject, т.е. присвоение этому полю не увеличивает счетчик ссылок и объект будет жив только в пределах вашей процедуры. Грубо говоря в "слабой" мы храним объект до тех пор, пока он хранится где то еще. Вам НЕОБХОДИМО создавать ГЛОБАЛЬНУЮ структуру для хранения этих объектов. К примеру сохранит картинки в TObjectList (модуль System.Generics.Collections), и после этого уже присваивать их в Image2.TagObject Вот работающий вариант вашего кода: unit copystream; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, System.Generics.Collections; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; SaveBut: TButton; LoadBut: TButton; procedure SaveButClick(Sender: TObject); procedure LoadButClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } FImageStore : TObjectList<TMemoryStream>; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin FImageStore:=TObjectList<TMemoryStream>.Create; end; procedure TForm1.LoadButClick(Sender: TObject); begin if Assigned(Image2.TagObject) then Image2.Bitmap.LoadFromStream(Image2.TagObject as TMemoryStream); end; procedure TForm1.SaveButClick(Sender: TObject); Var LStream : TMemoryStream; begin LStream:=TMemoryStream.Create; FImageStore.Add(LStream); try Image1.Bitmap.SaveToStream(LStream); finally Image2.TagObject:=LStream; end; end; end.
    2 балла
  4. Вот кстати хорошая статья по "слабым" ссылкам в Delphi https://habrahabr.ru/post/282035/
    1 балл
  5. Mars M

    Узнать размер видеопамяти

    Подниму тему. CUDA конечно хорош(а?), но только для nvidia. Наткнулся тут на работу с OpenCL в делфи http://www.delphisources.ru/forum/showthread.php?t=28188 Там по ссылке в первом сообщение в принципе все есть что нужно. Кому оттуда не удобно перезалил все файлы https://yadi.sk/d/t3mPqlJT3HnfiX Вот пример использования https://yadi.sk/d/bmDKXZ0k3Hnfny Проверял на картах nvidia и ati, конечно же карты должны поддерживать OpenCL. Если в MyOpenCL.pas чего то не хватает, можно взять это в CL.pas из GLScene https://sourceforge.net/p/glscene/code/HEAD/tree/trunk/Source/ParallelAPIs/ Я например добавил константу CL_DEVICE_LOCAL_MEM_SIZEэ А можно использовать родные CL.pas и CL_Platform.pas, в первом архиве есть пример использования. В архиве как раз есть рабочий пример вычислений
    1 балл
  6. спасибо за советы, удалось вычислить ошибку построчным трассером в RAD Studio.
    1 балл
  7. ENERGY

    Кнопки у ListVew ItemAppearance

    Есть еще один альтернативный способ доступа к объектам. Вместо AItem.Objects.FindDrawable('TextButton16') можно обращаться по индексам. Это гораздо быстрее. Т.к. не нужно перебирать все объекты и сравнивать их строковые имена. К примеру в моем случае их аж 16, и у каждого есть имя. Каждое строковое имя нужно перебрать и сравнить с искомым. При этом в OnUpdateObjects это может делаться несколько раз на каждый List item. Сделать это можно так: aItem.View.ViewList[x] Напр: aItem.View.ViewList[10].Height := 30; Список можно посмотреть так: В инспекторе объектов, найдите ListView, в нем Item. Выберите его, и в списке свойств нажмите Objects- это и будет полные список объектов. Начинается он с нуля. Отсчитаете нужный, и можно работать с ним. Upd: Также можно изменять объекты TListItem'a по индексу вместо Data['name']. Там тоже используется FindDrawable. Для этого сначала нужно добавить один раз значение через Data для любого из объектов чтобы создать нужны структуры (обычно для первого Object'a ), а затем уже заполнять по индексу остальные Objects в любой последовательности (не обязательно подряд). vItem.Data['T'] := 'Text' // Data['T'] - это текст ListItem, так он стандартно обозначен Дальше уже добавляем текст в объекты через индекс: (vItem.View.Drawables[5] as TListItemText).Text := 'Text 5'; (vItem.View.Drawables[1] as TListItemText).Text := 'Text 2';
    1 балл
  8. Как уже сказали, отладчик вам в помощь. Если из RAD Studio не получится запустить с отладчиком, то попробуйте отловить ошибки через Android Device Monitor (идёт в комплекте с SDK, лежит примерно по такому пути: C:\Android\SDK\tools\monitor.bat).
    1 балл
  9. Вы слишком категоричны. 90% глюков, на которые разработчик отвечает "ну у меня же работает" все-таки связаны с недочетами в коде. Да, в этом недочете принимает участие конфигурация оборудования, установленного ПО, объема ОЗУ и т.д. и т.п. Но именно Вам придется "обходить" эту ситуацию, а не пользователю - менять конфигурацию. И стартом в этом направлении могут послужить рекомендации ENRGY.
    1 балл
  10. Что отладчик пишет? Вы пробовали запускать под отладчиком (F9)? Ставьте точки останова, смотрите куда доходит. Проблема где-то в вашем коде. Отключите все формы кроме главной в dpr (Project > View Source) (вообще по хорошему, так и должно быть по умолчанию, формы создаются только когда нужно). Попробуйте полностью удалить приложение на телефоне, и установить с нуля.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...