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

Kitty

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

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

  • Посещение

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

    16

Весь контент Kitty

  1. TMediaPlayer идущий в стандартной поставке FMX не подходит для воспроизведения видео на разных устройствах. Пока разработчики вплотную не возьмутся за этот компонент решения с использованием этого компонента нет.
  2. Если кто разбирается одновременно и в Дельфи и в С++ Builder, объясните пожалуйста, что за ошибка и как это можно исправить? Установила этот компонент: http://www.flashavconverter.com/content/android-native-player-delphicbuilder-component В триал версии ограничение: Trial version does not support pause video. Мне в одном проекте надо воспроизводить видео без паузы по кругу, поэтому триал версия мне подходит. В C++ Builder XE 7 добавила путь к h файлам: C:\Users\Lena\Documents\Android_Player_Trial\Packages\XE7\Win32 При попытке компиляции ошибка: TAndroidPlayer *AndroidPlayer1; <- тут [bccaarm Error] UnitPlayer.h(15): unknown type name 'TAndroidPlayer' [bccaarm Error] UnitPlayer.h(15): Fields defined in a '__published' block must be of type pointer to Delphi-style class Как это исправить? Спасибо.
  3. Я все это сделала. На устройстве PIPO M7 Pro Android 4.4.2 (или также 4.2) отладка (точки останова) в С++ Builder не работает (RAD XE7 Up1). На других устройствах с Андроид не тестировала т.к. их у меня нет.
  4. А в С++ Builder XE7 их можно установить? Спасибо.
  5. А у меня другая проблема. После вращения планшета программа перестает работать: http://fire-monkey.ru/topic/231-otklonenie-programma-ne-otvechaet-posle-vraschen/ Помогает этот код: void __fastcall TForm1::FormResize(TObject *Sender) { Application->ProcessMessages(); Sleep(5); }
  6. А если попробовать, как требует стандарт С++, оператор delete: buttonSub = Application->FindComponent("subButton"+IntToStr(i)); if(buttonSub) { delete buttonSub;//проверить в точке останова, что попадаем в этот блок кода buttonSub = NULL; } //*** ?
  7. Тут человека писал похожее и у него вроде все решилось: http://www.sql.ru/forum/1127246/obnovil-svoy-nexus-do-andriod-5-i-prilozheniya-na-delphi-perestali-rabotat
  8. В Андроиде есть свой MediaPlayer: http://developer.android.com/reference/android/media/MediaPlayer.html Подскажите, пожалуйста, как с его помощью запустить видео файл на воспроизведение зациклено по кругу? Хочется попробовать обойтись без стандартного компонента FMX TMediaPlayer. Дело в том, что компонент FMX TMediaPlayer не корректно работает на некоторых устройствах и имеет ряд других проблем: http://fire-monkey.ru/topic/330-tmediaplayer-ne-zapuskaet-video-v-nekotorykh-versiiakh-andro/ http://fire-monkey.ru/topic/318-android-pri-zadanii-novogo-video-faila-tmediaplayer-u-menia-vyval/ Спасибо.
  9. Даже если продукт один, врядли получиться разместить титр в нужном месте экрана с нужным начертанием и цветом шрифта. Или такое возможно?
  10. А разве бывает возможность поставить титры в разных местах видео у плеера? Если на видео ролике несколько продуктов? Кофе дымится вверху, посередине мороженное, внизу крутиться булочка и т.п. Думаю Andrey Yefimov поставил правильный диагноз - ничего не получиться в андроиде.
  11. Большое спасибо! Теперь понятно, что задача не имеет решения и не стоит дергаться.
  12. У меня на форме табконтрол с элементами управления. Я нажимаю кнопку и запускают плеер из маркера. Это плеер МХ установленный на устройстве. Мне надо в момент запуска создать дополнительную прозрачную форму и она будет поверх видео, правильно?
  13. Kitty

    Update 1 Fix List

    Update 1 Fix List for RAD Studio XE7, Delphi XE7, and C++ Builder XE7 http://edn.embarcadero.com/article/44156
  14. Подскажите, пожалуйста, можно ли реализовать следующую задачу: Программа запускает видео ролик, который крутиться в цикле в стандартном медиа плеере (или не стандартном, например, в MX плеере из маркета, марка плеера не принципиальна). Видео ролик отображает продукт на экране с его ценой. Если цена у продукта поменялась, то надо создавать новый видео ролик с новой ценой. Хотелось бы не создавать новый ролик, а чтобы было так: Создаем один раз видео ролик и отображаем продукт без его цены. Цена при старте программы читается из текстового файла и накладывается поверх видео ролика в нужном месте. Если цена поменялась (например, скачок курса доллара), то просто меняем цену в текстовом файле и перезапускаем программу. Ролик показывается уже с новой ценой. Есть ли возможность накладывать поверх видео в андроиде нужную информацию, т.е. можно ли как-то реализовать пункт №2? В данном случае наложить на видео информацию из текстового файла. Спасибо. P.S. Или быть может проще накладывать прозрачную картинку png с новой ценой? Новую картинку png с новой ценой проще сделать, чем делать новый видео ролик.
  15. Какие файлы для Андроид проекта надо прикладывать, чтобы у других людей проект откомпилировался?
  16. Нашлось решение для С++: http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RadStudio_XE7/CPP/Mobile%20Snippets/MessageAlerts/ Все хорошо, только как руссофицировать кнопки в MessageDlg?
  17. Для С++ найдено: http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RadStudio_XE7/CPP/Mobile%20Snippets/MessageAlerts/uMain.cpp#l60
  18. Попытка №1. Помогите исправить ошибку: class TMyMessageDlgCloseProc1 : public TInterfacedObject, public Fmx::Dialogs::TInputCloseDialogProc { public: HRESULT STDMETHODCALLTYPE QueryInterface (const GUID& riid, void** ppvObject) { return TInterfacedObject::QueryInterface (riid, ppvObject); } ULONG STDMETHODCALLTYPE AddRef() { return TInterfacedObject::_AddRef(); } ULONG STDMETHODCALLTYPE Release() { return TInterfacedObject::_Release(); } void __fastcall Invoke(const TModalResult AResult) { if (AResult == mrYes) { //*** } } }; _di_TInputCloseDialogProc proc = new TMyMessageDlgCloseProc1; MessageDlg(L"Удалить: " + LabelSection->Text + L"?", TMsgDlgType::mtConfirmation, TMsgDlgButtons() << TMsgDlgBtn::mbYes << TMsgDlgBtn::mbNo, 0, proc); [bccaarm Error] MobUnit1.cpp(694): allocating an object of abstract class type 'TMyMessageDlgCloseProc1' sysmac.h(300): unimplemented pure virtual method 'QueryInterface' in 'TMyMessageDlgCloseProc1'
  19. Если найдется гуру на С++, подскажите пожалуйста, скелет вызова 3 раза анонимного метода с разными сообщениями и один раз MessageDlg для условия if. В коде после MessageDlg вызываются ShowMessage, получается надо из анонимного метода вызвать другой анонимный метод? void StopTimers() { MainForm->Timer1->Enabled = false; MainForm->Button1->Enabled = true; } void __fastcall TMainForm::ButtonDeleteClick(TObject *Sender) { try { if(LabelSection->Text != "") { if (MessageDlg(L"Удалить секцию: " + LabelSection->Text + L"?", TMsgDlgType::mtConfirmation, TMsgDlgButtons() << TMsgDlgBtn::mbYes << TMsgDlgBtn::mbNo, 0) == mrYes) { #ifdef __ANDROID__ String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), L"files.ini"); #elif _Windows String path = System::Ioutils::TPath::Combine(GetCurrentDir(), L"files.ini"); #endif if(FileExists(path)) { std::unique_ptr<TIniFile> FileINI(new TIniFile(path)); FileINI->EraseSection(LabelSection->Text); FileINI->UpdateFile(); if(!Control()) { StopTimers(); Application->Terminate(); return; } //IniContent был заполнен в функции Control() ListView1->Items->Clear(); std::map<String, std::vector<String> >::iterator It = IniContent.begin();//map был заполнен в Control() int i = 1; while (It != IniContent.end()) { TListViewItem * item = ListView1->Items->Add(); item->Text = L"№" + IntToStr(i) + " " + IniContent[(*It).first][1];//имя файла из ini item->Detail = MainForm->IniContent[(*It).first][2];//about из ini файла item->BitmapRef = Image1->Bitmap; item->Data[sText] = TValue::From<UnicodeString>((*It).first);//время из ini пишем справа в списке //ShowMessage((*It).first); It++; i++; } //*** if(!IniContent.empty()) ShowMessage(L"Секция удалена из файла расписания."); ChangeTabAction1->Tab = TabItem1; ChangeTabAction1->ExecuteTarget(this); } else { ShowMessage(L"Не найден файл files.ini. Программа будет закрыта."); Application->Terminate(); } } } } catch(Exception &E) { StopTimers(); ShowMessage(L"Произошла ошибка в ButtonDeleteClick. Класс ошибки: " + E.ClassName() + L"\nСообщение ошибки: " + E.Message + L" Программа будет закрыта."); Application->Terminate(); } }
  20. Проскочила фраза на просторах интернета: The catch is that the anonymous procedure is now required for Android, but implementing an anonymous procedure in C++ is more difficult than in Delphi. Все мои попытки сделать это в С++ Builder не увенчались успехом. Кто нибудь может выложить рабочий код на С++? Спасибо.
  21. Большое спасибо. Попробую реализовать на С++. Скажите пожалуйста, а зачем все было менять если все прекрасно работало в RAD XE6 так как надо и интуитивно понятно? Спасибо.
  22. Вот, к примеру, код: catch(Exception &E) { ShowMessage(L"Произошла ошибка в ButtonDeleteClick. Класс ошибки: " + E.ClassName() + L"\nСообщение ошибки: " + E.Message + L" Программа будет закрыта."); Application->Terminate(); } В готовом APK созданном в RADXE6 я вижу окно с сообщением. Нажимаю в нем ОК и программа закрывается. Все нормально. В RADXE7 я вижу на мгновение окно с сообщением, и программа сразу закрывается сама. Даже не успеваешь прочитать, что было написано в окне сообщения. Как сделать, чтобы в готовом APK созданном в RADXE7 пользователь мог увидеть окно с сообщением ShowMessage и нажать в нем кнопку? В RADXE6 проблем нет. Спасибо.
  23. Здравствуйте. У меня есть код, который успешно без проблем отрабатывает в RAD XE6. В готовом APK нет никаких проблем. Если перенести этот код в RAD XE7, то в готовом APK возникает ошибка класса ENotImplemented, сообщение Blocking dialogs not implemented on this platform. Ошибка возникает при нажатии на кнопку, в которой есть такой код: if (MessageDlg(L"Удалить секцию: " + LabelSection->Text + L"?", TMsgDlgType::mtConfirmation, TMsgDlgButtons() << TMsgDlgBtn::mbYes << TMsgDlgBtn::mbNo, 0) == mrYes) { //*** } Подскажите, пожалуйста, как исправить, чтобы работало в созданном APK из RAD XE7? В APK из RAD XE6 я вижу диалоговое окно без каких-либо проблем и сообщений об ошибке. Спасибо.
  24. Открыть пакет в RAD XE7. Правой кнопкой по пакету и Options. В появившемся окне выбрать Delphi Compiler -> Output C/C++ file generator -> Generate all C++Builder files (including package libs) Потом прописать пути в настройках студии. Так правильно будет или не правильно поняла?
  25. Нужно ли делать какие-то правильные доп. шаги, чтобы увидеть пакет в С++ Builder XE7? Спасибо.
×
×
  • Создать...