Данный сайт является проектом ООО "Амакс". Сегодня: Воскресенье, 04.12.2016, 09:03

Приветствую Вас Гость

Loading
[ Новые сообщения · Участники · Правила форума · RSS · ?
Loading
Страница 1 из 212»
Неофициальный форум технической поддержки Hikvision » Оборудование и программное обеспечение Hikvision » Разное » Hikvision SDK для DELPHI (Адаптация Hikvision SDK для DELPHI)
Hikvision SDK для DELPHI
MaxGomonovДата: Среда, 27.02.2013, 15:54 | Сообщение # 1
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
Как обещал в этой ветке выкладываю то, что у меня пока получилось в плане адаптации SDK для delphi.

А получилось пока следующее:
- Авторизоваться
- Вывести изображение с камеры на форму
- Получить текущий фрейм (в jpeg) в буфер
- обрабатывать сообщения (движение и т.п.)
- сохранять скриншоты на диск.

Планирую (необходимо):
- запись видео на диск по движению (если это реально)
- вычисление скорости движения
- более детальная обработка событий
- настройка устройства

Собственно ссылки:
Модуль (.pas)
Демка=)
добавил во вложении.
Прикрепления: HikVisionSDK.pas(11Kb) · HIKDEMO.rar(879Kb)


Сообщение отредактировал MaxGomonov - Среда, 27.02.2013, 16:45
 
AlexandrДата: Среда, 27.02.2013, 16:07 | Сообщение # 2
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
а где в демке логин\пасс ?
 
MaxGomonovДата: Среда, 27.02.2013, 16:15 | Сообщение # 3
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
если честно, не продумал этот момент=(
логин/пасс в исходниках    (admin 12345)
 
AlexandrДата: Среда, 27.02.2013, 16:17 | Сообщение # 4
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
надо додумать ) хоть бы в cfg закинуть.
 
MaxGomonovДата: Среда, 27.02.2013, 16:48 | Сообщение # 5
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
Обновил ссылку, теперь можно вручную вводить, пока так
Прикрепления: 0482709.rar(879Kb)
 
PriestДата: Вторник, 05.03.2013, 14:31 | Сообщение # 6
Группа: Проверенные
Сообщений: 2
Репутация: 0
Статус: Offline
Вот такая строка выдает картинку в браузере http://192.168.168.204/dispatch.asp?user=admin&pass=12345&page=preview.asp[&]
А ваш код у меня не работает. Запускаю в Delphi 7, ошибок не выдает, но и не рисует ничего. В чем может быть проблема?
 
AlexandrДата: Вторник, 05.03.2013, 14:59 | Сообщение # 7
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
Priest, для этого нужно по ссылке в начале пройти, речь идёт о DS-6101HFI-IP. у камеры несколько другой способ получения картинки.
 
PriestДата: Вторник, 05.03.2013, 15:09 | Сообщение # 8
Группа: Проверенные
Сообщений: 2
Репутация: 0
Статус: Offline
Версия библиотек не та была. Старую скопировал и все заработало
 
MaxGomonovДата: Четверг, 07.03.2013, 20:10 | Сообщение # 9
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
Доработал немного модуль HikVisionSDK.pas
Добавил:
- функцию записи видео в файл (NET_DVR_SaveRealData)
- функцию остановки записи видео (NET_DVR_StopSaveRealData)
- функцию установки callback на приход фрейма (PlayM4_SetDisplayCallBack)

Начал разбираться с модулем PlayM4.pas
Добавил:
- захват изображения в jpeg (PlayM4_GetJPEG)
- Установка типа таймера (PlayM4_SetTimerType)
- захват изображения в bmp (PlayM4_GetBMP)
- освобождение порта (PlayM4_FreePort)
- инициализация порта (PlayM4_GetPort)

Демку подготовить нет времени, но по названию функций можете все найти в мануале для HikVisionSDK.pas и для  PlayM4.pas

Собственной сами модули:
HikVisionSDK.pas
PlayM4.pas
Прикрепления: Code.zip(8Kb)
 
vxgДата: Пятница, 22.03.2013, 09:04 | Сообщение # 10
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
подскажите пожалуйста удалось ли вам разобраться с модулем playm4 (в частности - с функцией PlayM4_GetJPEG). интересует не прототип функции, а технология ее использования: есть желание делать снимки не выводя картинку на экран. нужно ли при этом открывать поток? обязательно ли при этом проигрывать поток?
 
MaxGomonovДата: Пятница, 22.03.2013, 10:46 | Сообщение # 11
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
Перед выполнением функции PlayM4_GetJPEG() обязательно необходимо и открытие потока, и его воспроизведение.
С другой стороны в файле  HikVisionSDK.pas есть функция NET_DVR_CaptureJPEGPicture() которая сохраняет картинку без открытия и воспроизведения потока (необходимо просто подключится к устройству)
 
vxgДата: Пятница, 22.03.2013, 12:43 | Сообщение # 12
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
я не уверен в методе который использует функция NET_DVR_CaptureJPEGPicture для получения картинки. это непосредственный запрос картинки с устройства или тот же самый вызов PlayM4_GetJPEG(NET_DVR_GetPlayBackPlayerIndex(), ...) ?
 
MaxGomonovДата: Пятница, 22.03.2013, 15:21 | Сообщение # 13
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
В описании к функции NET_DVR_CaptureJPEGPicture сказано "This API is used to capture a frame and save to JPEG file"
т.е. это сохранение текущего полученного фрейма в файл.
Так же есть функция NET_DVR_CaptureJPEGPicture_NEW - получение картинки в буфер
 
vxgДата: Понедельник, 25.03.2013, 09:52 | Сообщение # 14
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
если для корректного выполнения функции PlayM4_GetJPEG необходимо воспроизведение потока (странно, что открытия потока и запихивания в него данных недостаточно, зачем нужно запускать воспроизведение которое просто рисует эти данные в окно - неясно), то как без этого обходится функция NET_DVR_CaptureJPEGPicture? мне нужно сделать снимок без отображения видео. сохранять в файл и потом читать его не хочу. JPEG в памяти не устраивает - нужен BMP для последующего масштабирования. пробовал PlayM4_GetJPEG(NET_DVR_GetPlayBackPlayerIndex(), ...) - пока получается бред. функция возвращает ноль. +непонятно как быть с размером буфера. пробовал вызывать с буфером размером в байт что бы получить реальный размер - размер приходит, но вызов функции с буфером этого размера все равно приводит к ошибке. пробовал вычислять размер предварительно вызвав PlayM4_GetPictureSize - не возвращает размеров картины. подсовывал огромный буфер гарантированно вмещающий картину - все равно брыкается.
 
AlexandrДата: Понедельник, 25.03.2013, 11:30 | Сообщение # 15
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
а может дело в прошивке девайса ? ведь sdk обновляли для новых аппаратов и не все функции адекватно работают на старых..
 
MaxGomonovДата: Понедельник, 25.03.2013, 11:50 | Сообщение # 16
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
Чтобы получить BMP я делал так:
(playHandle - ID, полученный функцией PlayM4_GetPort())
Вызов функции:
   
Код
...
     var bmp: TBitmap;
begin
     bmp := GetBMP(CAM_PLAYHANDLE);
     // делаем с bmp все что надо =)
end;


Код
function GetBMP(playHandle: Longint): TBitmap;
var rbs: PDWORD;
     ps: PChar;
     i1,i: longint;
     bSize: DWORD;
     ms: TMemoryStream;
begin
   try
     result := TBitmap.Create();
     if playHandle < 0 then exit;
     bSize := 3000000;
     ms := TMemoryStream.Create;
     new(ps);
     GetMem(ps,bSize);
     new(rbs);
     if PlayM4_GetBMP(playHandle,ps,bSize,rbs) then begin
       i1 := rbs^;
       if i1>100000 then begin
         ms.WriteBuffer(ps[0],i1);
         MS.Position:= 0;
         result.LoadFromStream(ms);
       end;
     end;
   finally
     FreeMemory(ps);
     FreeMemory(rbs);
     ms.Free;
     ps :=nil;
     rbs := nil;
     ms := nil;
   end;
end;
 
vxgДата: Понедельник, 25.03.2013, 12:08 | Сообщение # 17
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
bSize := 3000000; как то не по нашему выглядит smile
попробую еще раз
 
MaxGomonovДата: Понедельник, 25.03.2013, 12:22 | Сообщение # 18
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
=) Согласен
По сути, bSize  - это максимальный размер буфера, который Вы хотите принять! Я взял с запасом, на 3 мегабайта=)
rbs - это фактический размер изображения.
Если указать bSize  меньше, чем размер изображения реальный, то функция  PlayM4_GetBMP вернет false (или ошибку, точно не помню)
 
vxgДата: Вторник, 26.03.2013, 11:17 | Сообщение # 19
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
итак, результат.
1 дело не в прошивке - это вызовы функций библиотеки PlayCtrl которая просто обрабатывает поступающий от устройства поток.
2 NET_DVR_GetPlayBackPlayerIndex() у меня всегда возвращает -1. при этом NET_DVR_GetLastError() возвращает 12 (NET_DVR_ORDER_ERROR - API calling order error). таким образом NET_DVR_GetPlayBackPlayerIndex - это не то, что мне нужно. по наивности думал, что штатное воспроизведение идет так же при помощи PlayM4_Play и вызывая NET_DVR_GetPlayBackPlayerIndex мы получаем порт штатного воспроизведения. на самом деле это какой-то другой порт. полагаю это порт воспроизведения файлов функциями NET_DVR_PlayBackByName и NET_DVR_PlayBackByTime.
3 пришлось писать функцию обратного вызова g_RealDataCallBack_V30 которая получает порт, устанавливает режим потока, открывает поток, воспроизводит его и добавляет в него приходящие данные. как и писал MaxGomonov без воспроизведения получить данные не удается. еще один интересный момент. если при разрыве связи не остановить воспроизведение, не закрыть поток и не освободить порт, то при последующем восстановлении связи (если мы получаем новый порт) на экране будет происходить "кошмар": такое впечатление, что воспроизводятся сразу два потока.
4 размера буфера требуемого PlayM4_GetBMP получаю как и планировал при помощи PlayM4_GetPictureSize. размер вычисляется как:
sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + w * h * 4
5 сейчас доделываю разбор приходящего BMP. он приходит в таком виде в каком хранится на диске. поэтому приходится считывать строки в обратном порядке. и с цветами какая-то заморочка. подзабыл уже формат smile

Добавлено (26.03.2013, 11:17)
---------------------------------------------
удивительные вещи... у меня в среде размер BITMAPFILEHEADER равен 16 когда должен быть 14 и никакие настройки среды над ним не властны. пришлось прописывать размер вручную вместо sizeof(BITMAPFILEHEADER)

 
MaxGomonovДата: Вторник, 26.03.2013, 11:59 | Сообщение # 20
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
По поводу пункта 3 - я так тоже делаю=) и думаю так правильно, т.к. в мануале китайском так и написано делать
Подробнее о формате буфера, который приходит от устройства:
Я всю обработку изображений от устройства делаю в  функции обратного вызова DisplayCallBack (PlayM4_SetDisplayCallBack).
Она срабатывает каждый раз, когда приходят данные (аудио, картинка) от устройства. У функции есть параметры: тип данных, размер и т.п.
От моего устройства приходят данные только в формате YV12
Дальше я обрабатываю кадр и перегоняю его в BMP, JPG.
Если интересует, могу выложить исходник перекодировки из YV12 в RGB (чтобы с цветом проблем не было)
 
vxgДата: Вторник, 26.03.2013, 12:17 | Сообщение # 21
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
ну, я работаю с PlayM4_GetBMP. как я понял из документов он не может вернуть ничего кроме RGBA поэтому голова пока не болит. или может?
 
MaxGomonovДата: Вторник, 26.03.2013, 13:18 | Сообщение # 22
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
Нет, если получать картинку функцией PlayM4_GetBMP то проблем быть не должно.
 
vxgДата: Среда, 27.03.2013, 08:05 | Сообщение # 23
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
вопрос: корректна ли передача в PlayM4_Play hwnd = 0 если мы не хотим что бы у нас рисовалось изображение?
 
MaxGomonovДата: Среда, 27.03.2013, 09:23 | Сообщение # 24
Группа: Проверенные
Сообщений: 18
Репутация: 2
Статус: Offline
функция PlayM4_Play допускает передачу ей параметра хендла окна равным "0".
Никаких проблем мной замечено не было.
 
vxgДата: Среда, 27.03.2013, 10:18 | Сообщение # 25
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
ну, у меня тоже все нормально. просто я опасаюсь что где-то в недрах функции она делает GetDC с переданным мной нулем и получает в качестве контекста рабочий стол. впрочем, раз она на нем не рисует значит она так не делает. просто в документации на эту тему пусто.

Добавлено (27.03.2013, 10:18)
---------------------------------------------
обновил свое приложение
http://www.hikvision.msk.ru/forum/4-99-3326-16-1354536501
прямая ссылка
http://alphacity.netii.net/tree/prjs-web.htm
/ipc preview - web-сервер для просмотра видео с IP-камер Hikvision/
теперь забираю картинку через обратный вызов. раньше забирал из окна. процессорн­ое время выделяемое­ приложению­ несколько возросло (примерно на 25-30 %). зато теперь ничего не загоражива­ет изображени­е и можно запускать в невидимом режиме.
 
AlexandrДата: Среда, 27.03.2013, 13:22 | Сообщение # 26
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
а вот рискну подкинуть идейку, в родном софте такого нет, но иногда запрашиают: сделать простенький клиент для ip с плавающим окном, только превью. чтобы можно было типа виджета выводить с камеры или рега изображение поверх рабочих приложений пользователя. насчёт платности\бесплатности - на усмотрение разраба естественно) типа домофона на рабочем столе. потом можно нарастить меню с выбором камер из списка )) ну в общем суть вроде понятна.
 
vxgДата: Среда, 27.03.2013, 16:29 | Сообщение # 27
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
обозначенная программа кроме всего прочего вроде целиком удовлетворяет этому описанию. разве что добавить пункт "поверх всех окон".

Добавлено (27.03.2013, 16:29)
---------------------------------------------
...а вообще дома для таких целей использую браузер. почему бы и нет?

 
AlexandrДата: Среда, 27.03.2013, 16:43 | Сообщение # 28
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
несовсем, именно как виджет хочется. т.е. произвольный размер окна , в любом удобном месте док, менять прозрачность при необходимости. ну в общем много чего можно накрутить ) при тревоге моргает и "плюмкает" пускай ) браузер же неудобен в этом плане. вот с камерами проще - в плеер ссылку кинул и вся недолга, почти со всеми вышеперечисленными возможностями.
 
vxgДата: Среда, 27.03.2013, 16:57 | Сообщение # 29
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
размер окна произвольный. позиционировать окно пользователь может. прозрачность... сейчас такого нет. тревоги тоже. потому как очень специфичные вещи. а разве речь не о камерах?

Добавлено (27.03.2013, 16:57)
---------------------------------------------
впрочем, вечером можно набросать вариант. таскаемое за любую точку окно без шапки лежащее поверх всех других с изменяемой прозрачностью. спрятываемое при желании в область рядом с часами. правильно понял? но только без тревоги ибо не работал с таким. а если расширять его камерами - так это получится клон родного софта hk smile

 
AlexandrДата: Среда, 27.03.2013, 18:01 | Сообщение # 30
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
ога) наподобии информера погоды, валюты, etc. сидит некий офис мэн\вумэн и работает со своим штатным офисным (или не очень  biggrin ) ПО, а в окошке поглядывает идёт начальник или нет по шапке настучать )) в общем то задачка выходит за рамки классики cctv и больше относится к приблудам, потому и написал про виджет. аналогов в штатном ПО нет, на данный момент реализуется через просмотр потокового видео устройств Hikvision, Daum PotPlayer позволяет сделать почти всё вышеперечисленное. но в нём для задачи много лишнего. ну и с тревогами\переговорами у него не выйдет ничего, ведь плеер таки. а тут можно всё это прикрутить, хоть бы и на уровне плагинов впоследствии. уж очень правильная (имхо) идея у TC )
ведь развивать можно и до чата, и до управления замком входной двери\шлагбаума\турникета, ptz. в общем есть куда двигаться ))
пс - иногда жалею что забил на программирование )) особенно когда на некоторые "шедевры" натыкаюсь )
 
vxgДата: Пятница, 29.03.2013, 10:07 | Сообщение # 31
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
вот результат сегодняшних изысканий. по факту - на существующую прогу наклеил много страз. теперь можно окно таскать за любую точку, менять прозрачность, закреплять поверх всех окон, прятать в трей, убирать шапку, лазать по настройкам (ну, кроме демо режима и режима демона) и перезапускать сервер/подключаться к камере (еще не пробовал). выкладываю для просмотра альфу (только exe файл, корень сервера и dll остались те же - скачивайте по ссылке).

Добавлено (28.03.2013, 16:32)
---------------------------------------------
странно, не прикрепляется к сообщению...

Добавлено (28.03.2013, 16:34)
---------------------------------------------
залил на свою страницу http://alphacity.netii.net/tree/prjs-web.htm

Добавлено (29.03.2013, 10:07)
---------------------------------------------
в связи с некоторыми чудесами выявленными во время тестов так же на сайте существует последняя, ipc_preview_2013_03_26.rar без украшений, стабильная версия.
 
AlexandrДата: Понедельник, 01.04.2013, 13:13 | Сообщение # 32
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
направление верное )
 
vxgДата: Вторник, 09.04.2013, 23:00 | Сообщение # 33
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
победить возникновение шлейфа за окном при рисовании видео на прозрачной форме не удается ( ... кто-нибудь знает как вообще playm4 делает прорисовку имея в своем распоряжении hwnd? что-то он нехорошее делает от чего окно начинает безумно мигать и оставлять за собой след из фантомов при перетаскивании...

Добавлено (04.04.2013, 15:55)
---------------------------------------------
...а если щелкнуть вне окна изображение выводится нормально. но форма становится недоступной для щелчка (как будто был WM_SETREDRAW = FALSE). и в любом случае остается непрозрачной в области вывода изображения. наблюдается только в XP. подозреваю что playm4 рисует на моей форме не синхронизируясь с потоком формы. при включении прозрачности форма пытается вывести фон, а поверх него содержимое. на месте фона оказывается рисованный playm4 кадр. хотя может я ошибаюсь.

Добавлено (05.04.2013, 15:53)
---------------------------------------------
...обновил версию на сайте. победить прозрачность в XP не удалось. программа сама отслеживает версию ОС и если она меньше чем у Vista удаляет пункты меню относящиеся к прозрачности в режиме просмотра потока от камеры (в демо-режиме эти пункты доступны). вот такой вот финт ушами. может если когда-нибудь пойму почему оно так елозит отключу эту проверку.

Добавлено (09.04.2013, 23:00)
---------------------------------------------
любопытно что функция получения BMP в новых версиях SDK возвращает BMP со строками расположенными в ином порядке чем в предыдущей версии SDK smile

 
AlexandrДата: Среда, 10.04.2013, 10:30 | Сообщение # 34
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
ещё можно добавит возможность выбора из нескольких камер, типа "избранного" в IE. а в остальном всё вроде пашет нормально ) что там по условиям использования ? ))
 
vxgДата: Четверг, 18.04.2013, 09:51 | Сообщение # 35
Группа: Проверенные
Сообщений: 28
Репутация: 1
Статус: Offline
выложил новую версию. добавлено: список камер, глобальная горячая клавиша показывающая/скрывающая приложение, сохранение рисунков в оригинальном разрешении видео-потока. условия использования: пользуйтесь как угодно вплоть до полного копирования исходного кода в сторонний коммерческий проект smile

Добавлено (18.04.2013, 09:51)
---------------------------------------------
отчет о построенной с использованием упомянутой программы системы можно посмотреть на http://habrahabr.ru/post/177071/

 
AlexandrДата: Понедельник, 20.05.2013, 14:02 | Сообщение # 36
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
в общем недельный полёт показал стабильную работу, автору респект ) а с прозрачностью под ХП - забить ) это "рюшечки" по большому счёту.
 
vankaДата: Четверг, 05.09.2013, 13:46 | Сообщение # 37
Группа: Проверенные
Сообщений: 1
Репутация: 0
Статус: Offline
День добрый!

А не приходилось ли кому прикручивать цифровую стабилизацию к видеопотоку?

Стоит такая задача (камера на подвижном основании). Начал копать, нашел фильтр для AviSynth. Он работает с записанными на диск видеофайлами.
Но есть 2 проблемы:
1. Как прикрутить его к видеопотоку (в реальном времени)
2. AviSynth работает со многими форматами, но формат HikVision не понимает. А фильтр который можно поставить для MediaPlayer с AviSynth видимо не работает. Т.е. просто открыть в AviSynth записанное видео в формате HikVision не получается.

Может кто сталкивался с проблемой или знает другие способы решения задачи.
 
SergeiДата: Пятница, 06.06.2014, 10:20 | Сообщение # 38
Группа: Проверенные
Сообщений: 5
Репутация: 0
Статус: Offline
Здравствуйте!

Камера DS-2CD2132-I. Логин к камере проходит нормально, а картинки нет. В чем может быть проблема? Подскажите, пожалуйста!

Разобрался.


Сообщение отредактировал Sergei - Пятница, 06.06.2014, 15:35
 
AlexandrДата: Понедельник, 07.07.2014, 23:55 | Сообщение # 39
Группа: Администраторы
Сообщений: 5311
Репутация: 109
Статус: Offline
Цитата Sergei ()
Разобрался.

а поделиться ? ))
 
vik7878Дата: Суббота, 25.04.2015, 12:44 | Сообщение # 40
Группа: Проверенные
Сообщений: 2
Репутация: 0
Статус: Offline
MaxGomonov, добрй день. Пытался подключится к камере HIKVISION  DC-2CD2612F-is.
Демка ошибок не выдает, но видео не отображается.
В браузере 
Код
http://192.0.0.64/dispatch.asp?user=admin&amp;pass=12345&amp;page=preview.asp[&amp;]
  видео нормально идет.
Подскажите как вывести видео. или хотя бы Битовую картинку в image.
 
Неофициальный форум технической поддержки Hikvision » Оборудование и программное обеспечение Hikvision » Разное » Hikvision SDK для DELPHI (Адаптация Hikvision SDK для DELPHI)
Страница 1 из 212»
Поиск: