Pax Beach

Пользователи
  • Публикации

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

  • Посещение

  • Days Won

    8

Pax Beach last won the day on 23 января

Pax Beach had the most liked content!

О Pax Beach

  • Звание
    Продвинутый пользователь

Информация

  • Пол
    Мужчина
  • Город
    Moscow

Контакты

  • Skype
    PaxBeach
  • StackOverflow
    http://stackoverflow.com/users/6255550/pax-beach

Посетители профиля

800 просмотров профиля
  1. Привожу пример готового 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
  2. Товарищи, как полет с такими настройками, кто пробовал еще?
  3. Еще вопрос — какая версия NDK 32 или 64 bit?
  4. Спасибо, будем тестить на мажорных версиях, как будет время.
  5. Можно плиз последнее поле NDK развернуть? Чем обусловлен выбор платформы android-17 в NDK, при этом в SDK android-25?
  6. Скрины настроек каталогов SDK и NDK пожалуйста
  7. Приведенный класс не корректно работает в полноэкранном режиме. К тому же в режиме DirectX не верно определяется видеоадаптер. Разбираюсь с этим пока.
  8. Поиск — это искусство. Спасибо тебе огромное! Не понимаю, как я мог его не найти.
  9. Мне нужно сделать снимок экрана из своего приложения в приложении DirectX (в игре). По-быстрому накидал приложение, исходники здесь: MakeScreenshot-Forum.zip 1. по нажатию единственной кнопки будет выполнена серия из 16 снимков экрана. Если запущен Скайп, то фотографироваться будет содержимое его окна. 2. По нажатии CTRL+ALT+F9 будет сделан единичный снимок 3. Label внизу показывает сколько миллисекунд затрачено на вывод снимка 4. В комментах так же вы найдете, как работать со снимками через буфер обмена. Работа выполняется через GetDC(NULL); Windows 10 x64. Снимки делаются. И DirectX тоже нормально фотографируется. НО! только в оконных приложениях. Если приложение DirectX полноэкранное, то на всех снимках одна и та же картинка с первого снимка. То есть изменение буфера экрана в приложении ни как не отражается на снимках. Что нужно? Необходимо делать снимки конкретного приложения через интерфейс DirectX, а точнее, я так понимаю, через DirectShow. Тогда не будет разницы в окне оно или на полный экран. Помогите плиз, знающие люди, с решением этой задачи. Гарантирую вам от сообщества большой почет, от меня огромный респект, если это принесет доход, то еще и очень приятный бонус. Ссылки теме: 1. DIRECTX FOR DELPHI 2. unofficial version of DelphiX 3. DirectX для начинающих 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 ловушку для реализации снимков.
  10. Посмотрите класс, реализующий альтернативный 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; uDelays.zip
  11. За ответ — зачет, плюсанул на стэке. А права прописаны в Permissions проекта, но для Android 6.0 и выше запрашиваю еще и дополнительно.
  12. В MIUI вообще сервисы Delphi не запускаются. Всем обладателям Xiaomi привет! Отключил энергосбережение, предоставил приложению все привилегии. Смартфон ведет себя как iPhone. Может кто-то знает как это лечится? Redmi 4, Andorid 6.0.1, MIUI Global 8.0.
  13. В итоге, я пересел обратно на съемку фото через TAction. В Берлине 10.1.2 для Android 6+ делаю запрос прав на камеру и доступ к внешнему хранилищу (камера не обязательно, потому что съемка ведется нативным приложением) — все нормально заработало.