Hwgui Ribbon
Enviado: 17 Set 2026 21:21
Olá!
Enquanto tem milho, tem pipoca!
Enquanto tem milho, tem pipoca!
Código: Selecionar todos
...
17/09/2026 21:00 8.694 backpack.svg
17/09/2026 21:00 5.019 calculator.svg
2 arquivo(s) 13.713 bytes
Total de Arquivos na Lista:
43108 arquivo(s) 56.930.688 bytes
Qualquer coisa, que existe na Ribbon.Só consegue colocar o menu, grupos e botões? E os outros componentes, como list boxes, combos...?
Código: Selecionar todos
<!-- ==================== FILE MENU ==================== -->
<Command Name="cmdAppMenu" Symbol="ID_APP_MENU" Id="9000" LabelTitle="File" />
<Command Name="cmdFileNew" Symbol="ID_FILE_NEW" Id="9100" LabelTitle="New">
<Command.LargeImages><Image Source="icons/new.png" Id="9100" /></Command.LargeImages>
</Command>
<Command Name="cmdFileOpen" Symbol="ID_FILE_OPEN" Id="9101" LabelTitle="Open">
<Command.LargeImages><Image Source="icons/open.png" Id="9101" /></Command.LargeImages>
</Command>
<Command Name="cmdFileSave" Symbol="ID_FILE_SAVE" Id="9102" LabelTitle="Save">
<Command.LargeImages><Image Source="icons/save.png" Id="9102" /></Command.LargeImages>
</Command>
<Command Name="cmdFileSaveAs" Symbol="ID_FILE_SAVEAS" Id="9103" LabelTitle="Save As">
<Command.LargeImages><Image Source="icons/saveas.png" Id="9103" /></Command.LargeImages>
</Command>
<Command Name="cmdFilePrint" Symbol="ID_FILE_PRINT" Id="9104" LabelTitle="Print">
<Command.LargeImages><Image Source="icons/print.png" Id="9104" /></Command.LargeImages>
</Command>
<Command Name="cmdFileClose" Symbol="ID_FILE_CLOSE" Id="9105" LabelTitle="Close">
<Command.LargeImages><Image Source="icons/close.png" Id="9105" /></Command.LargeImages>
</Command>
<Command Name="cmdFileExit" Symbol="ID_FILE_EXIT" Id="9106" LabelTitle="Exit">
<Command.LargeImages><Image Source="icons/exit.png" Id="9106" /></Command.LargeImages>
</Command>
<!-- ==================== HOME TAB ==================== -->
<Command Name="cmdTabHome" Symbol="ID_TAB_HOME" Id="1000" LabelTitle="Home" />
<Command Name="grpClipboard" Symbol="ID_GRP_CLIPBOARD" Id="1100" LabelTitle="Clipboard" />
<Command Name="cmdPaste" Symbol="ID_CMD_PASTE" Id="2001" LabelTitle="Paste">
<Command.LargeImages><Image Source="icons/paste.png" Id="2001" /></Command.LargeImages>
</Command>
<Command Name="cmdCut" Symbol="ID_CMD_CUT" Id="2002" LabelTitle="Cut">
<Command.LargeImages><Image Source="icons/cut.png" Id="2002" /></Command.LargeImages>
</Command>
<Command Name="cmdCopy" Symbol="ID_CMD_COPY" Id="2003" LabelTitle="Copy">
<Command.LargeImages><Image Source="icons/copy.png" Id="2003" /></Command.LargeImages>
</Command>
Código: Selecionar todos
#include "hwgui.ch"
#include "hbdyn.ch"
STATIC pLib := NIL
STATIC hRibbon := NIL
// ============================================================================
// File menu IDs
// ============================================================================
#define ID_FILE_NEW 9100
#define ID_FILE_OPEN 9101
#define ID_FILE_SAVE 9102
#define ID_FILE_SAVEAS 9103
#define ID_FILE_PRINT 9104
#define ID_FILE_CLOSE 9105
#define ID_FILE_EXIT 9106
// ============================================================================
// Home tab - Clipboard
// ============================================================================
#define ID_CMD_PASTE 2001
#define ID_CMD_CUT 2002
#define ID_CMD_COPY 2003
// Home tab - Font
#define ID_CMD_BOLD 2100
#define ID_CMD_ITALIC 2101
#define ID_CMD_UNDERLINE 2102
// Home tab - Paragraph
#define ID_CMD_BULLETS 2200
#define ID_CMD_NUMBERING 2201
#define ID_CMD_LNSPACE 2202
// Home tab - Alignment
#define ID_CMD_ALIGN_L 2300
#define ID_CMD_ALIGN_C 2301
#define ID_CMD_ALIGN_R 2302
// Home tab - Styles
#define ID_CMD_H1 2400
#define ID_CMD_H2 2401
#define ID_CMD_H3 2402
// Home tab - Editing
#define ID_CMD_FIND 2500
#define ID_CMD_REPLACE 2501
#define ID_CMD_SELECT 2502
// ============================================================================
// Insert tab
// ============================================================================
#define ID_CMD_TABLE 3000
#define ID_CMD_PICTURE 3100
#define ID_CMD_SHAPES 3101
#define ID_CMD_CHART 3102
#define ID_CMD_LINK 3200
// ============================================================================
// View tab
// ============================================================================
#define ID_CMD_PRINT_LAYOUT 4000
#define ID_CMD_WEB_LAYOUT 4001
#define ID_CMD_READ_MODE 4002
#define ID_CMD_RULER 4100
#define ID_CMD_GRID 4101
#define ID_CMD_ZOOMIN 4200
#define ID_CMD_ZOOMOUT 4201
#define ID_CMD_ZOOM100 4202
// ============================================================================
// Window messages
// ============================================================================
#define WM_HWGUI_RIBBON_CMD (WM_USER + 200)
//=============================================================================
FUNCTION Main()
LOCAL oForm
pLib := hb_LibLoad( "ribbon_wrapper.dll" )
IF pLib == NIL
hwg_MsgStop( "Failed to load ribbon_wrapper.dll" )
RETURN NIL
ENDIF
INIT WINDOW oForm TITLE "Hwgui Ribbon Demo" SIZE 1100, 700 ;
ON INIT { || InitRibbon( oForm ) } ;
ON EXIT { || CloseRibbon() }
oForm:bOther := { |o, msg, wp, lp| OnOtherMsg( o, msg, wp, lp ) }
ACTIVATE WINDOW oForm CENTER
hb_LibFree( pLib )
RETURN NIL
//=============================================================================
STATIC FUNCTION InitRibbon( oForm )
LOCAL nHeight := 0
hRibbon := hb_DynCall( { "ribbon_init", pLib, ;
hb_bitOr( HB_DYN_CTYPE_VOID_PTR, HB_DYN_CALLCONV_CDECL ), ;
HB_DYN_CTYPE_VOID_PTR, ;
HB_DYN_CTYPE_CHAR_PTR }, ;
NIL, "Hwgui Ribbon Demo" )
IF hRibbon == NIL
hwg_MsgStop( "Failed to initialize Ribbon" )
RETURN NIL
ENDIF
// Ask the Ribbon how tall it is
nHeight := hb_DynCall( { "ribbon_get_height", pLib, ;
hb_bitOr( HB_DYN_CTYPE_INT, HB_DYN_CALLCONV_CDECL ), ;
HB_DYN_CTYPE_VOID_PTR }, ;
hRibbon )
HB_SYMBOL_UNUSED( nHeight )
HB_SYMBOL_UNUSED( oForm )
RETURN NIL
//=============================================================================
STATIC FUNCTION OnOtherMsg( o, nMsg, nWParam, nLParam )
LOCAL nId
HB_SYMBOL_UNUSED( nWParam )
HB_SYMBOL_UNUSED( nLParam )
IF nMsg == WM_HWGUI_RIBBON_CMD
nId := hb_DynCall( { "ribbon_get_last_id", pLib, ;
hb_bitOr( HB_DYN_CTYPE_INT, HB_DYN_CALLCONV_CDECL ) } )
HandleRibbonCmd( nId )
RETURN 0
ENDIF
RETURN -1
//=============================================================================
STATIC FUNCTION HandleRibbonCmd( nCmdID )
DO CASE
// ---- File ----
CASE nCmdID == ID_FILE_NEW ; hwg_MsgInfo( "File > New" )
CASE nCmdID == ID_FILE_OPEN ; hwg_MsgInfo( "File > Open" )
CASE nCmdID == ID_FILE_SAVE ; hwg_MsgInfo( "File > Save" )
CASE nCmdID == ID_FILE_SAVEAS ; hwg_MsgInfo( "File > Save As" )
CASE nCmdID == ID_FILE_PRINT ; hwg_MsgInfo( "File > Print" )
CASE nCmdID == ID_FILE_CLOSE ; hwg_MsgInfo( "File > Close" )
CASE nCmdID == ID_FILE_EXIT ; hwg_MsgInfo( "File > Exit" )
// ---- Clipboard ----
CASE nCmdID == ID_CMD_PASTE ; hwg_MsgInfo( "Paste" )
CASE nCmdID == ID_CMD_CUT ; hwg_MsgInfo( "Cut" )
CASE nCmdID == ID_CMD_COPY ; hwg_MsgInfo( "Copy" )
// ---- Font ----
CASE nCmdID == ID_CMD_BOLD ; hwg_MsgInfo( "Bold" )
CASE nCmdID == ID_CMD_ITALIC ; hwg_MsgInfo( "Italic" )
CASE nCmdID == ID_CMD_UNDERLINE ; hwg_MsgInfo( "Underline" )
// ---- Paragraph ----
CASE nCmdID == ID_CMD_BULLETS ; hwg_MsgInfo( "Bullets" )
CASE nCmdID == ID_CMD_NUMBERING ; hwg_MsgInfo( "Numbering" )
CASE nCmdID == ID_CMD_LNSPACE ; hwg_MsgInfo( "Line Spacing" )
// ---- Alignment ----
CASE nCmdID == ID_CMD_ALIGN_L ; hwg_MsgInfo( "Align Left" )
CASE nCmdID == ID_CMD_ALIGN_C ; hwg_MsgInfo( "Center" )
CASE nCmdID == ID_CMD_ALIGN_R ; hwg_MsgInfo( "Align Right" )
// ---- Styles ----
CASE nCmdID == ID_CMD_H1 ; hwg_MsgInfo( "Heading 1" )
CASE nCmdID == ID_CMD_H2 ; hwg_MsgInfo( "Heading 2" )
CASE nCmdID == ID_CMD_H3 ; hwg_MsgInfo( "Heading 3" )
// ---- Editing ----
CASE nCmdID == ID_CMD_FIND ; hwg_MsgInfo( "Find" )
CASE nCmdID == ID_CMD_REPLACE ; hwg_MsgInfo( "Replace" )
CASE nCmdID == ID_CMD_SELECT ; hwg_MsgInfo( "Select" )
// ---- Insert ----
CASE nCmdID == ID_CMD_TABLE ; hwg_MsgInfo( "Insert Table" )
CASE nCmdID == ID_CMD_PICTURE ; hwg_MsgInfo( "Insert Picture" )
CASE nCmdID == ID_CMD_SHAPES ; hwg_MsgInfo( "Insert Shapes" )
CASE nCmdID == ID_CMD_CHART ; hwg_MsgInfo( "Insert Chart" )
CASE nCmdID == ID_CMD_LINK ; hwg_MsgInfo( "Insert Link" )
// ---- View ----
CASE nCmdID == ID_CMD_PRINT_LAYOUT ; hwg_MsgInfo( "Print Layout" )
CASE nCmdID == ID_CMD_WEB_LAYOUT ; hwg_MsgInfo( "Web Layout" )
CASE nCmdID == ID_CMD_READ_MODE ; hwg_MsgInfo( "Read Mode" )
CASE nCmdID == ID_CMD_RULER ; hwg_MsgInfo( "Toggle Ruler" )
CASE nCmdID == ID_CMD_GRID ; hwg_MsgInfo( "Toggle Gridlines" )
CASE nCmdID == ID_CMD_ZOOMIN ; hwg_MsgInfo( "Zoom In" )
CASE nCmdID == ID_CMD_ZOOMOUT ; hwg_MsgInfo( "Zoom Out" )
CASE nCmdID == ID_CMD_ZOOM100 ; hwg_MsgInfo( "Zoom 100%" )
OTHERWISE
hwg_MsgInfo( "Unknown command: " + hb_ValToStr( nCmdID ) )
ENDCASE
RETURN NIL
//=============================================================================
STATIC FUNCTION CloseRibbon()
IF hRibbon != NIL
hb_DynCall( { "ribbon_destroy", pLib, ;
hb_bitOr( HB_DYN_CTYPE_VOID, HB_DYN_CALLCONV_CDECL ), ;
HB_DYN_CTYPE_VOID_PTR }, ;
hRibbon )
hRibbon := NIL
ENDIF
RETURN NIL
E o "fi duma égua" já vai instigando..Sim, o Windows Ribbon Framework oferece uma gama bem mais ampla de controles do que apenas menus, grupos e botões. Você pode enriquecer bastante a interface com outros componentes.
No XML (ribbon.xml):
Primeiro, você declara o comando e depois o controle dentro de um grupo.
Código: Selecionar todos
<!-- Declaração do Comando -->
<Command Name="cmdFontSize" Symbol="ID_CMD_FONT_SIZE" Id="2100" LabelTitle="Font Size" />
<!-- Uso no Grupo -->
<Group CommandName="grpFont" SizeDefinition="OneComboBox">
<ComboBox CommandName="cmdFontSize">
<ComboBox.ItemImage />
</ComboBox>
</Group>