Автор | Сообщение |
|
| постоянный участник
|
Пост N: 935
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.10.09 15:12. Заголовок: Как проверить есть ли картинка в EXE файле ?
Привет всем ! Подскажите как можно в программе проверить, есть ли картинка (например "test.jpg") в EXE-файле, соответственно в ресурсном файле, я включаю картинку. Это нужно для того, чтоб одну программу ставить нескольким пользователям. И в файле настроек ставить разные картинки. Заранее спасибо.
|
|
|
Ответов - 6
[только новые]
|
|
|
| модератор
|
Пост N: 1074
Зарегистрирован: 25.05.05
|
|
Отправлено: 12.10.09 16:06. Заголовок: Andrey пишет: как м..
Andrey пишет: цитата: | как можно в программе проверить, есть ли картинка (например "test.jpg") в EXE-файле |
| Попробуй использовать следующую функцию: цитата: | HB_FUNC( WIN_LOADRESOURCE ) { HANDLE hInstance = NULL; /* Set default return value */ hb_retc_null(); if( hb_winmainArgGet( &hInstance, NULL, NULL ) ) { LPTSTR lpName = HB_TCHAR_CONVTO( hb_parcx( 1 ) ); LPTSTR lpType = HB_TCHAR_CONVTO( hb_parcx( 2 ) ); HRSRC hRes = FindResource( ( HMODULE ) hInstance, ( LPCTSTR ) lpName, ( LPCTSTR ) lpType ); if( hRes ) { HGLOBAL hMem = LoadResource( NULL, hRes ); if( hMem ) { void * pMem = LockResource( hMem ); if( pMem ) hb_retclen( ( char * ) pMem, SizeofResource( NULL, hRes ) ); } } HB_TCHAR_FREE( lpName ); HB_TCHAR_FREE( lpType ); } } |
| Вызов: WIN_LOADRESOURCE( "Имя ресурса", "JPG" ) --> если возврат пустой, то картинки нет
|
|
|
|
| постоянный участник
|
Пост N: 936
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.10.09 19:50. Заголовок: Спасибо, получилось ..
Не получилось ! cLogoFile := "Harbour_1.jpg" IF WIN_LOADRESOURCE( cLogoFile, "JPG" ) == "" //NIL MsgStop( "Нет такой картинки в ресурсах: "+cLogoFile+" !", "Ошибка" ) ENDIF Почему то всегда выдает "" ? И выдает предупреждение на эту строчку: if( hb_winmainArgGet( &hInstance, NULL, NULL ) ) А понял ! Если запросить, по "имени ресурса" то все работает ! А как быть с именем файла ?
|
|
|
|
| постоянный участник
|
Пост N: 939
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.10.09 17:21. Заголовок: Почему то при сборке..
Почему то при сборке с этой новой функцией, выдается предупреждение: Warning W8065 Source\\SBU.prg 535: Call to function 'hb_winmainArgGet' with no prototype in function HB_FUN_WIN_LOADRESOURCE Как сделать, чтоб это предупреждение пропало ?
|
|
|
|
| модератор
|
Пост N: 1079
Зарегистрирован: 25.05.05
|
|
Отправлено: 22.10.09 18:17. Заголовок: Andrey пишет: Как с..
Andrey пишет: цитата: | Как сделать, чтоб это предупреждение пропало ? |
| Проверь, чтобы секция С-кода начиналась так (см. выделенный текст): ... #pragma BEGINDUMP #define HB_OS_WIN_32_USED #define _WIN32_WINNT 0x0400 #include <windows.h> #include "hbapi.h" ... HB_FUNC( WIN_LOADRESOURCE ) { ...
|
|
|
|
| постоянный участник
|
Пост N: 940
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.10.09 19:23. Заголовок: Не помогает, у меня ..
Не помогает, у меня уже стояло: #include <windows.h> #include "hbapi.h"
|
|
|
|
| |
Пост N: 148
Зарегистрирован: 28.06.05
|
|
Отправлено: 23.10.09 13:57. Заголовок: танцую с бубном
|
|
|
|