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

xenon54

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

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

  • Посещение

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

    14

Сообщения, опубликованные xenon54

  1. Под IOS такого нет. Просто так приложение никогда не вываливается. Все вылеты всегда связаны с ошибками пограммиста. Каждый раз когда натыкаюсь на вылет или что-то подобное, после разбора полетов становится понятно, что это не какое-то мистическое поведение, а банальные ошибки или не знание каких-то нюансов.

  2. Создаешь TStringList, сделал дело, добавил строку с сообщением что сделал, записал в файл, сделал еще 1 действие записал в файл TStringList.SaveToFile. Потом когда приложение завалится смотри на чем остановилось последний раз.

  3. Ну естественно они все в памяти висят. Ты создаешь считай объекты типа TBitmap методом LoadFromFile выделяешь память под размеры этой картинки. И пока этот битмап не уничтожен(а пока твой список существует, все битмапы живут), выделенная память под него будет занята. Этот момент уже не единожды обсуждался. Лично мое решение это при скроле листвью тебе нужно определять какие итемы сейчас находятся в области видимости и только для них держать картинки в памяти, т.е. ты должен при скроле динамически подгружать/выгружать картинки.  Если размеры картинок небольшие, то думаю что проблем возникнуть не должно. Так же, если у тебя там картинки больших размеров чем реальные битмапы, то лучше используй не LoadFromFile, а LoadThumbnailFromFile.

  4. Загружая картинку в TBitmap она хранится там именно как PMB и занимают {censored} сколько места. Сам не понимал почему у меня приложение на IOS без конца вылетало, потом глянул сколько памяти уходит при загрузке изображений и {censored}. Много гуглил, но так и не нашел нормального решения этого вопроса. Приходится хранить в памяти только те картинки которые реально нужны здесь и сейчас.

  5. procedure TForm1.Button1Click(Sender: TObject);
    var
      http: TIdHTTP;
      formData: TIdMultipartFormDataStream;
    begin
      http := TidHttp.Create(nil);
      try
        formData := TIdMultipartFormDataStream.Create;
        try
          formData.AddFile('SendFile', 'C:\test.txt', 'text/plain');
          formData.AddFormField('action','upload_file');
          http.Request.ContentType := 'multipart/form-data';
          http.Post('http://test.ru/test.php',formData);
        finally
          formData.Free;
        end;
    
      finally
        http.Free;
      end;
    
    end;
    

    PHP:

    <?	
    $files_uploaded = 1;
    foreach ($_FILES as $key => $value)
       if (move_uploaded_file($_FILES[$key]['tmp_name'], "./uploads/{$files_uploaded}.jpg")) $files_uploaded++;
    

    Папка "uploads" должна быть создана заранее или программно.

  6. Там же есть четкая инструкция по установке:

    D.P.F iOS Native Components ( D.P.F iOSNC )
    -----------------------------------------------

    How to install and use:


    1) Go Tools->Options->Delphi Options->Library and :
    1-1) change Selected Pltaform to 32-bit windows and add X:\DPF.iOS.Native.Components\ in library path
    1-2) Then change Selected Platform to iOSSimulator and add X:\DPF.iOS.Native.Components\ in library path
    1-3) Then change Selected Platform to iOSDevice and add X:\DPF.iOS.Native.Components\ in library path


    2) Important: Add this frameworks in the SDK Manager (see Frameworks.png picture after installing)

    /System/Library/Frameworks/AddressBookUI
    /System/Library/Frameworks/AddressBook
    /System/Library/Frameworks/EventKit
    /System/Library/Frameworks/MessageUI
    /System/Library/Frameworks/AudioToolbox
    /System/Library/Frameworks/MapKit
    /System/Library/Frameworks/Social
    /System/Library/Frameworks/QuickLook
    /System/Library/Frameworks/SystemConfiguration
    /System/Library/Frameworks/MobileCoreServices
    /System/Library/Frameworks/GameKit
    /System/Library/Frameworks/CoreBluetooth
    /System/Library/Frameworks/Accounts
    /System/Library/Frameworks/AdSupport
    /System/Library/Frameworks/ExternalAccessory
    /System/Library/Frameworks/iAd (No need in XE7 and later)
    /System/Library/Frameworks/StoreKit (No need in XE7 and later)

    Tools -> Options -> SDK Manager -> Scroll down remote paths listview ->Go Frameworks section -> Select one of framework item (e.g: select /System/Library/Frameworks/UIKit) -> click Add the new path item

    and Lib(s)

    /usr/lib/libxml2.dylib

    --------------------------------------
    In XE7 You must be add $(SDKROOT) the beginning of each path on remote machine value
    like this: [ $(SDKROOT)/System/Library/Frameworks ]
    or
    like this: [ $(SDKROOT)/usr/lib/ ]
    --------------------------------------

    2-1)
    path on remote machine : /System/Library/Frameworks
    Framework name: AddressBookUI
    include subdirectories: unchecked

    Add again:

    2-2)
    path on remote machine : /System/Library/Frameworks
    Framework name: AddressBook
    include subdirectories: unchecked

    Add again:

    2-3)
    path on remote machine : /System/Library/Frameworks
    Framework name: EventKit
    include subdirectories: unchecked

    Add again:

    2-4)
    path on remote machine : /System/Library/Frameworks
    Framework name: MessageUI
    include subdirectories: unchecked

    Add again:

    2-5)
    path on remote machine : /System/Library/Frameworks
    Framework name: AudioToolbox
    include subdirectories: unchecked

    Add again:

    2-6)
    path on remote machine : /System/Library/Frameworks
    Framework name: MapKit
    include subdirectories: unchecked

    Add again:

    2-7)
    path on remote machine : /System/Library/Frameworks
    Framework name: Social
    include subdirectories: unchecked

    Add again:

    2-8)
    path on remote machine : /System/Library/Frameworks
    Framework name: QuickLook
    include subdirectories: unchecked

    Add again:

    2-9)
    path on remote machine : /System/Library/Frameworks
    Framework name: SystemConfiguration
    include subdirectories: unchecked

    Add again: (No need in XE7 and later)

    2-10)
    path on remote machine : /System/Library/Frameworks
    Framework name: iAd
    include subdirectories: unchecked

    Add again: (No need in XE7 and later)

    2-11)
    path on remote machine : /System/Library/Frameworks
    Framework name: StoreKit
    include subdirectories: unchecked

    Add again:

    2-12)
    path on remote machine : /System/Library/Frameworks
    Framework name: MobileCoreServices
    include subdirectories: unchecked

    Add again:

    2-13)
    path on remote machine : /System/Library/Frameworks
    Framework name: GameKit
    include subdirectories: unchecked

    Add again:

    2-14)
    path on remote machine : /System/Library/Frameworks
    Framework name: CoreBluetooth
    include subdirectories: unchecked

    Add again:

    2-15)
    path on remote machine : /System/Library/Frameworks
    Framework name: Accounts
    include subdirectories: unchecked

    Add again:

    2-16)
    path on remote machine : /System/Library/Frameworks
    Framework name: AdSupport
    include subdirectories: unchecked

    2-17)
    path on remote machine : /System/Library/Frameworks
    Framework name: ExternalAccessory
    include subdirectories: unchecked

    2-18)
    path on remote machine : /usr/lib
    Framework name: libxml2.dylib
    Path type: Library path: checked
    include subdirectories: unchecked


    after Ok dialog, click Update local File Cache button.

    -------------------------------------------------------------------------------------------
    XE4: (Not supported after v9.0.0)
    3) DPFiOSPackagesXE4.dpk
    3-1) Select 32-bit windows and build then install. (No Need Simulator or Device)

    XE5: (Not supported after v9.0.0)
    4) DPFiOSPackagesXE5.dpk
    4-1) Select 32-bit windows and build then install. (No Need Simulator or Device)

    XE6: (Not supported after v9.0.0)
    5) DPFiOSPackagesXE6.dpk
    5-1) Select 32-bit windows and build then install. (No Need Simulator or Device)

    XE7:
    5) DPFiOSPackagesXE7.dpk
    5-1) Select 32-bit windows and build then install. (No Need Simulator or Device)



    Or Use DPFiOSPackagesGroup.groupproj
    -------------------------------------------------------------------------------------------

    6) Before deploying Demos on Simulator or Device dont forget : Go to
    Project Menu - > Deployment -> Deply
    -------------------------------------------------------------------------------------------


    7) This is very important to: if you want have very high performance in your project override in all you TForm declrations PaintRects
    Sample:

    type
    TFDatePicker = class( TForm )
    private
    { Private declarations }
    protected
    procedure PaintRects( const UpdateRects: array of TRectF ); override; <---- This line a important !
    public
    { Public declarations }
    end;

    and in your implementation:

    procedure TFDatePicker.PaintRects( const UpdateRects: array of TRectF );
    begin
    {} <-- This is important you not have any [inherited] keyword here !
    end;

    ----------------------------------------------------------------------------------------------------------------
    Note:

    If you want to use iOS 8.0 SDK, if you see compile error :
    ..\Documents\Embarcadero\Studio\SDKs\iPhoneOS8.0.sdk/usr/lib/system/libdispatch.dylib. Link against the umbrella framework 'System.framework' instead. for architecture armv7
    then you must be copy Macapi.Dispatch.pas file from delphi source folder into this framework folder and change this line :
    libdispatch = '/usr/lib/system/libdispatch.dylib';
    to
    libdispatch = '/usr/lib/libSystem.dylib';

    Now, by this work, you not have a delphi Form drawing (very slow), then you must be add a TDPFUIView on the form
    and change background color or image,

    Enjoy it!

    -------------------------------------------------------------------
    © 2011-2014 Dadeh Pardazane Faragir (D.P.F). All rights reserved.
    http://www.dpfaragir.com

    Developed by: Babak Yaghoobi ( b_yaghobi@yahoo.com or bayaghoobi@gmail.com)

     

    Вы все действия выполнили?

  7. Если нажать сюда, то произойдет обновление устройств(симуляторов) такое же как если бы нажать в контекстном меню, в это время даже на папочке таргет загорается картиночка "рефреш"

    post-1-0-81023000-1426193380.png

  8. Ну в общем-то стало понятно что мы до сих пор о разном. Судя по вашему сообщению,вы думаете, что у меня все итемы это какие-то мифические картинки. У меня точно такие же итемы как и в ListView. Точно также в них есть текст и картинка слева. И "список клиентов, и информацию о клиентах и список товара, и информацию о товаре, и документы и информацию о документах" - это все текст. Картинкой в итеме является только картинка, которая слева. К примеру список людей: слева маленькая фотка сотрудника, а справа (ФИО, возраст, цвет трусов) это текст, а не картинка.

  9. На ipad не пробовал. Картинки не сделаны под какойто телефон, изначально они на телефоне лежат с разрешением 1024х768, просто загружаются в битмап он ине loadfromfile, а loatThumbnail, соответственно и памяти кушает в 10 раз меньше. Далее. Есть по-моему огромная разница замостить картинками целый ДБгрид на всем экране или по одной картинке в каждый элемент списка, как минимум разница во столько раз, сколько колонок в ДБГриде. Насчет поедаемой памяти вообще вас не понял. Контрол держит в памяти только столько картинок, сколько итемов видно, а это всегда величина постоянная и небольшая с учетом загрузки миниатюр, а не гигантов реальных размеров. ДБГрид и список - огромная разница в этой реализации ибо у списка в момент скрола если появляется новый элемент в области видимости, то загрузить нужно всего 1 картинку и выгрузить 1, а в гриде много картинок одновременно надо подгружать удалять. Ну и критиковать проще всего. У вас есть решение которое бы позволило иметь огромные списки в тысячу и более элементов с картинками и не вызывало out of memory? Проверю это решение на IPad2, если уж на этом говне будет нормально, то о чем еще говорить... А цели сделать этот список чтобы он хорошо работал у всех бомжей у меня нет, спасибо, хватил уже истории когда всем нужна была поддержка идиотского IE6. Думаю не стоит разработчикам 2 раза на 1 грабли наступать.

  10. Картинки изначально уже лежат на устройстве. У каждого итема есть поле в котором хранится путь к файлу картинки. При скроле этого контрола каждый раз высчитывается какие итемы сейчас должны быть в области видимости. Дальше идет проверка, загружена ли в память уже картинка для каждого видимого итема ну и соответственно загружается или ничего не делается. Дальше вызывается Paint и в нем начинается рисование итемов контрола. Так что да картинки для итемов подгружаются и выгружаются на лету во время скрола. На андроидах не пробовал, пробовал на своем Iphone 5s. Ни малейшего лага нет, загружаются картинки моментально. Насчет размеров картинок. Не знаю как вы используете списки, но у меня задача отображать итемы с несколькими строками и слева картинка у каждого, в общем как и у стандартного ListViewItem'а. Высота итема у меня 60. Загружаются в итемы не какие-нибудь гиганты непонятных разрешений, а миниатюры картинок размером чуть большим чем высота итемов (90) для того чтобы было приемлимое качество картинки. Можете не верить, ваше право, но при скроле нет ни малейших дерганий или тем более зависаний (1000 итемов), скролится все плавно, в общем также как и ListView без картинок. По сути многое я подсмотрел у ListView, принципиальная разница лишь в том что если у контрола 1к итемов, то они не загружаются все в память. Да и шансов на то что приложение не вылетит при 1000 итемах и загруженных к ним картинках практически нет.

  11. То ли я вас не понял то ли вы меня. Я сделал так, что в памяти загружены только несколько картинок одновременно, а точнее ровно столько сколько видно итемов. Допустим высота контрола 1000, Высота итема 100. Так вот в памяти всегда загружено именно 11 картинок как бы вы не скролили вниз или вверх количество кушаемой памяти практически не меняется. Если итем не виден то картинка для него выгружается из памяти вообще. Ограничение такого подхода только в том что картинки для этого контрола должны храниться локально в файлах на устройстве.

  12. Я делал для мобилок (ФМ). Скорость работы идеальная, ни единого притормаживания. На лету определяет какие итемы сейчас должны быть видны в контроле и подгружает картинки только для этих итемов. Пробовал запилить 1000 итемов с картинками внутри каждого итема, 0 лагов. Ну собственно и лагать не от чего, картинок загружено в память минимум, отрисовка всегда идет только видимых итемов. Хотя конечно и в ListView можно сделать тоже самое, просто устал постоянно ворошить исходники этого монстра (TListView) для того чтобы добавлять/менять свой функционал.

×
×
  • Создать...