Форум » GUI » Примеры из Минигуи -ошибки, вопросы..... (продолжение) » Ответить

Примеры из Минигуи -ошибки, вопросы..... (продолжение)

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.

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Andrey: Pasha пишет: Наверное надо сделать обертку для GetLastError() А в МиниГуи нет разве стандартной обработки для функций типа CreateFolder() ?

Pasha: CreateFolder() возвращает логическое значение. При неудаче надо анализировать GetLastError, а обертки для нее похоже нет. Ее надо воткнуть куда-нибудь вроде c_winapimisc.c, можно в конец файла

Pasha: Andrey пишет: Или нужно делать старый клиперовский вариант MakeDir(), где есть обработка ошибок. С точки зрения winapi функции hb_dirCreate aka MakeDir и CreateFolder работают одинаково. Кроме анализа результата конечно. Так что лучше использовать MakeDir.


Andrey: Pasha пишет: Ее надо воткнуть куда-нибудь вроде c_winapimisc.c, можно в конец файла Спасибо БОЛЬШОЕ !

Andrey: Эта функция уже реализована в Харбор библиотеке hbwin под именем wapi_GetLastError () /Григорий/ Оказывается есть такая проверка ! Pasha пишет: Так что лучше использовать MakeDir. Да уже привык в МиниГуи писать везде CreateFolder().

Pasha: Andrey пишет: Эта функция уже реализована в Харбор библиотеке hbwin под именем wapi_GetLastError () Для minigui эта функция не прокатит. wapi_GetLastError возвращает код ошибки, которая возникла при выполнении другой функции из библиотеки hbwin. Эта функция должна установить ошибку вызовом hbwapi_SetLastError / wapi_SetLastError. Функции из minigui это не делают.

Vlad04: Я использую DISKCHANGE(Left(sDir,1)) DIRCHANGE(sDir) nErrorCode:=DIRMAKE(sTxt2) Это одно и тоже с MakeDir? Ошибки обрабатываются, т.е выдаются. Два раза одну и ту же директорию не создашь. А коды ошибок где почитать ?

Pasha: DirMake - это функция из ct. DiskChange/DirChange - функции харбора. Поскольку DirMake из ct, как и MakeDir из ядра харбора, реализованы через харборовский файловый api, то и обработка ошибок у них одинаковая. Функции из minigui - это отдельное независимое государство, даже если в конце концов они выполняют те же самые вызовы winapi, поэтому средства обработки ошибок харбора они не используют. Должны быть свои средства. Достаточно маленькой обертки для GetLastError.

Pasha: Pasha пишет: А коды ошибок где почитать ? Поскольку харбор многоплатформенный, то функция HB_OSERROR возвращает код ошибки соответствующей ОС, в нашем случае Windows. Эти коды надо искать в winapi Но есть еще функция DosError, которая транслирует коды ошибок каждой ОС в старые коды MS DOS.

Pasha: Кстати, можно легко интегрировать файловые функции minigui в harbour file api таким образом: HB_FUNC( CREATEFOLDER ) { // вместо // hb_retl( CreateDirectory( ( LPCTSTR ) hb_parc( 1 ), NULL ) ); hb_retl( hb_fsMkDir( hb_parc( 1 ) ) ); } тоже самое можно сделать еще с несколькими подобными функциями. Работать они будут так же, но появится возможность анализа ошибок стандартными средствами харбора.

gfilatov2002: Pasha пишет: Для minigui эта функция не прокатит. Спасибо за разъяснение этого вопроса Pasha пишет: воткнуть куда-нибудь вроде c_winapimisc.c Добавмл функцию-обертку GetLastError() в этот файл. Vlad04 пишет: коды ошибок где почитать ? Они есть в файле bcc55\include\error.h

Andrey: Вопрос возник... Можно ли показать прозрачный PNG-файл произвольной формы (допустип круг) сразу на рабочем столе ? Или на форме, только убрать (сделать невидимым) само окно, оставив картинку. Где то пример видел в библиотеке с вводом пароля, там окно было не стандартное, фигурное. Искал и не нашёл.

Dima: Andrey пишет: Искал и не нашёл. А искал вообще ? C:\MiniGUI\SAMPLES\BASIC\Login_2\ ЗЫ Как пить дать Андрей скажет что искал только по слову Pass

Andrey: Dima пишет: А искал вообще ? Все папки вручную перерыл. Помню, видел такой пример. Спасибо Дима !

Andrey: Всем привет ! Как можно получить размер PNG-файла из ресурсов ? Есть функция типа - GetImageSizeFromRes() ? Или нужно в коде выгрузить PNG-файл из ресурсов на диск, а потом уже узнавать размер файла: nResult := RCDataToFile( "IMAGE1", cDiskFile, "PNG" ) aSize := hb_GetImageSize( cDiskFile )

gfilatov2002: Andrey пишет: Как можно получить размер PNG-файла из ресурсов ? Это возможно сделать в примере из папки Basic\Login_2, если изменить функцию GetImageInfo() таким образом: [pre]FUNCTION GetImageInfo( cPicFile, nPicWidth, nPicHeight ) LOCAL hBitmap, aSize hBitmap := C_GetResPicture( cPicFile ) aSize := GetBitmapSize( hBitmap ) DeleteObject( hBitmap ) nPicWidth := aSize [1] nPicHeight := aSize [2] RETURN (nPicWidth > 0) // GetImageInfo() [/pre]

Andrey: gfilatov2002 пишет: если изменить функцию GetImageInfo() таким образом: Спасибо БОЛЬШОЕ ! Буду использовать ! Может всё таки добавите ЯВНО функцию в библиотеку, чтобы можно было потом ею пользоваться ? GetImageSizeFromRes() - понятное название функции. Вот такой код примерно - [pre2]FUNCTION GetImageSizeFromRes( cResName ) LOCAL cMsg, hBitmap, aSize := {0,0} hBitmap := C_GetResPicture( cResName ) aSize := GetBitmapSize( hBitmap ) DeleteObject( hBitmap ) If aSize[1] == 0 .OR. aSize[2] == 0 cMsg := "Calling from: " + ProcName(0) + "(" + hb_ntos(ProcLine(0)) + ") -> " + ProcFile(0) + CRLF + CRLF cMsg += "There is no such resource in the exe file!" + CRLF + CRLF cMsg += "Invalid name: " + cResName + CRLF + CRLF MsgStop( cMsg , "Error" ) endif RETURN aSize // GetImageSizeFromRes()[/pre2] Тем более встречал такое - METHOD GetImageSizeFromFile( ... )

Dima: Andrey пишет: Тем более встречал такое - METHOD GetImageSizeFromFile( ... ) Вероятно тут C:\MiniGUI\SAMPLES\Advanced\RMChart_DLL_2\

Haz: Dima пишет: Вероятно тут C:\MiniGUI\SAMPLES\Advanced\RMChart_DLL_2\ c DLL мутить не очень хочется ради одной функции. Тем более , что все и так есть причем в сырцах минмгуя MiniGUI\SOURCE\c_bitmap.c [pre2] HB_FUNC( HB_GETIMAGESIZE ) { int x = 0, y = 0; GetImageSize( hb_parcx( 1 ), &x, &y ); hb_reta( 2 ); HB_STORNI( x, -1, 1 ); HB_STORNI( y, -1, 2 ); } /* Harbour MiniGUI 1.3 Extended (Build 33) Author P.Chornyj Function BitmapSize() --------------------- Syntax BitmapSize( xBitmap ) --> aTarget Arguments <xBitmap> is the NAME of the bitmap file or resource or <xBitmap> is the handle to OBJ_BITMAP Returns BitmapSize() returns an array has the following structure: ---------------------------------------------------------- Position Metasymbol i_bitmap.ch ---------------------------------------------------------- 1 nWidth BM_WIDTH 2 nHeight BM_HEIGHT 3 nBitsPerPixel BM_BITSPIXEL ---------------------------------------------------------- If file or resource are not found or corrupt, or is not OBJ_BITMAP, BitmapSize returns an array {0, 0, 4} for compatibility */ [/pre2] Андрей предложил обертку для этого, но ведь функция читает не только из ресурса , и как минимум название предложенного это не отражает PS Причем , эта обертка всего лишь добавляет сообщение об ошибке PPS. Кроме того в библиотеке бостаурос есть аналоги ВT_BITMAPWIDTH и пр. Думаю плодить сущности не стоит, достаточно для работы.

Andrey: Всем привет ! Взял сделал свой пример на базе примера SAMPLES\BASIC\Login_2. В нём команда [pre2] SET WINDOW frmCheckUser TRANSPARENT TO COLOR aPicBackColor[/pre2] не компилируется... Выдаёт ошибку при компиляции. Harbour 3.2.0dev (r1803161710) Copyright (c) 1999-2018, https://harbour.github.io/ form_LoginPassw.prg(161) Error E0030 Syntax error "syntax error at 'WINDOW'" 1 error No code generated. Исправил на команду [pre2] SetLayeredWindowAttributes( GetFormHandle( "frmCheckUser" ), ( aPicBackColor[1] + ( aPicBackColor[2] * 256 ) + ( aPicBackColor[3] * 65536 ) ), 0, 0x01 )[/pre2] Компиляция прошла, всё работает... Одна незадача - чёрный цвет вообще пропал, стал прозрачным. Поменял черный цвет на темно-синий. Терпимо. Окантовка кнопок на форме черная поменялась на прозрачную. Как менять окантовку кнопок на темно-синий не знаю как ... И вообще, можно ли изменить aPicBackColor := BLACK на другой цвет, который чаще всего не используется ? Допустим на FUCHSIA ? Но чтобы форма оставалась прозрачной !



полная версия страницы