Автор | Сообщение |
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.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
Dima
|
| |
Пост N: 6574
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.09.17 09:08. Заголовок: Можно ли прицепить и..
Можно ли прицепить иконку на окно при вызове InputBox , не выдергивая сырец и не правя его руками ?
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1179
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.09.17 09:49. Заголовок: Dima пишет: Можно л..
Dima пишет: цитата: | Можно ли прицепить иконку на окно при вызове InputBox |
| Да, копай команду Рабочий пример лежит в папке samples\Basic\InputBox
|
|
|
Dima
|
| |
Пост N: 6575
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.09.17 10:03. Заголовок: gfilatov2002 Спасиб..
gfilatov2002 Спасибо !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5555
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.10.17 15:54. Заголовок: Использую для окна к..
Использую для окна команду: SET INTERACTIVECLOSE OFF DEFINE WINDOW &cFormName ; .... ON RELEASE {|| My(), как здесь дать команду INTERACTIVECLOSE в зависимости от состояния предыдущей команды } Правилен ли будет следующий код ? nWinClose := _HMG_InteractiveClose SET INTERACTIVECLOSE OFF DEFINE WINDOW &cFormName ; .... ON RELEASE {|| My(), IIF( nWinClose == 0, , _HMG_InteractiveClose := 1 ) }
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1634
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.10.17 17:06. Заголовок: Andrey пишет Правиле..
Andrey пишет цитата: | Правилен ли будет следующий код ? |
| Если работает правильно, то правильный h_events.prg ... //********************************************************************** CASE WM_CLOSE //********************************************************************** ... IF ISBLOCK ( _HMG_aFormInteractiveCloseProcedure [ i ] ) r := _DoWindowEventProcedure ( _HMG_aFormInteractiveCloseProcedure [ i ] , i , 'WINDOW_ONINTERACTIVECLOSE' ) IF ValType ( r ) == 'L' .AND. r == .F. RETURN ( 1 ) ENDIF ENDIF IF lParam <> 1 SWITCH _HMG_InteractiveClose CASE 0 MsgStop ( _HMG_MESSAGE [3] ) RETURN ( 1 ) CASE 2 IF ! MsgYesNo ( _HMG_MESSAGE [1] , _HMG_MESSAGE [2] ) RETURN ( 1 ) ENDIF EXIT CASE 3 IF _HMG_aFormType [ i ] == 'A' IF ! MsgYesNo ( _HMG_MESSAGE [1] , _HMG_MESSAGE [2] ) RETURN ( 1 ) ENDIF ENDIF END SWITCH ENDIF ... IF _HMG_aFormType [ i ] == 'A' ReleaseAllWindows() ELSE IF ISBLOCK( _HMG_aFormReleaseProcedure [ i ] ) _HMG_InteractiveCloseStarted := .T. _DoWindowEventProcedure ( _HMG_aFormReleaseProcedure [ i ] , i , 'WINDOW_RELEASE' ) ENDIF ...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5556
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.10.17 18:49. Заголовок: SergKis пишет: Если..
SergKis пишет: цитата: | Если работает правильно, то правильный |
| Да вроде работает ! До этого нельзя было окна другие крестиком закрывать.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5557
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.10.17 20:14. Заголовок: Как назначить на окн..
Как назначить на окно иконку из System.SystemFolder + "\shell32.dll ? Сделал ResEdit листинг shell32dll.rc, там иконка допустим 90-я: 176 ICON "Icon_90.ico" Пробовал сделать так: LOCAL hFormIcon := ExtractIcon( System.SystemFolder + "\shell32.dll", 90 ) SET DEFAULT ICON TO "Icon_90.ico" Но это неправильно же. #command SET DEFAULT ICON TO <iconname> имени иконки в ресурсах ехе-ника нет, значит подставлять бесполезно. Можно получить только хендл иконки из shell32.dll А как этот хендл привязать к окну ?
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1186
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.10.17 21:01. Заголовок: Andrey пишет: Как н..
Andrey пишет: цитата: | Как назначить на окно иконку из System.SystemFolder + "\shell32.dll ? |
| Посмотри рабочий пример ниже: Скрытый текст
/* * MiniGUI Demo * */ #include "minigui.ch" Procedure MAIN LOCAL cIconSrc := System.SystemFolder + "\shell32.dll" SET MULTIPLE OFF WARNING SaveThisIcon( cIconSrc, 90 ) SET DEFAULT ICON TO System.TempFolder + '\temp.ico' DEFINE WINDOW Form_1 ; TITLE "Icon from shell32.dll" ; MAIN ; ON RELEASE Ferase( System.TempFolder + '\temp.ico' ) END WINDOW Form_1.Activate() Return ///////////////////////////////////////////////////////////////////////////////// Function SaveThisIcon( cSrcName, nI ) LOCAL cFileName := System.TempFolder + '\temp.ico' IF !SaveIcon( cFileName, cSrcName, nI ) MsgInfo( "Icon NOT saved!", "Error" ) ENDIF Return NIL ///////////////////////////////////////////////////////////////////////////////// #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" // // ICONS (.ICO type 1) are structured like this: // // ICONHEADER (just 1) // ICONDIR [1...n] (an array, 1 for each image) // [BITMAPINFOHEADER+COLOR_BITS+MASK_BITS] [1...n] (1 after the other, for each image) // // CURSORS (.ICO type 2) are identical in structure, but use // two monochrome bitmaps (real XOR and AND masks, this time). // typedef struct { WORD idReserved; // must be 0 WORD idType; // 1 = ICON, 2 = CURSOR WORD idCount; // number of images (and ICONDIRs) } ICONHEADER; // // An array of ICONDIRs immediately follow the ICONHEADER // typedef struct { BYTE bWidth; BYTE bHeight; BYTE bColorCount; BYTE bReserved; WORD wPlanes; // for cursors, this field = wXHotSpot WORD wBitCount; // for cursors, this field = wYHotSpot DWORD dwBytesInRes; DWORD dwImageOffset; // file-offset to the start of ICONIMAGE } ICONDIR; // // After the ICONDIRs follow the ICONIMAGE structures - // consisting of a BITMAPINFOHEADER, (optional) RGBQUAD array, then // the color and mask bitmap bits (all packed together // typedef struct { BITMAPINFOHEADER biHeader; // header for color bitmap (no mask header) } ICONIMAGE; // // Write the ICO header to disk // static UINT WriteIconHeader(HANDLE hFile, int nImages) { ICONHEADER iconheader; UINT nWritten; // Setup the icon header iconheader.idReserved = 0; // Must be 0 iconheader.idType = 1; // Type 1 = ICON (type 2 = CURSOR) iconheader.idCount = nImages; // number of ICONDIRs // Write the header to disk WriteFile(hFile, (LPVOID) &iconheader, sizeof(iconheader), (LPDWORD) &nWritten, NULL); // following ICONHEADER is a series of ICONDIR structures (idCount of them, in fact) return nWritten; } // // Return the number of BYTES the bitmap will take ON DISK // static UINT NumBitmapBytes(BITMAP *pBitmap) { int nWidthBytes = pBitmap->bmWidthBytes; // bitmap scanlines MUST be a multiple of 4 bytes when stored // inside a bitmap resource, so round up if necessary if(nWidthBytes & 3) nWidthBytes = (nWidthBytes + 4) & ~3; return nWidthBytes * pBitmap->bmHeight; } // // Return number of bytes written // static UINT WriteIconImageHeader(HANDLE hFile, BITMAP *pbmpColor, BITMAP *pbmpMask) { BITMAPINFOHEADER biHeader; UINT nWritten; UINT nImageBytes; // calculate how much space the COLOR and MASK bitmaps take nImageBytes = NumBitmapBytes(pbmpColor) + NumBitmapBytes(pbmpMask); // write the ICONIMAGE to disk (first the BITMAPINFOHEADER) ZeroMemory(&biHeader, sizeof(biHeader)); // Fill in only those fields that are necessary biHeader.biSize = sizeof(biHeader); biHeader.biWidth = pbmpColor->bmWidth; biHeader.biHeight = pbmpColor->bmHeight * 2; // height of color+mono biHeader.biPlanes = pbmpColor->bmPlanes; biHeader.biBitCount = pbmpColor->bmBitsPixel; biHeader.biSizeImage = nImageBytes; // write the BITMAPINFOHEADER WriteFile(hFile, (LPVOID) &biHeader, sizeof(biHeader), (LPDWORD) &nWritten, NULL); // write the RGBQUAD color table (for 16 and 256 colour icons) if(pbmpColor->bmBitsPixel == 2 || pbmpColor->bmBitsPixel == 8) { } return nWritten; } // // Wrapper around GetIconInfo and GetObject(BITMAP) // static BOOL GetIconBitmapInfo(HICON hIcon, ICONINFO *pIconInfo, BITMAP *pbmpColor, BITMAP *pbmpMask) { if(!GetIconInfo(hIcon, pIconInfo)) return FALSE; if(!GetObject(pIconInfo->hbmColor, sizeof(BITMAP), pbmpColor)) return FALSE; if(!GetObject(pIconInfo->hbmMask, sizeof(BITMAP), pbmpMask)) return FALSE; return TRUE; } // // Write one icon directory entry - specify the index of the image // static UINT WriteIconDirectoryEntry(HANDLE hFile, HICON hIcon, UINT nImageOffset) { ICONINFO iconInfo; ICONDIR iconDir; BITMAP bmpColor; BITMAP bmpMask; UINT nWritten; UINT nColorCount; UINT nImageBytes; GetIconBitmapInfo(hIcon, &iconInfo, &bmpColor, &bmpMask); nImageBytes = NumBitmapBytes(&bmpColor) + NumBitmapBytes(&bmpMask); if(bmpColor.bmBitsPixel >= 8) nColorCount = 0; else nColorCount = 1 << (bmpColor.bmBitsPixel * bmpColor.bmPlanes); // Create the ICONDIR structure iconDir.bWidth = bmpColor.bmWidth; iconDir.bHeight = bmpColor.bmHeight; iconDir.bColorCount = nColorCount; iconDir.bReserved = 0; iconDir.wPlanes = bmpColor.bmPlanes; iconDir.wBitCount = bmpColor.bmBitsPixel; iconDir.dwBytesInRes = sizeof(BITMAPINFOHEADER) + nImageBytes; iconDir.dwImageOffset = nImageOffset; // Write to disk WriteFile(hFile, (LPVOID) &iconDir, sizeof(iconDir), (LPDWORD) &nWritten, NULL); // Free resources DeleteObject(iconInfo.hbmColor); DeleteObject(iconInfo.hbmMask); return nWritten; } static UINT WriteIconData(HANDLE hFile, HBITMAP hBitmap) { BITMAP bmp; int i; BYTE * pIconData; UINT nBitmapBytes; UINT nWritten; GetObject(hBitmap, sizeof(BITMAP), &bmp); nBitmapBytes = NumBitmapBytes(&bmp); pIconData = (BYTE *)malloc(nBitmapBytes); GetBitmapBits(hBitmap, nBitmapBytes, pIconData); // bitmaps are stored inverted (vertically) when on disk.. // so write out each line in turn, starting at the bottom + working // towards the top of the bitmap. Also, the bitmaps are stored in packed // in memory - scanlines are NOT 32bit aligned, just 1-after-the-other for(i = bmp.bmHeight - 1; i >= 0; i--) { // Write the bitmap scanline WriteFile( hFile, pIconData + (i * bmp.bmWidthBytes), // calculate offset to the line bmp.bmWidthBytes, // 1 line of BYTES (LPDWORD) &nWritten, NULL); // extend to a 32bit boundary (in the file) if necessary if(bmp.bmWidthBytes & 3) { DWORD padding = 0; WriteFile(hFile, (LPVOID) &padding, 4 - bmp.bmWidthBytes, (LPDWORD) &nWritten, NULL); } } free(pIconData); return nBitmapBytes; } // // Create a .ICO file, using the specified array of HICON images // BOOL SaveIcon(TCHAR *szIconFile, HICON hIcon[], int nNumIcons) { HANDLE hFile; int i; int * pImageOffset; if(hIcon == 0 || nNumIcons < 1) return FALSE; // Save icon to disk: hFile = CreateFile(szIconFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0); if(hFile == INVALID_HANDLE_VALUE) return FALSE; // // Write the iconheader first of all // WriteIconHeader(hFile, nNumIcons); // // Leave space for the IconDir entries // SetFilePointer(hFile, sizeof(ICONDIR) * nNumIcons, 0, FILE_CURRENT); pImageOffset = (int *)malloc(nNumIcons * sizeof(int)); // // Now write the actual icon images! // for(i = 0; i < nNumIcons; i++) { ICONINFO iconInfo; BITMAP bmpColor, bmpMask; GetIconBitmapInfo(hIcon, &iconInfo, &bmpColor, &bmpMask); // record the file-offset of the icon image for when we write the icon directories pImageOffset = SetFilePointer(hFile, 0, 0, FILE_CURRENT); // bitmapinfoheader + colortable WriteIconImageHeader(hFile, &bmpColor, &bmpMask); // color and mask bitmaps WriteIconData(hFile, iconInfo.hbmColor); WriteIconData(hFile, iconInfo.hbmMask); DeleteObject(iconInfo.hbmColor); DeleteObject(iconInfo.hbmMask); } // // Lastly, skip back and write the icon directories. // SetFilePointer(hFile, sizeof(ICONHEADER), 0, FILE_BEGIN); for(i = 0; i < nNumIcons; i++) { WriteIconDirectoryEntry(hFile, hIcon, pImageOffset); } free(pImageOffset); // finished! CloseHandle(hFile); return TRUE; } // // Save the icon resources to disk // HB_FUNC( SAVEICON ) { TCHAR *szIconFile = ( TCHAR* ) hb_parc( 1 ); HICON hLarge; HICON hSmall; HICON hIcon[2]; if( ExtractIconEx( ( LPCSTR ) hb_parc( 2 ), hb_parni( 3 ), &hLarge, &hSmall, 1 ) > 0 ) { hIcon[1] = hLarge; hIcon[0] = hSmall; hb_retl( SaveIcon( szIconFile, hIcon, 2 ) ); // clean up DestroyIcon( hLarge ); DestroyIcon( hSmall ); } else hb_retl( FALSE ); } #pragma ENDDUMP
| Да, и с тебя - пиво
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5558
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.10.17 23:37. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Посмотри рабочий пример ниже: |
| Что-то не собирается... Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland form_ico_dll.c: Warning W8075 form_ico_dll.prg 302: Suspicious pointer conversion in function SaveIcon Error E2349 form_ico_dll.prg 305: Nonportable pointer conversion in function SaveIcon Warning W8075 form_ico_dll.prg 325: Suspicious pointer conversion in function SaveIcon Error E2342 form_ico_dll.prg 325: Type mismatch in parameter 'nImageOffset' (wanted 'unsigned int', got 'int *') in function SaveIcon *** 2 errors in Compile *** Может что-то на этой странице потерялось ? gfilatov2002 пишет: Без вопросов ! Пришлю ! Какую марку любишь ? P.S. Нашел пример MiniGUI\SAMPLES\BASIC\ExtractIcon\demo2.prg ! Собралось !!!
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5574
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.10.17 17:05. Заголовок: Всем привет. Вывожу ..
Всем привет. Вывожу avi-файл на форму. Что-то фон avi-файла различается на разных ОС. Как можно считать цвет фона этого avi-файла ? Есть ли функция считывания цвета фона пикселя по выбранным координатам ? Под Windows XP или Server 2008 показ НЕ нормальный: Как правильно выводить avi-файл, чтобы фон окна совпадал с фоном самого avi-файл ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1645
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.10.17 17:28. Заголовок: Andrey пишет Есть ли..
Andrey пишет цитата: | Есть ли функция считывания цвета фона пикселя по выбранным координатам ? |
| Поищи в SAMPLES GetPixel
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5575
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.10.17 18:33. Заголовок: Сделал считывания пи..
|
|
|
Haz
|
| |
Пост N: 1129
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.10.17 20:23. Заголовок: Andrey пишет: можно..
Andrey пишет: Есть системные цвета. Как выбрать есть в примерах и исходниках, в частности в твоём любимом TSB
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5576
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.10.17 22:03. Заголовок: Haz пишет: Есть сис..
Haz пишет: цитата: | Есть системные цвета. Как выбрать есть в примерах и исходниках |
| Спасибо БОЛЬШОЕ !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5577
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.10.17 22:10. Заголовок: А как можно получить..
А как можно получить ширину AVI-файла ? Есть ли такая функция ? Ну и заодно уж и высоту AVI-файла ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1646
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.10.17 23:54. Заголовок: Andrey пишет А как м..
Andrey пишет цитата: | А как можно получить ширину AVI-файла ? |
| This.Avi_1.Width\Height не подходят ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5578
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.10.17 11:03. Заголовок: SergKis пишет: This..
SergKis пишет: цитата: | This.Avi_1.Width\Height не подходят ? |
| Да не подходят... Они возвращают что задаёшь при построении... Хотя размер avi-файла совершенно другой... Вычислить размер avi-файла - это что-то. Приходиться делать вывод на форму без TRANSPARENT, потом эту форму выводить, потом захватывать редактором Snagit, потом уж считать размеры avi-файла и полученные цифирки вносить в свой код программы... Нужны функции типа: aBmp := GetBitmapSize( _HMG_aControlBrushHandle [ i ] ) aBmp := GetIconSize( _HMG_aControlBrushHandle [ i ] )
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1568
Зарегистрирован: 09.10.06
|
|
Отправлено: 19.10.17 16:10. Заголовок: Andrey пишет: Вычис..
Andrey пишет: цитата: | Вычислить размер avi-файла - это что-то. Приходиться делать вывод на форму без TRANSPARENT, потом эту форму выводить, потом захватывать редактором Snagit, потом уж считать размеры avi-файла и полученные цифирки вносить в свой код программы |
| А щелкнуть правой клавишей мыши и посмотреть свойства не проще?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5579
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.10.17 18:03. Заголовок: Петр пишет: А щелкн..
Петр пишет: цитата: | А щелкнуть правой клавишей мыши и посмотреть свойства не проще? |
| Да я в Far собираю проекты. Об этом и не подумал. Спасибо за подсказку !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5581
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.10.17 17:05. Заголовок: Есть классный пример..
Есть классный пример SAMPLES\BASIC\GETFILE А как вызвать такое же меню, только для сохранения файла ? Самому делать такую форму - ужас сколько нужно знать...
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|