Hwgui Ribbon

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

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

Hwgui Ribbon

Mensagem por Itamar M. Lins Jr. »

Olá!
Enquanto tem milho, tem pipoca!
Captura_de_tela_20260917_211851.png
Captura_de_tela_20260917_211851.png (67.04 KiB) Exibido 37 vezes
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8313
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 7 vezes
Curtiram: 2 vezes

Re: Hwgui Ribbon

Mensagem por Itamar M. Lins Jr. »

Olá!
Lembrando! Esse ai é PNG(icones), tava com pressa... Mas SVG vai também que é o nativo da Microsoft.
Captura_de_tela_20260917_212742-1.png
Captura_de_tela_20260917_212742-1.png (22.56 KiB) Exibido 35 vezes
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8313
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 7 vezes
Curtiram: 2 vezes

Re: Hwgui Ribbon

Mensagem por Itamar M. Lins Jr. »

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"

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
Captura_de_tela_20260917_222942.png
Captura_de_tela_20260917_222942.png (28.29 KiB) Exibido 21 vezes
Saudações,
Itamar M. Lins Jr.
alxsts
Colaborador
Colaborador
Mensagens: 3199
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil
Curtiram: 9 vezes

Re: Hwgui Ribbon

Mensagem por alxsts »

Olá!

Show!

Só consegue colocar o menu, grupos e botões? E os outros componentes, como list boxes, combos...?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8313
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 7 vezes
Curtiram: 2 vezes

Re: Hwgui Ribbon

Mensagem por Itamar M. Lins Jr. »

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

Re: Hwgui Ribbon

Mensagem por Itamar M. Lins Jr. »

Olá!
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>
No PRG pode ver, nenhum bixo de 7 cabeças.

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.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8313
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 7 vezes
Curtiram: 2 vezes

Re: Hwgui Ribbon

Mensagem por Itamar M. Lins Jr. »

Olá!
Resposta da IA.
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.
E o "fi duma égua" já vai instigando.. :lol:
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>
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! :lol:
Captura_de_tela_20260917_225832.png
Captura_de_tela_20260917_225832.png (86.53 KiB) Exibido 16 vezes
Saudações,
Itamar M. Lins Jr.
alxsts
Colaborador
Colaborador
Mensagens: 3199
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil
Curtiram: 9 vezes

Re: Hwgui Ribbon

Mensagem por alxsts »

Olá!

Não consegui anexar esta imagem no post anterior... vai agora.
Anexos
image9.png
image9.png (81.74 KiB) Exibido 8 vezes
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8313
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 7 vezes
Curtiram: 2 vezes

Re: Hwgui Ribbon

Mensagem por Itamar M. Lins Jr. »

Olá!
Veja ai o manual o que pode e o que não pode.
Descompactar para readme.html
readme.rar
(4.06 KiB) Baixado 2 vezes
Saudações,
Itamar M. Lins Jr.
Responder