Kitty
-
Постов
792 -
Зарегистрирован
-
Посещение
-
Победитель дней
16
Сообщения, опубликованные Kitty
-
-
Если кто разбирается одновременно и в Дельфи и в С++ 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
Как это исправить? Спасибо.
-
http://fire-monkey.ru/topic/479-ne-rabotaet-otladka/?p=3348
Я все это сделала. На устройстве PIPO M7 Pro Android 4.4.2 (или также 4.2) отладка (точки останова) в С++ Builder не работает (RAD XE7 Up1).
На других устройствах с Андроид не тестировала т.к. их у меня нет.
-
А в С++ Builder XE7 их можно установить?
Спасибо.
-
Есть проблема - при смене ориентации экрана приложение просто закрывается.
А у меня другая проблема. После вращения планшета программа перестает работать: http://fire-monkey.ru/topic/231-otklonenie-programma-ne-otvechaet-posle-vraschen/
Помогает этот код:
void __fastcall TForm1::FormResize(TObject *Sender) { Application->ProcessMessages(); Sleep(5); }
-
А если попробовать, как требует стандарт С++, оператор delete:
buttonSub = Application->FindComponent("subButton"+IntToStr(i)); if(buttonSub) { delete buttonSub;//проверить в точке останова, что попадаем в этот блок кода buttonSub = NULL; } //***
?
-
Тут человека писал похожее и у него вроде все решилось: http://www.sql.ru/forum/1127246/obnovil-svoy-nexus-do-andriod-5-i-prilozheniya-na-delphi-perestali-rabotat
-
В Андроиде есть свой 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/
Спасибо.
-
Даже если продукт один, врядли получиться разместить титр в нужном месте экрана с нужным начертанием и цветом шрифта. Или такое возможно?
-
А разве бывает возможность поставить титры в разных местах видео у плеера? Если на видео ролике несколько продуктов? Кофе дымится вверху, посередине мороженное, внизу крутиться булочка и т.п. Думаю Andrey Yefimov поставил правильный диагноз - ничего не получиться в андроиде.
-
Большое спасибо! Теперь понятно, что задача не имеет решения и не стоит дергаться.
-
У меня на форме табконтрол с элементами управления. Я нажимаю кнопку и запускают плеер из маркера. Это плеер МХ установленный на устройстве. Мне надо в момент запуска создать дополнительную прозрачную форму и она будет поверх видео, правильно?
-
Update 1 Fix List for RAD Studio XE7, Delphi XE7, and C++ Builder XE7
-
Подскажите, пожалуйста, можно ли реализовать следующую задачу:
Программа запускает видео ролик, который крутиться в цикле в стандартном медиа плеере (или не стандартном, например, в MX плеере из маркета, марка плеера не принципиальна).
Видео ролик отображает продукт на экране с его ценой. Если цена у продукта поменялась, то надо создавать новый видео ролик с новой ценой. Хотелось бы не создавать новый ролик, а чтобы было так:- Создаем один раз видео ролик и отображаем продукт без его цены.
- Цена при старте программы читается из текстового файла и накладывается поверх видео ролика в нужном месте.
- Если цена поменялась (например, скачок курса доллара), то просто меняем цену в текстовом файле и перезапускаем программу. Ролик показывается уже с новой ценой.
Есть ли возможность накладывать поверх видео в андроиде нужную информацию, т.е. можно ли как-то реализовать пункт №2? В данном случае наложить на видео информацию из текстового файла.
Спасибо.
P.S.
Или быть может проще накладывать прозрачную картинку png с новой ценой? Новую картинку png с новой ценой проще сделать, чем делать новый видео ролик.
-
Какие файлы для Андроид проекта надо прикладывать, чтобы у других людей проект откомпилировался?
-
Нашлось решение для С++: http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RadStudio_XE7/CPP/Mobile%20Snippets/MessageAlerts/
Все хорошо, только как руссофицировать кнопки в MessageDlg?
-
-
Попытка №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' -
Если найдется гуру на С++, подскажите пожалуйста, скелет вызова 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(); } }
-
Проскочила фраза на просторах интернета:
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 не увенчались успехом. Кто нибудь может выложить рабочий код на С++?
Спасибо.
-
Большое спасибо. Попробую реализовать на С++.
В XE7 диалоговые окна стали не блокирующими.Скажите пожалуйста, а зачем все было менять если все прекрасно работало в RAD XE6 так как надо и интуитивно понятно?
Спасибо.
-
Вот, к примеру, код:
catch(Exception &E) { ShowMessage(L"Произошла ошибка в ButtonDeleteClick. Класс ошибки: " + E.ClassName() + L"\nСообщение ошибки: " + E.Message + L" Программа будет закрыта."); Application->Terminate(); }
В готовом APK созданном в RADXE6 я вижу окно с сообщением. Нажимаю в нем ОК и программа закрывается. Все нормально.
В RADXE7 я вижу на мгновение окно с сообщением, и программа сразу закрывается сама. Даже не успеваешь прочитать, что было написано в окне сообщения.
Как сделать, чтобы в готовом APK созданном в RADXE7 пользователь мог увидеть окно с сообщением ShowMessage и нажать в нем кнопку?
В RADXE6 проблем нет.
Спасибо.
-
Здравствуйте.
У меня есть код, который успешно без проблем отрабатывает в 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 я вижу диалоговое окно без каких-либо проблем и сообщений об ошибке.
Спасибо. -
- Открыть пакет в RAD XE7.
- Правой кнопкой по пакету и Options.
- В появившемся окне выбрать Delphi Compiler -> Output C/C++ file generator -> Generate all C++Builder files (including package libs)
- Потом прописать пути в настройках студии.
Так правильно будет или не правильно поняла?
-
Нужно ли делать какие-то правильные доп. шаги, чтобы увидеть пакет в С++ Builder XE7?
Спасибо.
Не воспроизводится видео
в TMediaPlayer
Опубликовано
TMediaPlayer идущий в стандартной поставке FMX не подходит для воспроизведения видео на разных устройствах. Пока разработчики вплотную не возьмутся за этот компонент решения с использованием этого компонента нет.