-
Постов
414 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Сообщения, опубликованные Pax Beach
-
-
4 минуты назад, Rusland сказал:
тогда ой )
В этом видимо есть какой-то потенциал, если научиться получить DX контекст в качестве устройства для метода ICreateDevEnum
-
1 минуту назад, Rusland сказал:
Компилится, но не понял как он должен грабить видео
Это граббер с утройств, написер с камеры.
-
23 минуты назад, Rusland сказал:
Может из этого граббера можно получить какую-то полезную информацию
компилится?
-
Привожу пример готового FMX приложения, которое рисует на форме с помощью интерфейса IDirect3DDevice9.
В примере реализован вызов анонимного метода Present() интерфейса IDirect3DDevice9, имея ссылку на интерфейс и порядковый номер метода.
Данная реализация пригодится при установке ловушек (Hooks).
Вкратце, суть реализации такая:
Объявляю процедурный тип нужного метода
type TPresent9 = function(pSourceRect, pDestRect: PRect; hDestWindowOverride: HWND; pDirtyRegion: PRgnData): HResult of object; stdcall;
Объявляю переменную этого типа
var PPresent: TPresent9; begin ... IntRefToMethPtr(d3d9Dev, PPresent, 17); PPresent(nil, nil, DParametrs.D3DPP.hDeviceWindow, nil);
Реализую процедуру получения метода интерфейса по номеру
procedure IntRefToMethPtr(const IntRef; var MethPtr; MethNo: Integer); type TVtable = array [0 .. 999] of Pointer; PVtable = ^TVtable; PPVtable = ^PVtable; begin // QI=0, AddRef=1, Release=2, etc TMethod(MethPtr).Code := PPVtable(IntRef)^^[MethNo]; TMethod(MethPtr).Data := Pointer(IntRef); end;
А теперь получаем метод интерфейса по его порядковому номеру и вызываем его
IntRefToMethPtr(d3d9Dev, PPresent, 17); PPresent(nil, nil, DParametrs.D3DPP.hDeviceWindow, nil);
Благодарю за оценку этого решения на StackOverflow.
Скачать пример: D3DDemo.zip
-
41 минуту назад, Nik сказал:
android-ndk-r15-beta1-windows-x86_64.zip
я вот такой файлик скачивал..Товарищи, как полет с такими настройками, кто пробовал еще?
-
-
1 минуту назад, Nik сказал:
Тем, что на телефоне Android 4.2.2. Версию выше не пробовал ставить, а так работает точно )
Спасибо, будем тестить на мажорных версиях, как будет время.
-
4 минуты назад, Nik сказал:
Можно плиз последнее поле NDK развернуть?
Чем обусловлен выбор платформы android-17 в NDK, при этом в SDK android-25?
-
7 часов назад, Nik сказал:
Задался тут вопросом обновления версии Android NDK...
Delphi 10.2 Tokio:
- android-ndk-r14b-windows-x86_64 - скомпилировалось, но при запуске приложения на андроиде сбоит и виснет;
- android-ndk-r15-beta1-windows-x86_64 - полёт нормальный.. всё работает )
P.S> может кому пригодится
Скрины настроек каталогов SDK и NDK пожалуйста
-
-
Приведенный класс не корректно работает в полноэкранном режиме.
К тому же в режиме DirectX не верно определяется видеоадаптер.
Разбираюсь с этим пока.
-
7 минут назад, Rusland сказал:
Класс для снятия скриншотов не подойдет?
Поиск — это искусство.
Спасибо тебе огромное! Не понимаю, как я мог его не найти.
-
Мне нужно сделать снимок экрана из своего приложения в приложении DirectX (в игре).
По-быстрому накидал приложение, исходники здесь: MakeScreenshot-Forum.zip
1. по нажатию единственной кнопки будет выполнена серия из 16 снимков экрана. Если запущен Скайп, то фотографироваться будет содержимое его окна.
2. По нажатии CTRL+ALT+F9 будет сделан единичный снимок
3. Label внизу показывает сколько миллисекунд затрачено на вывод снимка
4. В комментах так же вы найдете, как работать со снимками через буфер обмена.
Работа выполняется через GetDC(NULL);
Windows 10 x64. Снимки делаются. И DirectX тоже нормально фотографируется.
НО! только в оконных приложениях.
Если приложение DirectX полноэкранное, то на всех снимках одна и та же картинка с первого снимка.
То есть изменение буфера экрана в приложении ни как не отражается на снимках.Что нужно? Необходимо делать снимки конкретного приложения через интерфейс DirectX, а точнее, я так понимаю, через DirectShow. Тогда не будет разницы в окне оно или на полный экран.
Помогите плиз, знающие люди, с решением этой задачи.
Гарантирую вам от сообщества большой почет, от меня огромный респект, если это принесет доход, то еще и очень приятный бонус.
Ссылки теме:
2. unofficial version of DelphiX
4. MinHook - The Minimalistic x86/x64 API Hooking Library
5. Various methods for capturing the screen
6. Вывод графики на рабочий стол Windows с использованием оверлеев DirectX
7. Project JEDI
8. Реализация перехвата вызовов API — исчерпывающе про внедрение DLL, если разобраться, + это на Delphi
UPD:
9. Серия видео уроков Пишем D3D-хук — все понятно, только в Delphi перенести нужно.
UPD 2:
Научился рисовать в Direct3D и ловить интерфейс IDirect3DDevice9. Теперь делаю DLL ловушку для реализации снимков.
-
Посмотрите класс, реализующий альтернативный Sleep (под катом).
соль в следующем:
создаем потомка TThread, запускаем, ждем завершения:
class function TDelays.Delay(aDuration: integer): TDelay; begin if not Assigned(FList) then FList := TList<TDelay>.Create; Result := TDelay.Create(aDuration); FList.Add(Result); Result.FreeOnTerminate := false; Result.OnTerminate := OnTerminateItem; Result.Start; Result.WaitFor; end;
Работаем с ним нежно
procedure TDelay.Execute; begin inherited; while (not Terminated) and (MilliSecondsBetween(now, FStart) < FDelay) do begin sleep(100); end; end;
По завершении работы убиваем:
class procedure TDelays.OnTerminateItem(Sender: TObject); begin TTask.Run( procedure begin try if Assigned((Sender as TDelay)) then begin (Sender as TDelay).Free; FList.Remove((Sender as TDelay)); end; except end; end); end;
А можем убить и досрочно:
(TObject as TDelay).Free;
потому что в деструкторе стоит такой код:
destructor TDelay.Destroy; begin Terminate; if (not Suspended) then WaitFor; inherited; end;
-
2 часа назад, Kitty сказал:
Вроде тут похожая проблема:
только не поняла, а что же надо сделать?...
Мой манифест в общей папке проекта AndroidManifest.template.xml:
<?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%"> <%application-meta-data%> <%services%> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <%activity%> <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" /> <%receivers%> </application> </manifest> <!-- END_INCLUDE(manifest) -->
А такой манифест AndroidManifest.xml в паке релиз:
<?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ua.com.mikros.Promo" android:versionCode="1" android:versionName="1.0.0" android:installLocation="auto"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <permission android:name="ua.com.mikros.Promo.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="ua.com.mikros.Promo.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="False" android:restoreAnyVersion="False" android:label="Promo" android:debuggable="True" android:largeHeap="False" android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme" android:hardwareAccelerated="true"> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="Promo" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="Promo" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" /> <receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" /> <receiver android:exported="true" android:name="com.embarcadero.gcm.notifications.GCMNotification" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="ua.com.mikros.Promo" /> </intent-filter> </receiver> </application> </manifest> <!-- END_INCLUDE(manifest) -->
В чем различия?
-
В 24.03.2017 в 23:27, ENRGY сказал:
За ответ — зачет, плюсанул на стэке.
А права прописаны в Permissions проекта, но для Android 6.0 и выше запрашиваю еще и дополнительно.
-
В MIUI вообще сервисы Delphi не запускаются.
Всем обладателям Xiaomi привет!
Отключил энергосбережение, предоставил приложению все привилегии. Смартфон ведет себя как iPhone.
Может кто-то знает как это лечится?
Redmi 4, Andorid 6.0.1, MIUI Global 8.0.
-
В итоге, я пересел обратно на съемку фото через TAction.
В Берлине 10.1.2 для Android 6+ делаю запрос прав на камеру и доступ к внешнему хранилищу (камера не обязательно, потому что съемка ведется нативным приложением) — все нормально заработало.
-
1 час назад, ENRGY сказал:
Спасибо большое за пример.
Вопрос, как сделать чтобы фото не добавлялось в Library?
Читая примеры гугла, я так понял, что придется лезть в папку library и удалять последнюю фотку, если это сильно нужно.
-
В 01.03.2017 в 00:28, AlexShaman сказал:
Что-то у меня не получается.
Такая же ошибка, как у вас,
добавил PhotoIntent.setFlags(TJIntent.javaclass.FLAG_ACTIVITY_NEW_TASK ); ошибка ушла, но не срабатывает callback
Какая версия Delphi, Andorid?
REQUEST_IMAGE_CAPTURE поменяли?
-
1 час назад, Вадим Смоленский сказал:
Перевожу большой проект из VCL в FMX. В ходе запуска на главном окне много чего рисуется и выравнивается; соответствующий код записан в FormShow. Пока всё не отработало, показывается заставка, splash window. В конце, как и положено, запускается Application.Run, на экране появляется готовая главная форма, а заставка убивается Под VCL всё это выглядело именно так. Под FMX же главная форма выводится на экран в самом начале отрисовки, вместе с заставкой, и пользователь вынужден наблюдать всю отрисовку в режиме реального времени, с мельканиями и дерганиями. Как подавить этот преждевременный вывод?
А показывать сплэш поверх всех элементов до момента полной отрисовки не вариант?
-
4 минуты назад, wamaco сказал:
Как то так делал, пишу по памяти.... Все работало без установленного офиса Строка подключения СonnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source= ' + СокрЛП(ФайлEXCEL) + ';Extended Properties="Excel 8.0;HDR=YES;IMEX=1;';
ADODBConnection := COMОбъект("ADODB.Connection");
ADODBConnection.ConnectionString := СonnectionString; ADODBConnection.Open();
="SELECT * FROM ["++"$]"; //= "ADODB.Recordset");.(,);(..) THEN
и т.д.
Технически такое возможно, если драйвер Jet позволяет работать с файлами Excel, как с источниками данных без установленного пакета MS Office.
Фактически ADODB дергает нужную DLL, которая определяет логику работы с источником.
-
-
Сделал пример приложения для работы с Microsoft Word из приложения Delphi.
Такое приложение может использоваться для обмена данными между объектами семейства Microsoft Office.
Исходные коды приложения помогут вам понять, как работать с объектной моделью Microsoft Word.
Чтобы лучше разобраться с нюансами Word, предлагаю ознакомиться со справочником Word VBA reference на MSDN.
Проект создан в среде FireMonkey Delphi Berlin 10.1
Протестирован в MS Word 2010, 2016, Windows 7x64 и 10x64.
Чтобы посмотреть пример, просто распакуйте zip-файл проекта и щелкайте по порядку кнопки на форме.
Снимок экрана в полноэкранном приложении DirectX
в Windows
Опубликовано
давай уже ссылку, может там люди что-нить еще рассказывают )