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

Kitty

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

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

  • Посещение

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

    16

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

  1. Заглянув в деплоймент релиза обнаружила, что потеряны к пути к картинкам которые отвечают за ярлык приложения. Переназначила пути - проблема вроде пропала.

  2. Что-то случилось с моим андроид проектом, теперь он запускается без проблем только в режиме Debug, если переключить на режим Release, то при компиляции получаю ошибки. Как это можно исправить?

    Спасибо.

    [PAClient Error] Error: E2312 Unable to execute '"C:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk\build-tools\android-4.4\Aapt.exe" package -f -M "E:\APK\MXPlayer\Android\Release\MobProject2\AndroidManifest.xml" -F "E:\APK\MXPlayer\Android\Release\MobProject2\bin\MobProject2-unsigned.apk" -I "C:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk\platforms\android-19\android.jar" -S "E:\APK\MXPlayer\Android\Release\MobProject2\res" -A "E:\APK\MXPlayer\Android\Release\MobProject2\assets" "E:\APK\MXPlayer\Android\Release\MobProject2\library" "E:\APK\MXPlayer\Android\Release\MobProject2\classes"' (Error 1)
    [PAClient Error] Error: E2312 ERROR: resource directory 'E:\APK\MXPlayer\Android\Release\MobProject2\res' does not exist

     

  3. Можно ли добиться от TimeEdit1->Time.TimeString() вывод в виде 20:00:00?

    //Тест:
    void __fastcall TMainForm::ButtonTimeFixClick(TObject *Sender)
    {
     //настройки:
     //Format = hh:nn:ss
     //TimeFormatKind = Long
     //ListView1->Items->Item[ListView1->ItemIndex]->Text = 20:00:00
     TimeEdit1->Time = ListView1->Items->Item[ListView1->ItemIndex]->Text;//вижу 20:00:00 в компоненте TimeEdit1
     if(TimeEdit1->Time.TimeString() == ListView1->Items->Item[ListView1->ItemIndex]->Text)
     {
      //надо попасть сюда
      ShowMessage(L"Такое время уже есть в расписании.");
      TimeEdit1->SetFocus();
     }
    //попадаю сюда 
    ShowMessage(TimeEdit1->Time.TimeString() + " " + ListView1->Items->Item[ListView1->ItemIndex]->Text);
    }
    

    post-132-0-02031100-1406718213.jpg

  4. Если кто-то сталкивался с этой проблемой просьба написать, как это можно побороть в С++ Builder.

    После добавления в проект для андроид, компонента TabControl и размещения на его двух вкладках разных компонентов, перестали работать в студии всплывающие подсказки, т.е. я пишу, например:

    Button1-> и не появляется выпадающий список свойств.

    Нажатие Сtrl+Пробел не помогает.

     

    Возможно, надо поменять порядок файлов #include, но каким он должен стать, чтобы подсказки заработали, не представляю. Меняла местами эти файлы, ничего не помогло. Сейчас у меня такой список в головном h файле:

    #ifndef MobUnit1H
    #define MobUnit1H
    #include <System.Classes.hpp>
    #include <FMX.Controls.hpp>
    #include <FMX.Forms.hpp>
    #include <FMX.StdCtrls.hpp>
    #include <FMX.Types.hpp>
    #include <FMX.Objects.hpp>
    #include <FMX.ListView.hpp>
    #include <FMX.ListView.Types.hpp>
    #include <FMX.DateTimeCtrls.hpp>
    #include <FMX.TabControl.hpp>
    #include <FMX.ActnList.hpp>
    #include <System.Actions.hpp>
    #include <map>
    #include <vector>

     

    в cpp список:

    #include <fmx.h>

    #pragma hdrstop

    #include <System.IniFiles.hpp>

    #include <System.IOUtils.hpp>

    #include <FMX.Helpers.Android.hpp>

    #include <Androidapi.Helpers.hpp>

    #include <memory>

    #include "Androidapi.JNI.ActivityManager.hpp"

    #include "MobUnit1.h"

     

    Когда то давно у меня такое было при использовании Indy, я помню, что помогло поменять местами (изменить их порядок) заголовочные файлы, а вот как сейчас менять местами не знаю... :(

  5. >P.S. Когда создаете объекты в RunTime нужно указывать в качестве владельца форму, а не родительский контрол.

     

    Поскольку никакой литературы по FMX на С++ нет, я воспользовалась книгой для Дельфи.

    Дмитрий Осипова:

    "Delphi Программирование для Windows, OS X, iOS и Android".

    У него повсеместно:

    Item := TListBoxItemCreate(LisBox1)

    Таким образом это он виноват. :)

  6. У меня задача - при щелчке на строку в списке ListView, открыть дополнительное окно(?) или вкладку(?) Detail и там отредактировать значение, после редактирования вернуться в ListView. В моем случае редактироваться будет время. Как правильно спроектировать такое приложение? Какие еще есть правильные варианты открыть Detail кроме как щелкнуть по строке списка, может лучше чекбокс кликнуть? Хотелось бы спроектировать такое приложение для андроид, чтобы пользователю было удобно и просто.

    Сам список программно готов и выглядит так:

    post-132-0-69166900-1406645885.jpg

  7. Как программно на С++ создаваемому TListBoxItem присвоить стиль, например, TMetropolisUIListBoxItem?

    void __fastcall TMainForm::Button4Click(TObject *Sender)
    {
    	TListBoxItem * item;
    	TTimeEdit * VideoTimeEdit;
    	ListBox1->BeginUpdate();
    	int j = 0;
        for (int i = 0; i < 10; i++)
    	   {
    		item = new TListBoxItem(ListBox1);
    		item->Text = "Текст: " + IntToStr(i);
    		item->Height = 44;
    		item->ItemData->Detail = "Детальный текст: " + IntToStr(i);
    		item->ItemData->Bitmap = ImageControl1->Bitmap; //тут bmp 44x44
    		VideoTimeEdit = new TTimeEdit(item);
    		VideoTimeEdit->Parent = item;
    		VideoTimeEdit->Position->X = 140;
    		VideoTimeEdit->Position->Y = 10 ;
    		VideoTimeEdit->TimeFormatKind = 1;
    	    ListBox1->AddObject(item);
    	  }
    	ListBox1->EndUpdate();
    }
    
  8. Пытаюсь изучить TListBox в десктоп проекте. Не удается увидеть текст Detail ни в дизайнере ни через код. Подскажите какое свойство еще надо установить чтобы увидеть значения свойства ItemData?

    void __fastcall TMainForm::Button4Click(TObject *Sender)
    {
    	TListBoxItem * item;
    	TTimeEdit * VideoTimeEdit;
    	ListBox1->BeginUpdate();
    	int j = 0;
        for (int i = 0; i < 10; i++)
    	   {
    		item = new TListBoxItem(ListBox1);
    		item->Text = "Текст: " + IntToStr(i);
    		item->Height = 44;
    		item->ItemData->Detail = "Детальный текст: " + IntToStr(i);
    		item->ItemData->Bitmap = ImageControl1->Bitmap; //тут bmp 44x44
    		VideoTimeEdit = new TTimeEdit(item);
    		VideoTimeEdit->Parent = item;
    		VideoTimeEdit->Position->X = 140;
    		VideoTimeEdit->Position->Y = 10 ;
    		VideoTimeEdit->TimeFormatKind = 1;
    	    ListBox1->AddObject(item);
    	  }
    	ListBox1->EndUpdate();
    }
    

    Результат на рисунке. Нет ни картинки, нет ни Detail. И подскажите как добавить разделительные линии в списке?

    Спасибо.

    post-132-0-09827200-1406638770.jpg

  9. У меня оба варианта не работают. Как правильно?

    void __fastcall TMainForm::Button3Click(TObject *Sender)
    {
    //ItemAppearance=Custom
    ListView1->BeginUpdate();
     for (int i = 0; i < 10; i++)
      {
       TListViewItem * item = ListView1->Items->Add();
       item->Text = "Текст: " + IntToStr(i);
       item->Detail = "Детальный текст: " + IntToStr(i);
       TTimeEdit * VideoTimeEdit = new TTimeEdit(item->Parent);
       VideoTimeEdit->Parent = item->Parent;
       VideoTimeEdit->Position->X = 140;
       VideoTimeEdit->Position->Y = 10;
       VideoTimeEdit->TimeFormatKind = 1;
      }
    ListView1->EndUpdate();
     
    }
    
    void __fastcall TMainForm::Button3Click(TObject *Sender)
    {
    //ItemAppearance=Custom
    TListViewItem * item;
    TTimeEdit * VideoTimeEdit;
    ListView1->BeginUpdate();
    int j = 0;
     for (int i = 0; i < 10; i++)
      {
       item = new TListViewItem(ListView1);
       item->Text = "Текст: " + IntToStr(i);
       item->Detail = "Детальный текст: " + IntToStr(i);
       VideoTimeEdit = new TTimeEdit(item->Parent);
       VideoTimeEdit->Parent = item->Parent;
       VideoTimeEdit->Position->X = 140;
       VideoTimeEdit->Position->Y = 10 ;
       VideoTimeEdit->TimeFormatKind = 1;
       ListView1->AddObject(item);
      }
    ListView1->EndUpdate();
    }
    //Could not find a match for 'TListViewItem::TListViewItem(TListView *)'
    
    
  10. Спасибо, понятно. Я просто думала, что раз обыкновенный стандартный проводник в Windows показывает превью любого видео файлов (как на картинке), то и функция LoadThumbnailFromFile сумет вытащить такое превью. :)

    post-132-0-89155800-1406136235.jpg

  11. Приложение создается для платформы Андроид.
    Из INI файла читается время и помещается в список. Рисунок прилагается. Для размещения этого времени справа в списке я использую стандартный пример, который идет в Samples студии:

    const System::UnicodeString sText = L"CA";
    void __fastcall TForm1::ListView1UpdatingObjects(const TObject *Sender, const TListViewItem *AItem,
    		  bool &AHandled)
    {
     TListItemText * LCaption = reinterpret_cast<TListItemText*>((const_cast<TListViewItem*>(AItem))->Objects->FindObject(sText));
     if (LCaption == NULL)
    	{
    		LCaption = new TListItemText((TListItem*)AItem);
    		LCaption->Name = sText;
    		LCaption->Align = TListItemAlign::Trailing;
    		LCaption->VertAlign = TListItemAlign::Trailing;
    		LCaption->PlaceOffset->X = 15;
    		LCaption->PlaceOffset->Y = 12;
    		LCaption->TextAlign = TTextAlign::Center;
    		LCaption->Trimming = TTextTrimming::Character;
    		LCaption->IsDetailText = True;
    		LCaption->Width = 90;
    		LCaption->Height = 45;
    	}
    }
    
    //в другом месте программы цикл и в нем фрагмент заполнения:
    TListViewItem * item = ListView1->Items->Add();
    //*********************
    //в (*It).first например значение: 08:00:00
    item->Data[sText] = TValue::From<UnicodeString>((*It).first);
    

    Подскажите, пожалуйста, как вместо простого текста в этих местах размещать программно компонент TTimeEdit чтобы читать в него значения, и иметь возможность править эти значения времени прямо в ListView?

    Спасибо.

    post-132-0-10091900-1406033051.jpg

  12. Я на андроид устройстве в ListView пытаюсь в цикле отобразить Thumbnails файлов mp4:

    //фрагмент цикла
    TListViewItem * item = ListView1->Items->Add();
    //в (*It).second имя видео MP4 файла
    String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(),(*It).second);
     if(FileExists(path))
       {
        //Компонент Image2 лежит на форме у него Visible=false
        Image2->Bitmap->LoadThumbnailFromFile(path, 45, 45);
        item->BitmapRef = Image2->Bitmap;
       }
    

    Исключение EThumbnailLoadingFailed.

    Как правильно получить Thumbnail видео файла mp4?

    Спасибо.

  13. Выяснилась доп. информация для этих проблемных устройств.

    Беру планшетный компьютер BC9710AM, копирую на него APK и инсталлирую. В результате есть звук, но видео TMediaPlayer не показывает.

    Теперь беру и подсоединяю этот планшет к компьютеру и инсталлирую проект прямо из студии. В результате все нормально - есть и видео и звук.

    Подскажите, пожалуйста, с чем может быть связано что перенос APK через флешку приводит к тому, что TMediaPlayer не корректно работает на некоторых устройствах.

    Спасибо.

  14. Подскажите, пожалуйста, как на андроид устройстве, организовать в своей программе, удобный просмотр определенной папки с файлами? Чтобы при нажатии на кнопку можно было бы увидеть содержимое папки в удобном виде, так как это делают стандартные просмоторщики файлов.

    Хотелось бы получить примерно такой интерфейс как на картинке, чтобы в правой части, можно было нажатием запустить нужный файл, после открытия просмотра конкретной папки.

    Спасибо.

    post-132-0-99155900-1405152145_thumb.jpg

  15. Я сейчас попыталась тоже скачать и мне написало "Извините, вы не имеете доступа к этому!"

    Тут наверное поможет администратор форума. Я просто прикрепила файл, как на любом форуме.

  16. Тема была закрыта: http://fire-monkey.ru/topic/230-zapusk-video-po-raspisaniiu-v-pleere-na-androide/

    Однако было найдено решение и в продолжение темы вопрос решен так:

    1. Воспользуемся советом Nix0N и используем PAS файл из той темы.

    2. Чтобы в C++ Builder XE6 можно было корректно использовать killBackgroundProcesses, в PAS файл вносим изменения любезно предоставленные Hugh Xiao. Источник обсуждения тут:

    http://bcbjournal.org/forums/viewtopic.php?f=10&t=2496&sid=b33b673eeb80f12f15a169a58e55cc67&start=15

    Код:

    //------------------------------------------------
    // RegisterTypes added by Hugh Xiao : qs.xiao@gamil.com 2014-07-20 Taiwan Time
    procedure RegisterTypes;
    begin
    TRegTypes.RegisterType('Androidapi.JNI.ActivityManager.JDebug_MemoryInfo', TypeInfo(Androidapi.JNI.ActivityManager.JDebug_MemoryInfo));
    end;
    
    initialization
    RegisterTypes;
    // end by Hugh
    //---------------------------------------------------
    

    3. Теперь запускаем MX плеер по расписанию кодом, при котором предыдущий экземпляр видео уничтожается и таким образом программа не вываливается из памяти:

    //запуск PlayVideo из таймера Timer1
    void PlayVideo(const String AFileName)
    {
      try
      {
       //MX player: https://sites.google.com/site/mxvpen/api
       _di_JString PackageName = StringToJString(L"com.mxtech.videoplayer.ad");
       _di_JActivityManager activityManager = GetActivityManager();//<- для работы GetActivityManager необходим код от Hugh Xiao
       activityManager->killBackgroundProcesses(PackageName); //убиваем предыдущее видео
    
       String EXE = System::Ioutils::TPath::GetExtension(AFileName);
       _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW);
       _di_Jnet_Uri Data = StrToJURI(AFileName);
    
       Intent->setDataAndType(Data, StringToJString(L"video/" + EXE));
       //Важные две строки совет от rlebeau разработчика Indy
       Intent->setPackage(PackageName);
       Intent->addFlags(TJIntent::JavaClass->FLAG_ACTIVITY_CLEAR_TOP | TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK | TJIntent::JavaClass->FLAG_ACTIVITY_NO_HISTORY);
    
       //Application->ProcessMessages();
       //Sleep(2000);
    
       SharedActivity()->startActivity(Intent);//старт нового видео
      }
    catch(Exception &E)
       {
        ShowMessage( E.ClassName() + " " + E.Message);
        Application->Terminate();
       }
    
    }
    

    В архиве правильный PAS и HPP, включая тестовый пример на С++.

    Androidapi.JNI.ActivityManager.zip

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