Перейти к содержанию
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. Правильно я понимаю, что если формат TimeFormatKind = Long, то при выборе времени в окне TimeEdit, мы не можем повлиять на значения миллисекунд? Мне бы хотелось там иметь два нуля 00. TimeEdit вставляет туда свое значение.
  4. Большое спасибо, До меня дошло, не успела написать. Вот тоже такой вариант: String newtime = FormatDateTime("hh:nn:ss", TimeEdit1->Time); if(newtime == ListView1->Items->Item[ListView1->ItemIndex]->Text)
  5. Можно ли добиться от 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); }
  6. Вроде заработало: #include <System.IniFiles.hpp> #include <System.IOUtils.hpp> #include <memory> #include <FMX.Helpers.Android.hpp> #include <Androidapi.Helpers.hpp> #include "MobUnit1.h" #include "Androidapi.JNI.ActivityManager.hpp" + перезагрузка компьютера...
  7. Если кто-то сталкивался с этой проблемой просьба написать, как это можно побороть в С++ 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, я помню, что помогло поменять местами (изменить их порядок) заголовочные файлы, а вот как сейчас менять местами не знаю...
  8. >P.S. Когда создаете объекты в RunTime нужно указывать в качестве владельца форму, а не родительский контрол. Поскольку никакой литературы по FMX на С++ нет, я воспользовалась книгой для Дельфи. Дмитрий Осипова: "Delphi Программирование для Windows, OS X, iOS и Android". У него повсеместно: Item := TListBoxItemCreate(LisBox1) Таким образом это он виноват.
  9. У меня задача - при щелчке на строку в списке ListView, открыть дополнительное окно(?) или вкладку(?) Detail и там отредактировать значение, после редактирования вернуться в ListView. В моем случае редактироваться будет время. Как правильно спроектировать такое приложение? Какие еще есть правильные варианты открыть Detail кроме как щелкнуть по строке списка, может лучше чекбокс кликнуть? Хотелось бы спроектировать такое приложение для андроид, чтобы пользователю было удобно и просто. Сам список программно готов и выглядит так:
  10. Как программно на С++ создаваемому 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(); }
  11. Спасибо. >Лучше определить TTimeEdit в стиле Где можно прочитать как такое реализуется по шагам?
  12. Пытаюсь изучить 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. И подскажите как добавить разделительные линии в списке? Спасибо.
  13. У меня оба варианта не работают. Как правильно? 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 *)'
  14. Спасибо, понятно. Я просто думала, что раз обыкновенный стандартный проводник в Windows показывает превью любого видео файлов (как на картинке), то и функция LoadThumbnailFromFile сумет вытащить такое превью.
  15. Приложение создается для платформы Андроид. Из 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? Спасибо.
  16. Я на андроид устройстве в 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? Спасибо.
  17. Спасибо, попробую. Этот планшет попадет мне снова в руки завтра-послезавтра.
  18. Выяснилась доп. информация для этих проблемных устройств. Беру планшетный компьютер BC9710AM, копирую на него APK и инсталлирую. В результате есть звук, но видео TMediaPlayer не показывает. Теперь беру и подсоединяю этот планшет к компьютеру и инсталлирую проект прямо из студии. В результате все нормально - есть и видео и звук. Подскажите, пожалуйста, с чем может быть связано что перенос APK через флешку приводит к тому, что TMediaPlayer не корректно работает на некоторых устройствах. Спасибо.
  19. Подскажите, пожалуйста, как на андроид устройстве, организовать в своей программе, удобный просмотр определенной папки с файлами? Чтобы при нажатии на кнопку можно было бы увидеть содержимое папки в удобном виде, так как это делают стандартные просмоторщики файлов. Хотелось бы получить примерно такой интерфейс как на картинке, чтобы в правой части, можно было нажатием запустить нужный файл, после открытия просмотра конкретной папки. Спасибо.
  20. Я сейчас попыталась тоже скачать и мне написало "Извините, вы не имеете доступа к этому!" Тут наверное поможет администратор форума. Я просто прикрепила файл, как на любом форуме.
  21. Тема была закрыта: 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
  22. Вышел Appmethod с редакцией free http://www.appmethod.com/pricing
×
×
  • Создать...