Автор | Сообщение |
Andrey
|
| постоянный участник
|
Пост N: 1929
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.11.11 21:36. Заголовок: Примеры из Минигуи -ошибки, вопросы..... (продолжение)
Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \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
|
| постоянный участник
|
Пост N: 5793
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.03.18 15:48. Заголовок: Pasha пишет: Наверн..
Pasha пишет: цитата: | Наверное надо сделать обертку для GetLastError() |
| А в МиниГуи нет разве стандартной обработки для функций типа CreateFolder() ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3712
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.03.18 15:54. Заголовок: CreateFolder() возвр..
CreateFolder() возвращает логическое значение. При неудаче надо анализировать GetLastError, а обертки для нее похоже нет. Ее надо воткнуть куда-нибудь вроде c_winapimisc.c, можно в конец файла
|
|
|
Pasha
|
| Администратор
|
Пост N: 3713
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.03.18 16:15. Заголовок: Andrey пишет: Или н..
Andrey пишет: цитата: | Или нужно делать старый клиперовский вариант MakeDir(), где есть обработка ошибок. |
| С точки зрения winapi функции hb_dirCreate aka MakeDir и CreateFolder работают одинаково. Кроме анализа результата конечно. Так что лучше использовать MakeDir.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5794
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.03.18 16:17. Заголовок: Pasha пишет: Ее над..
Pasha пишет: цитата: | Ее надо воткнуть куда-нибудь вроде c_winapimisc.c, можно в конец файла |
| Спасибо БОЛЬШОЕ !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5798
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.03.18 01:45. Заголовок: Эта функция уже реал..
Эта функция уже реализована в Харбор библиотеке hbwin под именем wapi_GetLastError () /Григорий/ Оказывается есть такая проверка ! Pasha пишет: цитата: | Так что лучше использовать MakeDir. |
| Да уже привык в МиниГуи писать везде CreateFolder().
|
|
|
Pasha
|
| Администратор
|
Пост N: 3714
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.03.18 09:43. Заголовок: Andrey пишет: Эта ф..
Andrey пишет: цитата: | Эта функция уже реализована в Харбор библиотеке hbwin под именем wapi_GetLastError () |
| Для minigui эта функция не прокатит. wapi_GetLastError возвращает код ошибки, которая возникла при выполнении другой функции из библиотеки hbwin. Эта функция должна установить ошибку вызовом hbwapi_SetLastError / wapi_SetLastError. Функции из minigui это не делают.
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 794
Зарегистрирован: 13.10.05
|
|
Отправлено: 30.03.18 10:55. Заголовок: Я использую ..
Я использую цитата: | DISKCHANGE(Left(sDir,1)) DIRCHANGE(sDir) nErrorCode:=DIRMAKE(sTxt2) |
| Это одно и тоже с MakeDir? Ошибки обрабатываются, т.е выдаются. Два раза одну и ту же директорию не создашь. А коды ошибок где почитать ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3715
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.03.18 11:06. Заголовок: DirMake - это функци..
DirMake - это функция из ct. DiskChange/DirChange - функции харбора. Поскольку DirMake из ct, как и MakeDir из ядра харбора, реализованы через харборовский файловый api, то и обработка ошибок у них одинаковая. Функции из minigui - это отдельное независимое государство, даже если в конце концов они выполняют те же самые вызовы winapi, поэтому средства обработки ошибок харбора они не используют. Должны быть свои средства. Достаточно маленькой обертки для GetLastError.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3716
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.03.18 11:13. Заголовок: Pasha пишет: А коды..
Pasha пишет: цитата: | А коды ошибок где почитать ? |
| Поскольку харбор многоплатформенный, то функция HB_OSERROR возвращает код ошибки соответствующей ОС, в нашем случае Windows. Эти коды надо искать в winapi Но есть еще функция DosError, которая транслирует коды ошибок каждой ОС в старые коды MS DOS.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3717
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.03.18 12:25. Заголовок: Кстати, можно легко ..
Кстати, можно легко интегрировать файловые функции minigui в harbour file api таким образом: HB_FUNC( CREATEFOLDER ) { // вместо // hb_retl( CreateDirectory( ( LPCTSTR ) hb_parc( 1 ), NULL ) ); hb_retl( hb_fsMkDir( hb_parc( 1 ) ) ); } тоже самое можно сделать еще с несколькими подобными функциями. Работать они будут так же, но появится возможность анализа ошибок стандартными средствами харбора.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1270
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.03.18 12:32. Заголовок: Pasha пишет: Для mi..
Pasha пишет: цитата: | Для minigui эта функция не прокатит. |
| Спасибо за разъяснение этого вопроса Pasha пишет: цитата: | воткнуть куда-нибудь вроде c_winapimisc.c |
| Добавмл функцию-обертку GetLastError() в этот файл. Vlad04 пишет: цитата: | коды ошибок где почитать ? |
| Они есть в файле bcc55\include\error.h
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5800
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.03.18 15:02. Заголовок: Вопрос возник... Мож..
Вопрос возник... Можно ли показать прозрачный PNG-файл произвольной формы (допустип круг) сразу на рабочем столе ? Или на форме, только убрать (сделать невидимым) само окно, оставив картинку. Где то пример видел в библиотеке с вводом пароля, там окно было не стандартное, фигурное. Искал и не нашёл.
|
|
|
Dima
|
| |
Пост N: 6793
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.03.18 16:19. Заголовок: Andrey пишет: Искал..
Andrey пишет: А искал вообще ? C:\MiniGUI\SAMPLES\BASIC\Login_2\ ЗЫ Как пить дать Андрей скажет что искал только по слову Pass
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5802
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.03.18 20:56. Заголовок: Dima пишет: А искал..
Dima пишет: Все папки вручную перерыл. Помню, видел такой пример. Спасибо Дима !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5810
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.04.18 08:23. Заголовок: Всем привет ! Как м..
Всем привет ! Как можно получить размер PNG-файла из ресурсов ? Есть функция типа - GetImageSizeFromRes() ? Или нужно в коде выгрузить PNG-файл из ресурсов на диск, а потом уже узнавать размер файла: nResult := RCDataToFile( "IMAGE1", cDiskFile, "PNG" ) aSize := hb_GetImageSize( cDiskFile )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1273
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.04.18 11:48. Заголовок: Andrey пишет: Как м..
Andrey пишет: цитата: | Как можно получить размер PNG-файла из ресурсов ? |
| Это возможно сделать в примере из папки Basic\Login_2, если изменить функцию GetImageInfo() таким образом: 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()
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5811
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.04.18 16:24. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | если изменить функцию GetImageInfo() таким образом: |
| Спасибо БОЛЬШОЕ ! Буду использовать ! Может всё таки добавите ЯВНО функцию в библиотеку, чтобы можно было потом ею пользоваться ? GetImageSizeFromRes() - понятное название функции. Вот такой код примерно - Скрытый текст
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()
| Тем более встречал такое - METHOD GetImageSizeFromFile( ... )
|
|
|
Dima
|
| |
Пост N: 6798
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.04.18 16:36. Заголовок: Andrey пишет: Тем б..
Andrey пишет: цитата: | Тем более встречал такое - METHOD GetImageSizeFromFile( ... ) |
| Вероятно тут C:\MiniGUI\SAMPLES\Advanced\RMChart_DLL_2\
|
|
|
Haz
|
| |
Пост N: 1222
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.04.18 17:01. Заголовок: Dima пишет: Вероятн..
Dima пишет: цитата: | Вероятно тут C:\MiniGUI\SAMPLES\Advanced\RMChart_DLL_2\ |
| c DLL мутить не очень хочется ради одной функции. Тем более , что все и так есть причем в сырцах минмгуя MiniGUI\SOURCE\c_bitmap.c 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 */ Андрей предложил обертку для этого, но ведь функция читает не только из ресурса , и как минимум название предложенного это не отражает PS Причем , эта обертка всего лишь добавляет сообщение об ошибке PPS. Кроме того в библиотеке бостаурос есть аналоги ВT_BITMAPWIDTH и пр. Думаю плодить сущности не стоит, достаточно для работы.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5813
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.04.18 14:47. Заголовок: Всем привет ! Взял с..
Всем привет ! Взял сделал свой пример на базе примера SAMPLES\BASIC\Login_2. В нём команда SET WINDOW frmCheckUser TRANSPARENT TO COLOR aPicBackColor не компилируется... Выдаёт ошибку при компиляции. 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. Исправил на команду SetLayeredWindowAttributes( GetFormHandle( "frmCheckUser" ), ( aPicBackColor[1] + ( aPicBackColor[2] * 256 ) + ( aPicBackColor[3] * 65536 ) ), 0, 0x01 ) Компиляция прошла, всё работает... Одна незадача - чёрный цвет вообще пропал, стал прозрачным. Поменял черный цвет на темно-синий. Терпимо. Окантовка кнопок на форме черная поменялась на прозрачную. Как менять окантовку кнопок на темно-синий не знаю как ... И вообще, можно ли изменить aPicBackColor := BLACK на другой цвет, который чаще всего не используется ? Допустим на FUCHSIA ? Но чтобы форма оставалась прозрачной !
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|