Примеры из Минигуи -ошибки, вопросы..... (продолжение)
Andrey: Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах) Предложение Григорию: Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ? Пример: \MiniGUI\SAMPLES\Advanced\DisplayMode - не работает под ХР и далее.... Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР -------------------------------------------------------------------------------- Harbour MiniGUI Errorlog File Harbour MiniGUI Extended Edition 2.0.1 - 2011.09.21 -------------------------------------------------------------------------------- Date: 11/15/2011 Time: 22:13:24 Error BASE/1124 Argument error: LEFT Called from LEFT(0) Called from SCANSOFT(195) Called from MAIN(84) Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается... Z:\MiniGUI\SAMPLES\BASIC\MsgEdit>call ..\..\..\batch\compile.bat demo /L shell32 Harbour 3.1.0dev (Rev. 17042) Copyright (c) 1999-2011, http://harbour-project.org/ Compiling 'demo.prg'... Lines 20133, Functions/Procedures 30 Generating C source output to 'demo.c'... Done. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland demo.c: Error E2141 demo.prg 993: Declaration syntax error *** 1 errors in Compile *** C compile error.
SergKis: Dima пишет По большому счету в ON INIT можно и убрать поставить тиймер с сообщением на время и будет долбить фото. Не помогло однако у меня работает нормально, 1-раз инициализация, 2-раз пошла фото, так же и при restore ok
Dima: SergKis Я тупанул , сорри. Не придал значения этой строке и не добавлял ее (This.Object):Event( 1, {|| CaptureImage() }) Все работает отлично Спасибо !
SergKis: Dima С событиями, такой пример получается [pre2] *-----------------------------------------------------------------------------* Procedure Main *-----------------------------------------------------------------------------* SET OOP ON IF StatusOk != GdiplusInitExt( _GDI_GRAPHICS ) MsgStop( "Init GDI+ Error", "Error" ) RETURN ENDIF _GdiplusInitLocal() DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 440 + GetBorderWidth() ; HEIGHT 300 + GetTitleHeight() + GetBorderHeight() ; TITLE 'WebCam Preview Demo' ; MAIN ; NOMAXIMIZE NOSIZE ; ON INIT ( wPost(3), wPost(3) ) ; // capture initialization ON RELEASE CloseWebCam() ; ON RESTORE ( wPost(3), wPost(3) ) ; // capture initialization (This.Object):Event( 1, {| | CreateWebCam() }) (This.Object):Event( 2, {| | CloseWebCam(), ; This.Image_1.hBitmap := Nil }) (This.Object):Event( 3, {| | CaptureImage() }) (This.Object):Event( 9, {|ow| ow:Release() }) @ 20,60 WEBCAM WebCam_1 ; WIDTH 250 HEIGHT 210 ; RATE 20 ; START DEFINE IMAGE Image_1 ROW 120 COL 280 WIDTH 150 HEIGHT 110 STRETCH .T. END IMAGE DEFINE BUTTON Button_1 ROW 10 COL 20 WIDTH 120 CAPTION 'Start WebCam' ACTION wPost(1) // CreateWebCam() END BUTTON DEFINE BUTTON Button_2 ROW 10 COL 150 WIDTH 120 CAPTION 'Stop WebCam' ACTION wpost(2) // CloseWebCam() END BUTTON DEFINE BUTTON Button_3 ROW 80 COL 315 WIDTH 80 CAPTION 'Capture' ACTION wPost(3) // CaptureImage() END BUTTON DEFINE LABEL Label_1 ROW 59 COL 19 WIDTH 252 HEIGHT 212 BORDER .T. END LABEL DEFINE LABEL Label_2 ROW 119 COL 279 WIDTH 152 HEIGHT 112 BORDER .T. END LABEL ON KEY ESCAPE ACTION wPost(9) // ThisWindow.Release END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return *-----------------------------------------------------------------------------* FUNC wPost( nEvent, nIndex ) *-----------------------------------------------------------------------------* (ThisWindow.Object):PostMsg(nEvent, nIndex) DO EVENTS RETURN Nil *-----------------------------------------------------------------------------* FUNC wSend( nEvent, nIndex ) *-----------------------------------------------------------------------------* (ThisWindow.Object):SendMsg(nEvent, nIndex) DO EVENTS RETURN Nil ... [/pre2]
SergKis: PS пропустил, вместо ON RELEASE CloseWebCam() ; надо ON RELEASE wPost(2) ; и (This.Object):Event( 1, {| | CreateWebCam(), wPost(3) })
SergKis: Плюс в пример пульт управления [pre2] *-----------------------------------------------------------------------------* Procedure Main *-----------------------------------------------------------------------------* SET OOP ON IF StatusOk != GdiplusInitExt( _GDI_GRAPHICS ) MsgStop( "Init GDI+ Error", "Error" ) RETURN ENDIF _GdiplusInitLocal() DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 440 + GetBorderWidth() ; HEIGHT 300 + GetTitleHeight() + GetBorderHeight() ; TITLE 'WebCam Preview Demo' ; MAIN ; NOMAXIMIZE NOSIZE ; ON INIT ( wPost(3), wPost(3) ) ; // capture initialization ON RELEASE wPost(2) ; ON RESTORE ( wPost(3), wPost(3) ) ; // capture initialization (This.Object):Event( 1, {| | CreateWebCam(), wPost(3) }) // +capture initialization (This.Object):Event( 2, {| | CloseWebCam(), ; This.Image_1.hBitmap := Nil }) (This.Object):Event( 3, {| | CaptureImage() }) (This.Object):Event( 4, {|ow| RemoteControl(ow) }) (This.Object):Event( 9, {|ow| ow:Release() }) @ 20,60 WEBCAM WebCam_1 ; WIDTH 250 HEIGHT 210 ; RATE 20 ; START DEFINE IMAGE Image_1 ROW 120 COL 280 WIDTH 150 HEIGHT 110 STRETCH .T. END IMAGE DEFINE BUTTON Button_1 ROW 10 COL 20 WIDTH 120 CAPTION 'Start WebCam' ACTION wPost(1) // CreateWebCam() END BUTTON DEFINE BUTTON Button_2 ROW 10 COL 150 WIDTH 120 CAPTION 'Stop WebCam' ACTION wPost(2) // CloseWebCam() END BUTTON DEFINE BUTTON Button_3 ROW 80 COL 315 WIDTH 80 CAPTION 'Capture' ACTION wPost(3) // CaptureImage() END BUTTON DEFINE LABEL Label_1 ROW 59 COL 19 WIDTH 252 HEIGHT 212 BORDER .T. END LABEL DEFINE LABEL Label_2 ROW 119 COL 279 WIDTH 152 HEIGHT 112 BORDER .T. END LABEL DEFINE BUTTON Button_4 ROW This.Label_2.Row + This.Label_2.Height + 10 COL This.Label_2.Col + 40 WIDTH 80 CAPTION 'Remote' ACTION wPost(4) // RemoteControl() END BUTTON ON KEY ESCAPE ACTION wPost(9) // ThisWindow.Release END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return *-----------------------------------------------------------------------------* FUNC wPost( nEvent, nIndex ) *-----------------------------------------------------------------------------* (ThisWindow.Object):PostMsg(nEvent, nIndex) DO EVENTS RETURN Nil *-----------------------------------------------------------------------------* FUNC wSend( nEvent, nIndex ) *-----------------------------------------------------------------------------* (ThisWindow.Object):SendMsg(nEvent, nIndex) DO EVENTS RETURN Nil *-----------------------------------------------------------------------------* STATIC FUNC RemoteControl( oWnd ) *-----------------------------------------------------------------------------* LOCAL nY := 10, nX := 20, nW := 120 DEFINE WINDOW Pult ; AT App.Row + App.Height + 2 + GetBorderHeight(), App.Col ; WIDTH App.Width ; HEIGHT 50 + GetTitleHeight() + GetBorderHeight() ; TITLE 'Remote Control' ; MODAL NOSIZE; ON RELEASE Nil (This.Object):Event( 1, {| | oWnd:PostMsg(1) }) (This.Object):Event( 2, {| | oWnd:PostMsg(2) }) (This.Object):Event( 3, {| | oWnd:PostMsg(3) }) (This.Object):Event( 9, {|ow| ow:Release() }) DEFINE BUTTON Button_1 ROW nY COL nX WIDTH nW CAPTION 'Start WebCam' ACTION wPost(1) // CreateWebCam() END BUTTON nX += This.Button_1.Width + 10 DEFINE BUTTON Button_2 ROW nY COL nX WIDTH nW CAPTION 'Stop WebCam' ACTION wPost(2) // CloseWebCam() END BUTTON nX += This.Button_2.Width + 10 DEFINE BUTTON Button_3 ROW nY COL nX WIDTH nW CAPTION 'Capture' ACTION wPost(3) // CaptureImage() END BUTTON ON KEY ESCAPE ACTION wPost(9) // ThisWindow.Release END WINDOW ACTIVATE WINDOW Pult RETURN Nil [/pre2]
Dima: SergKis Пример понятен. Спасибо. Не понятно почему без такого подхода глючил Image_1 на Form_1 Ведь не должен. Ведь в других примерах с IMAGE , при сворачивании окна и последующем поднятии ни чего ведь не глючит.....
Dima: SergKis пишет: Надо расставить DO EVENTS и заработает, очередь не успевает обработаться, сообщения теряются. Понял тебя. Есть еще вопрос. Имеем запись в файл gPlusSaveHBitmapToFile( hBitmap, "webcam.jpg", nWidth, nHeight, "image/jpeg", 100 ) (переделал на JPG) Хотелка: что бы в качестве nWidth и nHeight подставлялись значения исходя из максимального разрешения самой камеры. Как то можно дернуть характеристики камеры ?
Dima: Пробнул тест снятия скриншота математикой что шла с камерой. Фоткал документ. На выходе получил картинку с разрешением 2048 на 1536. Текст довольно читаем. Попробовал сделать скриншот с помощью webcam_2 где в LoadFromClpbrd подправил nWidth, nHeight на 2048 и 1536 И в gPlusSaveHBitmapToFile тоже подправил nWidth, nHeight на 2048 и 1536. Текст на картине получил не такой читаемый и расплывчатый. С 6-м параметром в gPlusSaveHBitmapToFile , игрался , не помогает. Разве что ухудшить можно качество делая его меньше 100. Больше 100 , не пашет и видимо и не должно. В чем прикол ? Еще поигрался и вроде все дело в cap_EditCopy , именно она ложит в буфер такое корявое изображение. Поставил паузу после cap_EditCopy и слямздил из буфера картинку в PAINT , так и есть.......
Dima: Может кто то портировать в Harbour функцию capSetVideoFormat ?
Dima: gfilatov2002 Спасибо Странный меседж получил во время сборки Warning W8019 demo.prg 784: Code has no effect in function HB_FUN_CAPSETVIDEOFORMAT
gfilatov2002: Dima пишет: Warning W8019 Просто добавь подавление этого предупреждения; #pragma BEGINDUMP #include <hbapi.h> #include <windows.h> #include <vfw.h> #if defined( __BORLANDC__ ) #pragma warn -use /* unused var */ #pragma warn -eff /* no effect */ #endif ...
Dima: Поменяли вебкамеру на Logitech c920 , разрешение у нее конечно приличное по сравнению c270. Поменял разрешение с помощью capSetVideoFormat на 2304 x 1536 и оба примера WEBCAM и WEBCAM_2 начали жутко тормозить , когда иногда удается нажать кнопку снять капчу , то картинка реально нормальная , правда размер в BMP (если) , то почти 11 метров ))) Попробовал фокус с https://github.com/michael4jonas/capcam , снимает норм и тормозов таких нет. Запускал командой capcam.exe 0 -r18 -fjpg -odd2.jpg Где r18 ( 18: 2304 x 1536) PS Что то не пруха с этой камерой ))
Dima: Dima пишет: Поменял разрешение с помощью capSetVideoFormat Кажись этого и не надо было делать так как тормоза....... А надо юзать capCaptureSetSetup (а может и нет) , но понятно что с её написанием ни кто не поможет :) Хотелось бы что б видео как отображалось так и отображается а вот что бы Капча снялась с нужным разрешением и не 640 на 480 (и не преобразованное из 640 на 480 в большее)
Haz: Dima пишет: о понятно что с её написанием ни кто не поможет Ну прям и никто Сюда глянь http://forums.fivetechsupport.com/viewtopic.php?t=5695 там есть это и многое другое [pre2] HB_FUNC( CAPCAPTURESETSETUP ) { CAPTUREPARMS Capture; hb_retl( capCaptureSetSetup( (HWND) hb_parnl( 1 ), &Capture, sizeof( CAPTUREPARMS ) )); } [/pre2]
Andrey: Использую функцию из МиниГуи CreateFolder(). Проблем не было. Но под работой Win2008 Server не удаётся создать папку для пользователя. Как получить код ошибки для этой функции ? Или нужно делать старый клиперовский вариант MakeDir(), где есть обработка ошибок. Или можно использовать DosError() и всё ? Мне просто проверить негде такую ситуацию.
PSP: Andrey пишет: под работой Win2008 Server не удаётся создать папку для пользователя Где пытаешься создать папку?
Andrey: PSP пишет: Где пытаешься создать папку? Функция GetUserTempFolder() по пути C:\Users\ЮЗЕР\AppData\Local\Temp У всех нормально, а у этого сервера ошибка - папку не создаёт !
Pasha: Наверное надо сделать обертку для GetLastError() Примерно так: [pre2]HB_FUNC( GETLASTERROR ) { hb_retnl( GetLastError() ); }[/pre2]