Форум » 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 можно и такое ....

Andrey: Спасибо !

Andrey: ММК пишет: TsBrows перестали использовать т.к. появился xBrows и вопросы отпали :) С FW слабо знаком, а с xBrows тем более... Просвети пожалуйста немного о xBrows (лицензия, чем отличается и т.д.) !

Dima: Михаил просвети Андрея

ММК: Dima пишет: Михаил просвети Андрея Слушаюсь! Сейчас спою... Все ,что есть в TS есть и в XB . Точнее это всего лишь часть возможностей XB. Но бровс не существует вне среды, поэтому перенести его не получится т.к. минигуи все это не потянет поэтому наверное на этом можно было бы и закончить :)) Родился этот бровс в Индии, там и растет. Бывают проблемы при появлении новых возможностей, каких то системных изменениях, но они не критичны и быстро устаканиваются. В общем впечатление приятное. На такую ситуацию, как в TS не нарывался-видимо просто везет :) Перепробовать все возможности не получается - не хватает терпения. Давно уже казалось, что ничего нового быть не может ан нет - появляется. Андрей , на Ваши конкретные вопросы отвечу в той теме где Вы их задавали.



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