Hwgui Ribbon
Moderador: Moderadores
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8313
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 7 vezes
- Curtiram: 2 vezes
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8313
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 7 vezes
- Curtiram: 2 vezes
Re: Hwgui Ribbon
Olá!
Lembrando! Esse ai é PNG(icones), tava com pressa... Mas SVG vai também que é o nativo da Microsoft.
Lembrando! Esse ai é PNG(icones), tava com pressa... Mas SVG vai também que é o nativo da Microsoft.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8313
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 7 vezes
- Curtiram: 2 vezes
Re: Hwgui Ribbon
Olá!
O segredo revelado!
Vc gera um XML o MSVC compila em 32bit(isso pouco importa, pois roda em 64Bit de boa) uma DLL.
O XML tem praticamente toda a papelada da configuração.
O ribbon_wrapper.cpp que cria a DLL, lê isso(arquivos gerados pelo XML) e é a ponte com a Hwgui.
Depois vc faz a ponte disso no .PRG da Hwgui.
Neste caso eu converti os SVG para PNG, não digitei nada. Só dizendo paras as IAs, tá certo, tá errado.
Lógico que precisa ter noção do que está fazendo.
Sim! já ia mes esquecendo, o PRG é o CLANG que compila. MSVC só para criar os arquivos da Ribbon.(DLL)
A IA agora ta me instigando a misturar webview2 com Ribbon, XML com tema do windows, etc...
Local dos arquivos da Microsoft SVG. Acredito que são MILHARES...demorou para baixar tudo. Só que são pequenos.
Tem um utilitário que converte de SVG para PNG.
Olhei por aqui, final do "dir *.svg /s"
https://github.com/microsoft/fluentui-system-icons
O segredo revelado!
Vc gera um XML o MSVC compila em 32bit(isso pouco importa, pois roda em 64Bit de boa) uma DLL.
O XML tem praticamente toda a papelada da configuração.
O ribbon_wrapper.cpp que cria a DLL, lê isso(arquivos gerados pelo XML) e é a ponte com a Hwgui.
Depois vc faz a ponte disso no .PRG da Hwgui.
Neste caso eu converti os SVG para PNG, não digitei nada. Só dizendo paras as IAs, tá certo, tá errado.
Lógico que precisa ter noção do que está fazendo.
Sim! já ia mes esquecendo, o PRG é o CLANG que compila. MSVC só para criar os arquivos da Ribbon.(DLL)
A IA agora ta me instigando a misturar webview2 com Ribbon, XML com tema do windows, etc...
Local dos arquivos da Microsoft SVG. Acredito que são MILHARES...demorou para baixar tudo. Só que são pequenos.
Tem um utilitário que converte de SVG para PNG.
Olhei por aqui, final do "dir *.svg /s"
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
https://github.com/microsoft/fluentui-system-icons
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
alxsts
- Colaborador

- Mensagens: 3199
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
- Curtiram: 9 vezes
Re: Hwgui Ribbon
Olá!
Show!
Só consegue colocar o menu, grupos e botões? E os outros componentes, como list boxes, combos...?
Show!
Só consegue colocar o menu, grupos e botões? E os outros componentes, como list boxes, combos...?
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8313
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 7 vezes
- Curtiram: 2 vezes
Re: Hwgui Ribbon
Olá!
Ainda estou aparando as arestas, mais alguns segredinnhos a serem desvendados.
Qualquer coisa, que existe na Ribbon.Só consegue colocar o menu, grupos e botões? E os outros componentes, como list boxes, combos...?
Ainda estou aparando as arestas, mais alguns segredinnhos a serem desvendados.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8313
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 7 vezes
- Curtiram: 2 vezes
Re: Hwgui Ribbon
Olá!
O segredo é a criação do XML.
No PRG pode ver, nenhum bixo de 7 cabeças.
O segredo é a criação do XML.
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
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8313
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 7 vezes
- Curtiram: 2 vezes
Re: Hwgui Ribbon
Olá!
Resposta da IA.
Haja tempo papai!
E quem tem uma minima noção se LIBERTOU de muita gente!
VC cria sua FIVEWIN, HWGUI, MINIGUI. Ou não cria nada e vai direto para o GIT, e nem sabe mais como é feito seu aplicativo(a linguagem) não importa mais. Só fica monitorando, é isso que os COACHING de programação estão fazendo. E vamos queimar tokens!
Resposta da IA.
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>
E quem tem uma minima noção se LIBERTOU de muita gente!
VC cria sua FIVEWIN, HWGUI, MINIGUI. Ou não cria nada e vai direto para o GIT, e nem sabe mais como é feito seu aplicativo(a linguagem) não importa mais. Só fica monitorando, é isso que os COACHING de programação estão fazendo. E vamos queimar tokens!
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
alxsts
- Colaborador

- Mensagens: 3199
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
- Curtiram: 9 vezes
Re: Hwgui Ribbon
Olá!
Não consegui anexar esta imagem no post anterior... vai agora.
Não consegui anexar esta imagem no post anterior... vai agora.
- Anexos
-
- image9.png (81.74 KiB) Exibido 16 vezes
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 8313
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 7 vezes
- Curtiram: 2 vezes
Re: Hwgui Ribbon
Olá!
Veja ai o manual o que pode e o que não pode.
Descompactar para readme.html
Veja ai o manual o que pode e o que não pode.
Descompactar para readme.html
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.