Форум » FiveWin » А можно ли в Xbrowse показывать BMP 32x32 ? » Ответить

А можно ли в Xbrowse показывать BMP 32x32 ?

Andrey: Доброй ночи пользователям FiveWin ! Можно ли в таблице показывать BMP 32x32 24bit ? И как это выглядит (код и пример готовый) ? Покажите пожалуйста неразберающемуся в FiveWin... Заранее огромное спасибо...

Ответов - 24, стр: 1 2 All

ММК: Andrey пишет: Доброй ночи пользователям FiveWin ! Можно ли в таблице показывать BMP 32x32 24bit ? И как это выглядит (код и пример готовый) ? Доброе утро :) Можно в бровсе показывать разные картинки(по размеру). И примеры у Вас есть. Они лежат в "примерах". Вариантов несколько . Например так - @ 0,0 XBROWSE oBrw ; COLUMNS "First", "City", "State", "Married", "HireDate", "Age", "Salary" ; PICTURES ,,,,,,"999,999,999.99" ; // nil or ommit for default formatting OF ownd ; // automatic justification OBJECT oCust ; FOOTERS FASTEDIT ; AUTOSORT ; LINES CELL WITH OBJECT oBrw:Salary :nFooterType := AGGR_TOTAL :bLClickFooter := { |r,c,f,o| FooterAggrClick( r, c, f, o ) } END // Computed Column. Add Column depending on Salary oBrw:NewSalary := { || oBrw:Salary:Value * 1.1 } WITH OBJECT oBrw:NewSalary :cHeader := 'NewSalary' :nFooterType := AGGR_TOTAL :cEditPicture := oBrw:Salary:cEditPicture :bLClickFooter := { |r,c,f,o| FooterAggrClick( r, c, f, o ) } END WITH OBJECT oBrw:Married :cHeader := "MStat" :SetCheck( { "USERS", "..\bitmaps\32x32\user.bmp" }, .t. ) END AEval( oBrw:aCols, { |o| o:cToolTip := { 'Column :' + CRLF + o:cHeader, 'ToolTip' }, ; o:nEditType := EDIT_GET } ) WITH OBJECT oBrw :MoveCol( oBrw:Salary, oBrw:NewSalary ) :bPopUp := { |o| ColMenu( o ) } :MakeTotals() :CreateFromCode() END oWnd:oClient := oBrw Здесь картинка работает , как чекбокс. А можно "в процессе" подгружать картинки - @ 0,0 XBROWSE oBrw OF oDlg columns {1,2,3}; Array aArray sizes {100,300, 100} LINES CELL autocols fastedit oBrw:nMarqueeStyle := 1 oBrw:nRowHeight := 100 oBrw:aCols[ 1 ]:nEditType := TYPE_IMAGE oBrw:aCols[ 1 ]:lBmpStretch := .t. oBrw:aCols[ 1 ]:lBmpTransparent := .t. oBrw:aCols[ 1 ]:bStrImage := {|oCol, oBrw| oBrw:aRow[ 2 ] } oBrw:aCols[ 1 ]:nDataBmpAlign := AL_CENTER oBrw:aCols[ 1 ]:bPopUp := { |o| ColMenu( o ) } oBrw:aCols[ 2 ]:nEditType := EDIT_BUTTON oBrw:aCols[ 2 ]:bEditBlock := {|nRow, nCol, oCol| oCol:Value := cGetFile( "*.*", "Select a file" ) } oBrw:aCols[ 3 ]:nEditType := 1 oBrw:aCols[ 3 ]:bOnPostEdit := {|oCol, xVal, nKey| if ( alltrim( xVal ) == "1", oBrw:nMoveType := 5, oBrw:nMoveType := 6 ), oCol:Value( xVal ) } Ну и другие варианты ....

ММК: С альфа каналом....

Andrey: ММК Спасибо БОЛЬШОЕ !!!

Andrey: А есть ли в FiveWin функция показа иконки, ассоциированной с данным типом файла ? По форуму поглядел, не нашел. Нашел только: http://forums.fivetechsupport.com/viewtopic.php?f=3&t=17551 Но это другая функция.

fil: Специальной функции вроде нет, но как сделать могу скинуть примерчик

Dima: fil пишет: Специальной функции вроде нет, но как сделать могу скинуть примерчик Сюда и скинь если не сложно :)

fil: #INCLUDE "FiveWin.ch" #include "xbrowse.ch" Function Main() local ico, oIcon, oWnd, aRet aArr_g := {} for nI := 1 to 5 aadd( aArr_g, { "", Space( 50 ), 0 } ) next DEFINE WINDOW oWnd FROM 0, 0 TO 30, 60 TITLE "Test" @ 0,0 XBROWSE oBrw OF oWnd columns {1, 2, 3}; Array aArr_g sizes {100, 250, 1} LINES CELL autocols fastedit oBrw:nMarqueeStyle := 1 oBrw:nRowHeight := 33 // oBrw:aCols[ 1 ]:lBmpStretch := .t. oBrw:aCols[ 1 ]:lBmpTransparent := .t. oBrw:aCols[ 1 ]:nDataBmpAlign := AL_CENTER oBrw:aCols[ 1 ]:bStrData := {|| NIL } oBrw:aCols[ 1 ]:bBmpData := {| | oBrw:aRow[ 3 ] } oBrw:aCols[ 2 ]:nEditType := EDIT_BUTTON oBrw:aCols[ 2 ]:bEditBlock := {|nRow, nCol, oCol| aRet := file_load( oCol ), ; oBrw:aRow[ 3 ] := aRet[ 1 ],; oBrw:aRow[ 2 ] := aRet[ 2 ] } oBrw:aCols[ 3 ]:lHide := .T. oWnd:oClient := oBrw oBrw:CreateFromCode() ACTIVATE WINDOW oWnd //on paint( PalBmpDraw( hDC, 0, 0, hBmp ) ) return nil /*------------------------------------------------------------------------*/ FUNC file_load( oCol ) loca cname local hBmp local aRet local nIndex := 0 cname := cGetFile( "*.*", "Select file" ) if cname != NIL ico := EXTRACTASSICON( 0, cname, @nIndex ) hBmp := BmpFromIcon( ico ) oCol:oBrw:aCols[ 1 ]:AddBmpHandle( hBmp ) aRet := { Len( oCol:oBrw:aCols[ 1 ]:aBitmaps ), cName } endif RETURN aRet #pragma BEGINDUMP #include <hbapi.h> #include <windows.h> HB_FUNC( EXTRACTASSICON ) { HICON hIcon; LONG hInstance = hb_parnl( 1 ); char * lpIconPath = ( char * ) hb_parc( 2 ); WORD lpiIcon = hb_parnl( 3 ); hIcon = ExtractAssociatedIcon( ( HINSTANCE ) hInstance, lpIconPath, &lpiIcon ); hb_stornl( lpiIcon, 3 ); hb_retnl( ( LONG ) hIcon ); } HB_FUNC( ICON_EXEREAD ) { SHFILEINFO sfi; ZeroMemory(&sfi, sizeof(SHFILEINFO)); SHGetFileInfo(hb_parc(1), 0, &sfi, sizeof(SHFILEINFO), SHGFI_ICON ); hb_retnl( ( LONG ) sfi.hIcon ); } HB_FUNC( BMPFROMICON ) { HICON hIcon = ( HICON ) hb_parnl( 1 ); HDC HDCMem = GetDC( GetDesktopWindow() ); HDC hDC = CreateCompatibleDC( HDCMem ); HBITMAP hBitmap = CreateCompatibleBitmap(HDCMem, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDC, hBitmap); DrawIcon(hDC, 0, 0, hIcon); SelectObject(hDC, hOldBitmap); DeleteDC(hDC); hb_retnl( ( LONG ) hBitmap ); } #pragma ENDDUMP ************************************************* DLL32 FUNCTION GCP_ID() AS LONG ; PASCAL FROM "GetCurrentProcessID" LIB "kernel32.dll" DLL32 FUNCTION ExtractAssociatedIcon( hIns AS LONG, cPth AS LPSTR, nInd AS LONG ) ; AS LONG PASCAL FROM "ExtractAssociatedIconA" LIB "SHELL32.DLL"

Andrey: fil пишет: сделать могу скинуть примерчик А готовый ехе-ник можешь скинуть, для просмотра ? А то еще не собирал ни разу примеры на FiveWin'e.

fil: http://files.mail.ru/8444572D2E004E0BB07C87D12BB81B3C В browse даблклик на колонке B. Выбери файл с нужным расширением. В колонке А будет его иконка

Andrey: fil пишет: В колонке А будет его иконка Спасибо БОЛЬШОЕ ! Только небольшое уточнение: ico := EXTRACTASSICON( 0, cname, @nIndex ) hBmp := BmpFromIcon( ico ) А как получить не Хендл bmp, а сам bmp - для показа на форме ? fil пишет: ************************************************* DLL32 FUNCTION GCP_ID() AS LONG ; PASCAL FROM "GetCurrentProcessID" LIB "kernel32.dll" DLL32 FUNCTION ExtractAssociatedIcon( hIns AS LONG, cPth AS LPSTR, nInd AS LONG ) ; AS LONG PASCAL FROM "ExtractAssociatedIconA" LIB "SHELL32.DLL" И что это за уточнение ?

Dima: Andrey пишет: А то еще не собирал ни разу примеры на FiveWin'e. С этого и начни а то смысла нет подобные вопросы задавать на мой взгляд ;)

Andrey: Dima пишет: С этого и начни а то смысла нет подобные вопросы задавать на мой взгляд ;) Да я на МиниГуи эти функции хочу использовать... А в лоб при использовании: #pragma BEGINDUMP ..... #pragma ENDDUMP Функция HB_FUNC( EXTRACTASSICON ) - что то не работает в МиниГуи... Я уже неделю разбираюсь....

ММК: Andrey пишет: Да я на МиниГуи эти функции хочу использовать... :)

Andrey: Вот неработающий код. Подскажите пожалуйста, где и что "подкрутить" - если это возможно.... http://files.mail.ru/591DDCB1A1094F3C957FF40D407C42AA

gfilatov2002: Andrey пишет: Подскажите пожалуйста Отправил исправленный пример по почте

Vlad04: А почему по почте? А не ссылочку выложить?

Haz: присоединяюсь к вопросу, тоже хотелось бы глянуть на "исправленный пример"

gfilatov2002: Haz пишет: хотелось бы глянуть на "исправленный пример" Хотя и не в "своей" теме, но если есть интерес... [pre]/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" ///////////////////////////////////////////////////////////////////// FUNCTION Main() LOCAL cTitle := 'Icon associated with the file type' LOCAL nY := 30, nX := 20 DEFINE WINDOW Form_File ; At 0, 0 ; WIDTH 500 ; HEIGHT 350 ; ICON "1MAIN" ; TITLE cTitle ; MAIN ; NOSIZE ; FONT 'Tahoma' SIZE 12 @ nY, nX LABEL Label_Clear WIDTH 460 HEIGHT 100 BACKCOLOR WHITE @ nY, nX+5 FRAME Frame_File ; CAPTION " File info " ; WIDTH 450 HEIGHT 95 ; FONTCOLOR RED BACKCOLOR WHITE @ nY+35,nX+20 IMAGE Image_File PICTURE 'TEST' WIDTH 32 HEIGHT 32 @ nY+42,nX+60 LABEL Label_File VALUE 'test file' WIDTH 400 HEIGHT 20 BACKCOLOR WHITE @ nY+35,nX+20 BUTTON BTN_EXE ICON '' EXTRACT 0 WIDTH 36 HEIGHT 36 INVISIBLE @ 200, 60 BUTTONEX Button_Copy ; WIDTH 180 HEIGHT 80 ; CAPTION 'Select to file' ; NOHOTLIGHT ; UPPERTEXT LEFTTEXT NOXPSTYLE ; FONTCOLOR WHITE BOLD ; BACKCOLOR { 35,179, 15} ; ACTION MyGetFile() @ 200, 260 BUTTONEX Button_Exit; WIDTH 180 HEIGHT 80 ; ICON "iExit" ; CAPTION 'Exit' ; NOHOTLIGHT ; UPPERTEXT LEFTTEXT NOXPSTYLE ; FONTCOLOR WHITE BOLD ; BACKCOLOR {254, 73, 83} ; ACTION Form_File.Release() END WINDOW ico:=ICON_EXEREAD(hb_ArgV(0)) SetImageControl ( "Form_File", "Image_File", BmpFromIcon( ico ) ) DEFINE BKGBRUSH Brush_1 PATTERN IN Form_File BITMAP WALL CENTER WINDOW Form_File ACTIVATE WINDOW Form_File RETURN NIL ///////////////////////////////////////////////////////////////////// // ЏаЁЄаҐЇЁвм д ©«л Є ЇЁбм¬г PROCEDURE MyGetFile() LOCAL aFiles, cFile, bmpPict LOCAL nIndex, ico, hBmp aFiles := GetFile( { {"‚ᥠ䠩«л", "*.*"}, ; {"’ҐЄбвл Їа®Ја ¬¬", "*.prg;*.ch"}, {"‚ᥠ䠩«л MSOFFICE", "*.doc;*.rtf;*.docx;*.odt;*.xls;" } }, ; "‚лЎҐаЁвҐ д ©«л", GetCurrentFolder() , .T. ) IF LEN( aFiles ) > 0 cFile := aFiles[1] Form_File.Label_File.Value := alltrim( cFile ) nIndex := 0 ico := EXTRACTASSICON( 0, cFile , @nIndex ) hBmp := BmpFromIcon( ico ) // нв® ў®§ўа в •…Ќ„‹Ђ bmp SetImageControl ( "Form_File", "Image_File", hBmp ) ENDIF RETURN ///////////////////////////////////////////////////////////////////////////// *-----------------------------------------------------------------------------* Static Procedure SetImageControl (cFormName, cControlImageName, hBitmap) *-----------------------------------------------------------------------------* Local hWnd, k k := GetControlIndex (cControlImageName, cFormName) IF k > 0 IF _HMG_aControlBrushHandle [k] <> 0 DeleteObject (_HMG_aControlBrushHandle [k]) ENDIF _HMG_aControlBrushHandle [k] := hBitmap hWnd := GetControlHandle (cControlImageName, cFormName) #define STM_SETIMAGE 0x0172 #define IMAGE_BITMAP 0 SendMessage (hWnd, STM_SETIMAGE, IMAGE_BITMAP, hBitmap) #undef IMAGE_BITMAP #undef STM_SETIMAGE ENDIF Return #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" #include <shellapi.h> extern HBITMAP Icon2Bmp( HICON hIcon ); HB_FUNC( EXTRACTASSICON ) { HICON hIcon; LONG hInstance = hb_parnl( 1 ); char * lpIconPath = ( char * ) hb_parc( 2 ); WORD lpiIcon = hb_parnl( 3 ); hIcon = ExtractAssociatedIcon( ( HINSTANCE ) hInstance, lpIconPath, &lpiIcon ); hb_stornl( lpiIcon, 3 ); hb_retnl( ( LONG ) hIcon ); } HB_FUNC( ICON_EXEREAD ) { SHFILEINFO sfi; ZeroMemory(&sfi, sizeof(SHFILEINFO)); SHGetFileInfo(hb_parc(1), 0, &sfi, sizeof(SHFILEINFO), SHGFI_ICON ); hb_retnl( ( LONG ) sfi.hIcon ); } HB_FUNC( BMPFROMICON ) { HICON hIcon = ( HICON ) hb_parnl( 1 ); hb_retnl( ( LONG ) Icon2Bmp( hIcon ) ); } #pragma ENDDUMP[/pre]

Andrey: Народ, поделитесь вашими рабочими скриншотами навигации для XBROWSE ? Хочется посмотреть, проанализировать для себя. Заранее спасибо !

ММК: чисто для навигации набор достаточно конкретный и ограниченный, поэтому ,что бы он не "путался" с остальными размещаю его вертикально. Да так он и больше "стыкуется" с управлением с клав-ры. 1.Самый простой вариант [ 2. Не обязательно распологать управление рядом с бровсом. Вот в таком виде использую одно меню для разных бровсов(закладок) Естествено работает управление на уровне заголовко (например для выбора сортировки ) с соответствующей индикацией 3. При необходимости дополнителных операций с данными добавляю горизонтальное . Меньше кнопок в одном месте -легче искать нужную ....(подсказки работают) 4. Иногда в "управление" добавляю get'ы (в данном примере это процент запаса ) 5. Более сложный вариант, когда в бровсе используется "дерево" и одновременно несколько бровсов "управляет друг другом" Здесь даже внешнее меню "помогает" ;( 6. и если совсем уж хочется "потворить2 можно и такое ....



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