On-line: Pasha, Haz, гостей 1. Всего: 3 [подробнее..]
АвторСообщение
Andrey
постоянный участник




Пост N: 1929
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.11.11 21:36. Заголовок: Примеры из Минигуи -ошибки, вопросы..... (продолжение)


Всем привет.
Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ?
А заодно может и исправить и добавить новые....

Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах)
Предложение Григорию:
Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ?

Пример: \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.



Спасибо: 0 
Профиль
Ответов - 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() ?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3712
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.18 15:54. Заголовок: CreateFolder() возвр..


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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3713
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.03.18 16:15. Заголовок: Andrey пишет: Или н..


Andrey пишет:

 цитата:
Или нужно делать старый клиперовский вариант MakeDir(), где есть обработка ошибок.



С точки зрения winapi функции hb_dirCreate aka MakeDir и CreateFolder работают одинаково. Кроме анализа результата конечно.
Так что лучше использовать MakeDir.

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5794
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.03.18 16:17. Заголовок: Pasha пишет: Ее над..


Pasha пишет:

 цитата:
Ее надо воткнуть куда-нибудь вроде c_winapimisc.c, можно в конец файла



Спасибо БОЛЬШОЕ !

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5798
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.03.18 01:45. Заголовок: Эта функция уже реал..


Эта функция уже реализована в Харбор библиотеке hbwin под именем wapi_GetLastError () /Григорий/
Оказывается есть такая проверка !

Pasha пишет:

 цитата:
Так что лучше использовать MakeDir.


Да уже привык в МиниГуи писать везде CreateFolder().

Спасибо: 0 
Профиль
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 это не делают.

Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 794
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 30.03.18 10:55. Заголовок: Я использую ..


Я использую

 цитата:

DISKCHANGE(Left(sDir,1))
DIRCHANGE(sDir)
nErrorCode:=DIRMAKE(sTxt2)


Это одно и тоже с MakeDir?
Ошибки обрабатываются, т.е выдаются. Два раза одну и ту же директорию не создашь.
А коды ошибок где почитать ?

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3715
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.03.18 11:06. Заголовок: DirMake - это функци..


DirMake - это функция из ct. DiskChange/DirChange - функции харбора.
Поскольку DirMake из ct, как и MakeDir из ядра харбора, реализованы через харборовский файловый api, то и обработка ошибок у них одинаковая.

Функции из minigui - это отдельное независимое государство, даже если в конце концов они выполняют те же самые вызовы winapi, поэтому средства обработки ошибок харбора они не используют. Должны быть свои средства. Достаточно маленькой обертки для GetLastError.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3716
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.03.18 11:13. Заголовок: Pasha пишет: А коды..


Pasha пишет:

 цитата:
А коды ошибок где почитать ?



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

Спасибо: 0 
Профиль
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 ) ) );
}

тоже самое можно сделать еще с несколькими подобными функциями. Работать они будут так же, но появится возможность анализа ошибок стандартными средствами харбора.

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5800
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.03.18 15:02. Заголовок: Вопрос возник... Мож..


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

Где то пример видел в библиотеке с вводом пароля, там окно было не стандартное, фигурное.
Искал и не нашёл.



Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6793
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.03.18 16:19. Заголовок: Andrey пишет: Искал..


Andrey пишет:

 цитата:
Искал и не нашёл.


А искал вообще ?
C:\MiniGUI\SAMPLES\BASIC\Login_2\

ЗЫ
Как пить дать Андрей скажет что искал только по слову Pass

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5802
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.03.18 20:56. Заголовок: Dima пишет: А искал..


Dima пишет:

 цитата:
А искал вообще ?


Все папки вручную перерыл. Помню, видел такой пример.
Спасибо Дима !

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5810
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.04.18 08:23. Заголовок: Всем привет ! Как м..


Всем привет !

Как можно получить размер PNG-файла из ресурсов ?
Есть функция типа - GetImageSizeFromRes() ?

Или нужно в коде выгрузить PNG-файл из ресурсов на диск, а потом уже узнавать размер файла:
nResult := RCDataToFile( "IMAGE1", cDiskFile, "PNG" )
aSize := hb_GetImageSize( cDiskFile )

Спасибо: 0 
Профиль
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()


Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 5811
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.04.18 16:24. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
если изменить функцию GetImageInfo() таким образом:


Спасибо БОЛЬШОЕ ! Буду использовать !

Может всё таки добавите ЯВНО функцию в библиотеку, чтобы можно было потом ею пользоваться ?
GetImageSizeFromRes() - понятное название функции.
Вот такой код примерно -
Скрытый текст



Тем более встречал такое - METHOD GetImageSizeFromFile( ... )

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 6798
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.04.18 16:36. Заголовок: Andrey пишет: Тем б..


Andrey пишет:

 цитата:
Тем более встречал такое - METHOD GetImageSizeFromFile( ... )


Вероятно тут C:\MiniGUI\SAMPLES\Advanced\RMChart_DLL_2\

Спасибо: 0 
Профиль
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 и пр.
Думаю плодить сущности не стоит, достаточно для работы.

Спасибо: 0 
Профиль
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 ?
Но чтобы форма оставалась прозрачной !


Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 637
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет