Create colorful icon

本文详细介绍了如何使用CoeControl、AknSingleGraphicStyleListBox等类构建具有自定义样式的列表框,包括初始化控件、设置样式、添加项、图标配置及激活等功能。

.h 文件:


#include <coecntrl.h>       
#include <akniconutils.h>
#include <gulicon.h>
#include <eiklbo.h>

class MEikCommandObserver;       
class CAknSingleGraphicStyleListBox;
class CEikTextListBox;

class CTestContainer : public CCoeControl

{

......

private:
    CAknSingleGraphicStyleListBox* iListBox;

......

}

.cpp 文件

......

#include <avkon.mbg> //For EMbmAvkonQgn_indi_checkbox_on/off and EMbmAvkonQgn_indi_checkbox_on/off_mask
#include <aknconsts.h> //For KAknsIIDQgnPropCheckboxOn and KAknsIIDQgnPropCheckboxOff

void CTestContainer::InitializeControlsL()
    {
    iListBox = new ( ELeave ) CAknSingleGraphicStyleListBox;
   
    // Construct listbox  
    TInt markable = ( EAknListBoxMarkableList |

                 EAknListBoxMultiselectionList    |
                 CEikListBox::EMultipleSelection |
                 CEikListBox::ES60StyleMultiselection |
                 CEikListBox::ES60StyleMarkable );
   
         iListBox->ConstructL( this, markable | EAknListBoxLoopScrolling );   
         iListBox->SetContainerWindowL( *this );

         // Set scrollbars
         iListBox->CreateScrollBarFrameL( ETrue );
         iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto );   

         // Create listbox item array
         CDesCArrayFlat* iListBoxItems = new (ELeave) CDesCArrayFlat(4);
         // Create listbox items
        iListBoxItems->AppendL( _L("1/tItem1") );
        iListBoxItems->AppendL( _L("1/tItem2") );
        iListBoxItems->AppendL( _L("1/tItem3") );

         // Add items to listbox
         iListBox->Model()->SetItemTextArray( iListBoxItems );


         // Listbox deletes the item array
         iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );

         iListBox->HandleItemAdditionL( ); 

         // Add icons to listbox
         SetupListBoxIconsL();

         // Activate Listbox
         iListBox->SetRect( Rect() );
         iListBox->ActivateL();   
       
         iListBox->SetFocus( ETrue );
         iFocusControl = iListBox;
   
    }

void CTestContainer::SetupListBoxIconsL()
    {

    CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 3 );
    CleanupStack::PushL( iconArray );
    CFbsBitmap* checkboxOnBitmap = NULL;
    CFbsBitmap* checkboxOnBitmapMask = NULL;
    CFbsBitmap* checkboxOffBitmap = NULL;
    CFbsBitmap* checkboxOffBitmapMask = NULL;

    //CListItemDrawer is using this logical color as default for its marked icons
    TRgb defaultColor;
    defaultColor = CEikonEnv::Static()->Color( EColorControlText );

    AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(),
                    KAknsIIDQgnPropCheckboxOn,
                    KAknsIIDQsnIconColors,
                    EAknsCIQsnIconColorsCG13,
                    checkboxOnBitmap,
                    checkboxOnBitmapMask,
                    KAvkonBitmapFile,
                    EMbmAvkonQgn_indi_checkbox_on, 
                    EMbmAvkonQgn_indi_checkbox_on_mask,
                    defaultColor
                    );              

    CGulIcon* checkboxOnIcon = CGulIcon::NewL( checkboxOnBitmap, checkboxOnBitmapMask );
    CleanupStack::Pop( 2 ); // checkboxOnBitmap, checkboxOnBitmapMask
    CleanupStack::PushL( checkboxOnIcon );
    iconArray->AppendL( checkboxOnIcon );

 

    AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(),
                    KAknsIIDQgnPropCheckboxOff,
                    KAknsIIDQsnIconColors,
                    EAknsCIQsnIconColorsCG13,
                    checkboxOffBitmap,
                    checkboxOffBitmapMask,
                    KAvkonBitmapFile,
                    EMbmAvkonQgn_indi_checkbox_off, 

                    EMbmAvkonQgn_indi_checkbox_off_mask,
                    defaultColor
                    );

    CGulIcon* checkboxOffIcon = CGulIcon::NewL( checkboxOffBitmap, checkboxOffBitmapMask );
    CleanupStack::Pop( 2 ); // checkboxOffBitmap, checkboxOffBitmapMask
    CleanupStack::PushL( checkboxOffIcon );
    iconArray->AppendL( checkboxOffIcon );           

    iListBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray );       

    // checkboxOffIcon, checkboxOnIcon, iconArray
    CleanupStack::Pop( 3 );

    }


 

<think>好的,我现在需要详细回答用户关于SAP中ICON_CREATE函数的功能和用法的问题。首先,我要回忆一下这个函数的基本信息。ICON_CREATE是SAP系统中用来创建带有图标和文本的按钮或其他UI元素的函数模块。用户可能在使用ALV报表或者选择屏幕时,需要美化界面,添加带有图标的按钮,这时候就会用到这个函数。接下来,我需要确认ICON_CREATE的具体参数和用法。根据引用[3],用户提供的代码示例中,他们在INITIALIZATION事件里调用了这个函数,传递了图标名称、文本等信息,然后将生成的按钮赋值给选择屏幕的PUSHBUTTON。这说明ICON_CREATE的主要功能是将图标和文本组合成一个可以在UI上显示的控件。 然后,我要考虑函数的参数。根据示例,EXPORTING部分有name、text、info,分别对应图标名称、按钮文本和提示信息。IMPORTING的result是生成的控件,这里赋给了but1变量。此外,还要注意异常处理,虽然示例中OTHERS设为0,可能忽略错误,但实际应用中可能需要更详细的处理。 使用场景方面,用户可能在自定义报表的选择屏幕上添加带有图标的按钮,或者在ALV工具栏中增强功能按钮时使用。引用[2]提到在ALV工具栏中添加导出按钮,虽然示例中直接使用了图标常量,但结合ICON_CREATE可以更灵活地生成带有图标和文本的按钮。此外,响应式设计(引用[1])可能不直接相关,但优化UI体验也是ICON_CREATE的一个应用点。 需要提醒用户的注意事项包括图标名称的正确性,系统内置的图标列表可以通过事务代码ICON查看。另外,不同SAP版本可能图标库有差异,需要测试兼容性。还有,前端界面的权限问题,确保用户有权显示图标。 最后,生成相关问题,可能涉及其他图标相关函数,如何在其他UI元素中使用图标,或者如何处理图标显示异常等。确保问题覆盖常见的使用疑问,帮助用户进一步学习。</think>### SAP ICON_CREATE 函数详解 #### 功能说明 `ICON_CREATE` 是 SAP ABAP 中用于**动态生成带有图标和文本的 UI 元素**的函数模块,常用于增强界面交互性。其主要功能包括: - 将图标与文本组合为可显示的控件(如按钮、标签) - 支持自定义提示信息(Quickinfo) - 适配 SAP 内置图标库(通过 `icon_*` 常量调用) #### 核心语法 ```abap CALL FUNCTION 'ICON_CREATE' EXPORTING name = icon_name " 图标常量,如 ICON_SELECT_DETAIL text = '按钮文本' " 显示文本 info = '提示信息' " 鼠标悬停时的提示 IMPORTING result = ui_element " 生成的 UI 元素 EXCEPTIONS OTHERS = 1. ``` #### 使用场景示例 1. **选择屏幕按钮增强** 在报表选择屏幕添加带图标的操作按钮(如查询、导出): ```abap SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON 2(20) but1 USER-COMMAND btn1. SELECTION-SCREEN END OF LINE. INITIALIZATION. CALL FUNCTION 'ICON_CREATE' EXPORTING name = icon_search text = '查询' info = '执行数据查询' IMPORTING result = but1 EXCEPTIONS OTHERS = 0. ``` 2. **ALV 工具栏定制** 结合 ALV 增强技术添加自定义功能按钮[^2]: ```abap METHOD if_ex_bc_alv_grid_toolbar~toolbar. DATA: lv_button TYPE stb_button. CALL FUNCTION 'ICON_CREATE' EXPORTING name = icon_excel text = '导出' IMPORTING result = lv_button-icon EXCEPTIONS OTHERS = 1. APPEND VALUE #( function = 'ZEXPORT' icon = lv_button-icon ) TO ct_toolbar. ENDMETHOD. ``` 3. **动态状态栏显示** 在屏幕状态栏中显示带图标的系统状态提示: ```abap SET PF-STATUS 'MAIN'. DATA: lv_icon TYPE icon_d. CALL FUNCTION 'ICON_CREATE' EXPORTING name = icon_checked text = '已审核' IMPORTING result = lv_icon. SET TITLEBAR 'TIT01' WITH lv_icon. ``` #### 关键参数说明 | 参数 | 类型 | 说明 | |---------|----------|----------------------------------------------------------------------| | NAME | ICON_D | SAP 图标常量,可通过事务代码 `ICON` 查看完整列表 | | TEXT | STRING | 显示文本(若需仅显示图标则留空) | | INFO | STRING | 鼠标悬停提示信息(可选) | | RESULT | STRING | 输出的格式化字符串,可直接赋值给 UI 元素(如按钮、标签) | #### 注意事项 1. **图标兼容性**:不同 SAP 版本/主题可能影响图标显示效果,需测试目标系统环境 2. **权限检查**:确保用户有权限访问 `SICF` 服务中的图标资源 3. **异常处理**:建议处理 `OTHERS` 异常以避免程序中断 4. **文本长度**:文本过长会导致图标变形,建议控制文本在 10 字符以内 #### 扩展应用 - 结合 `PF-STATUS` 动态设置菜单栏图标 - 在 `WRITE` 输出中使用图标:`WRITE: / lv_icon AS ICON, '带图标的文本'` - 通过 `SMARTFORMS` 或 `SAPSCRIPT` 在打印输出中嵌入图标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值