Página 1 de 1

Menu

Enviado: 15 Jul 2008 09:23
por clebervn
Um simples exemplo de menu q peguei, nunca funciona, sempre executa de cara a função do item, o q falta ??

Código: Selecionar todos

#include "xhgtk.ch"
#include "gtk.ch"

procedure Main()
    Local oWindow
    Local window
    Local oMenu, tSub1, tSub2
    Local tssu11,tssu12, tssu13, tsBsu11
    Local tssu21,tssu22, tssu23
    Local oLabel
    Local tOSub1, tOSub11, tOSub12
    Local oFont

    PREPARE FONT oFont NAME "Arial 10"

    INIT WINDOW oWindow ;
         AT 0,0         ;
         TITLE "Menu"   ;
         SIZE 640, 480  ;
         FONT oFont     ;
         CENTER         
 
    MENU oMenu OF oWindow

    MENUTITLE "Arquivo"   OF oMenu
         MENUITEM "Novo" Action MsgInfo("Selecionado item novo") IMAGE "gtk-new" ICONSIZE 10 OF oMenu
         MENUITEM "Cadastro" Action MsgInfo("Selecionado item Cadastro") IMAGE "pe.png" FROM FILE  OF oMenu
         MENUTITLE "Nivel 2"  OF oMenu
              MENUITEM "Item 2.1" Action MsgInfo("Nivel 2") DISABLED   OF oMenu
              MENUITEM "Item 2.2" Action MsgInfo("Nivel 2")  OF oMenu
              MENUTITLE "Nivel 3"  OF oMenu
                 MENUITEM "Disable 3.1" Action oMenu:Disable(4) DISABLED  OF oMenu
                 MENUITEM "Enable 3.1"  Action oMenu:Enable(4)  OF oMenu
              ENDMENU oMenu 
              MENUTITLE "Nivel 3"  OF oMenu
                 MENUITEM "Item 3.1" Action MsgInfo("Nivel 3") DISABLED INDEX 20  OF oMenu
                 MENUITEM "Item 3.2" Action oMenu:Enable(20)  OF oMenu
              ENDMENU oMenu
         ENDMENU oMenu 
         SEPARATOR  OF oMenu
         MENUITEM "Teste"    Action MsgInfo("Selecionado item teste")  OF oMenu
 MENUITEM "Sair" Action IIf(MsgYesNo("Quer mesmo sair"),oWindow:Close(),Msginfo("Desisti de sair"))  OF oMenu
    ENDMENU oMenu
	
	MENUTITLE "Executar" OF oMenu
         MENUITEM "Executar na barra" Action MsgInfo("Selecionado item Cadastro")  OF oMenu
    ENDMENU oMenu

    MENUTITLE "Other"   DISABLED OF oMenu
       MENUITEM "Other"    Action MsgStop("Outro")  OF oMenu
    ENDMENU oMenu

    MENUTITLE "Ajuda"  OF oMenu
       MENUITEM "Ajuda"    Action MsgStop("Quer ajuda")  OF oMenu
       SEPARATOR  OF oMenu
       MENUITEM "Sobre"    Action MsgInfo("xHGTK GUI Multiplataforma", "Atencao")  OF oMenu
    ENDMENU oMenu 

    ACTIVATE WINDOW oWindow
  
return
[/b]

Re: Menu

Enviado: 15 Jul 2008 13:16
por clebervn
A quem interessar possa, desse jeito ai embaixo funciona :

Uma pergunta somente, como posso saber a configuração de video q o cliente estará utilizando para que eu NÂO coloque uma fixa como na linha :

Gtk_Widget_Set_Size_Request( pWindow , 1280,1024 )

= menu.prg ===============================================================

Código: Selecionar todos

#include "gtk.ch"

Procedure Main()

   local pWindow
   local pVBox
   local pMenuBar
   local pMenuOpcoes
   local pOpcoes
   local pOpcao1
   local pOpcao2
   local pOpcao3

   // inicializa a gtk+
   Gtk_Init()
   // cria janela principal (main)
   pWindow := Gtk_Window_New( GTK_WINDOW_TOPLEVEL )
   Gtk_Widget_Set_Size_Request( pWindow , 1280,1024 )
   Gtk_Window_Set_Title( pWindow , "Janela MAIN" )
   Gtk_Window_Set_Position( pWindow , GTK_WIN_POS_CENTER )
   // cria menu
   pVBox := Gtk_VBox_New( .F. , 0 )
   Gtk_Container_Add( pWindow , pVBox )
   pMenuBar := Gtk_Menu_Bar_New()
   pMenuOpcoes := Gtk_Menu_New()
   pOpcoes := Gtk_Menu_Item_New_With_mnemonic( "_Cadastros" )
   pOpcao1 := Gtk_Menu_Item_New_With_mnemonic( "_Clientes" )
   pOpcao2 := Gtk_Menu_Item_New_With_mnemonic( "_Produtos" )
   pOpcao3 := Gtk_Menu_Item_New_With_mnemonic( "_Servicos" )
   Gtk_Menu_Item_Set_SubMenu( pOpcoes , pMenuOpcoes )
   Gtk_Menu_Shell_Append( pMenuOpcoes , pOpcao1 )
   Gtk_Menu_Shell_Append( pMenuOpcoes , pOpcao2 )
   Gtk_Menu_Shell_Append( pMenuOpcoes , pOpcao3 )
   Gtk_Menu_Shell_Append( pMenuBar , pOpcoes )
   Gtk_Box_Pack_Start( pVBox , pMenuBar , .F. , .F. , 3 )
   // termina programa quando janela principal for destruida
   Gtk_Signal_Connect( pWindow , "destroy" , { || Gtk_Main_Quit() } )
   // conecta opções dos menu com funções
   Gtk_Signal_Connect( pOpcao1 , "activate" , { || Clientes() } )
   Gtk_Signal_Connect( pOpcao2 , "activate" , { || Produtos() } )
   Gtk_Signal_Connect( pOpcao3 , "activate" , { || Servicos() } )
   // mostra janela principal
   Gtk_Widget_Show_All( pWindow )
   // inicia processamento dos eventos
   Gtk_Main()

Return

Function Clientes ()

   Static pWindow

   if pWindow == Nil
      // cria janela
      pWindow := Gtk_Window_New( GTK_WINDOW_TOPLEVEL )
      Gtk_Widget_Set_Size_Request( pWindow , 320 , 240 )
      Gtk_Window_Set_Title( pWindow , "Clientes" )
      Gtk_Signal_Connect( pWindow , "delete-event" , { || Gtk_Widget_Hide_On_Delete(pWindow) } )
      Gtk_Widget_Show_All( pWindow )
   else
      // mostra janela
      Gtk_Window_Present(pWindow)
   endif

Return Nil

Function Produtos ()

   Static pWindow

   if pWindow == Nil
      // cria janela
      pWindow := Gtk_Window_New( GTK_WINDOW_TOPLEVEL )
      Gtk_Widget_Set_Size_Request( pWindow , 320 , 240 )
      Gtk_Window_Set_Title( pWindow , "Produtos" )
      Gtk_Signal_Connect( pWindow , "delete-event" , { || Gtk_Widget_Hide_On_Delete(pWindow) } )
      Gtk_Widget_Show_All( pWindow )
   else
      // mostra janela
      Gtk_Window_Present(pWindow)
   endif

Return Nil

Function Servicos ()

   Static pWindow

   if pWindow == Nil
      // cria janela
      pWindow := Gtk_Window_New( GTK_WINDOW_TOPLEVEL )
      Gtk_Widget_Set_Size_Request( pWindow , 320 , 240 )
      Gtk_Window_Set_Title( pWindow , "Servicos" )
      Gtk_Signal_Connect( pWindow , "delete-event" , { || Gtk_Widget_Hide_On_Delete(pWindow) } )
      Gtk_Widget_Show_All( pWindow )
   else
      // mostra janela
      Gtk_Window_Present(pWindow)
   endif

Return Nil

Re: Menu

Enviado: 15 Jul 2008 21:22
por marcosgambeta
O primeiro exemplo utiliza classes. Havia um problema, mas este já foi corrigido. Você precisa obter uma versão atualizada da xHGTK.

O segundo exemplo utiliza as funções diretamente, não dependendo das classes. Por isto funciona corretamente.

Para saber o tamanho da tela, use as funções GetDesktopWidth (largura) e GetDesktopHeight (altura). Você terá o tamanho da tela em pontos (pixels).

Lamento não ter respondido antes, mas fiquei ausente do computador várias horas.

Re: Menu

Enviado: 16 Jul 2008 08:51
por clebervn
Vc poderia me fornecer o link ?

porque acabei de ir num da sourceforce.get e o q baixei de lá, os exemplos continuaram com problemas.....

tks

Re: Menu

Enviado: 16 Jul 2008 09:19
por jamazevedo
Tente via CVS.

Se seu sistema operacional for linux poderá digitar na linha de comando o seguinte:

cvs -z3 -d:pserver:anonymous@xhgtk.cvs.sourceforge.net:/cvsroot/xhgtk -q export -r HEAD xhgtk

O site abaixo possui algumas dicas.

http://xhgtk.sourceforge.net/

Re: Menu

Enviado: 16 Jul 2008 09:51
por clebervn
por enqto é no windows (DOS) mesmo.... mas baixei ultima versão e não alterou nada o problema do exemplo do menu... mas vou tentar via CVS


tks

Re: Menu

Enviado: 16 Jul 2008 13:42
por clebervn
Aproveitando, qdo compilo meus sistemas utilizo o "hbmake", vi q nesses exemplos, ele utiliza o "build.bat", que chama o harbour, e sempre compila um programa apenas, como faço dentro disto compilar mais de um programa ???


tks

BUILD.BAT
=========

Código: Selecionar todos

@echo off

set XHGTK_INCLUDE=\xhgtk\include
set XHGTK_LIB=\xhgtk\lib

if "%1" == "" goto HELP

if "%HB_GT_LIB%" == "" SET HB_GT_LIB=gtwin
if "%HB_PREF%" == ""         goto HELP
if "%GTK_BASEPATH%" == ""    goto HELP
if "%HB_BIN_INSTALL%" == ""  goto HELP
if "%HB_LIB_INSTALL%" == ""  goto HELP
if "%HB_INC_INSTALL%" == ""  goto HELP

if "%HB_COMPILER%" == "mingw32" goto MINGW
if "%HB_COMPILER%" == "msvc"    goto MSVC

goto HELP

:MSVC
if "%INCLUDE%" == ""         goto HELP
if "%LIB%" == ""             goto HELP

set LDFLAGS=/NODEFAULTLIB:LIBCMTD /NODEFAULTLIB:LIBCMT
set CFLAGS=-TP -W3 /MT /EHsc /link /FORCE:MULTIPLE /subsystem:windows 
set CFLAGS=%CFLAGS%/libpath:%XHGTK_LIB% /libpath:%GTK_BASEPATH%\lib /libpath:%HB_LIB_INSTALL%

set LIBS=xhgtk.lib gtwin.lib gtgui.lib

if "%HB_PREF%" == "hb" set LIBS=%LIBS% hbdebug.lib hbvm.lib hbrtl.lib hbrdd.lib hbrtl.lib hbvm.lib hbmacro.lib hbpp.lib hblang.lib hbcpag.libe hbcommon.lib  rddntx.lib rddcdx.lib rddfpt.lib hbsix.lib hbhsx.lib  

if "%HB_PREF%" == "xhb" set LIBS=%LIBS% debug.lib common.lib lang.lib codepage.lib vm.lib rtl.lib rdd.lib macro.lib pp.lib dbfcdx.lib dbffpt.lib dbfntx.lib hbsix.lib hsx.lib pcrepos.lib 

set LIBS=%LIBS% shell32.lib user32.lib winspool.lib ole32.lib oleaut32.lib ws2_32.lib kernel32.lib 
set LIBS=%LIBS% gdi32.lib comctl32.lib comdlg32.lib

set LIBS=%LIBS% glade-2.0.lib gtk-win32-2.0.lib xml2.lib gdk-win32-2.0.lib atk-1.0.lib gdk_pixbuf-2.0.lib 
set LIBS=%LIBS% pangowin32-1.0.lib pangocairo-1.0.lib cairo.lib pangoft2-1.0.lib fontconfig.lib freetype.lib  
set LIBS=%LIBS% z.lib pango-1.0.lib gobject-2.0.lib gmodule-2.0.lib glib-2.0.lib intl.lib iconv.lib  
	
harbour %1.prg -m -n -q0 -gc -p -w -I%HB_INC_INSTALL% -I%XHGTK_INCLUDE%

cl %1.c -I%HB_INC_INSTALL% %CFLAGS% %LDFLAGS% %LIBS% 

del %1.c
del %1.obj

goto EXIT

:MINGW
set CFLAGS=-W -Wall -O2 -mms-bitfields -mwindows -mno-cygwin 
set CFLAGS=%CFLAGS% -L%XHGTK_LIB% -L%GTK_BASEPATH%\lib -L%HB_LIB_INSTALL%

set LIBS=-Wl,--start-group -lxhgtk -lgtwin -lgtgui 

if "%HB_PREF%" == "hb" set LIBS=%LIBS%  -lhbdebug  -lhbvm  -lhbrtl  -lhbrdd  -lhbrtl  -lhbvm  -lhbmacro  -lhbpp  -lhblang  -lhbcpage -lhbcommon  -lrddntx  -lrddcdx  -lrddfpt  -lhbsix  -lhbhsx -Wl,--end-group

if "%HB_PREF%" == "xhb" set LIBS=%LIBS% -ldebug -lvm -lrtl -llang -lcodepage -lrdd -lmacro -lpp -ldbfntx -ldbfcdx -ldbffpt -lhbsix -lhsx -lcommon -lpcrepos -Wl,--end-group

set LIBS=%LIBS% -lm -luser32 -lwinspool -lole32 -loleaut32 -luuid -lgdi32 -lcomctl32 -lcomdlg32 -lodbc32 

set LIBS=%LIBS% -lglade-2.0 -lgtk-win32-2.0 -lxml2 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 
set LIBS=%LIBS% -lpangocairo-1.0 -lcairo -lpangoft2-1.0 -lfontconfig -lfreetype -lz -lpango-1.0 -lm -lgobject-2.0 
set LIBS=%LIBS% -lgmodule-2.0 -lglib-2.0 -lintl -liconv  
 
harbour %1.prg -m -n -q0 -gc -p -w -I%HB_INC_INSTALL% -I%XHGTK_INCLUDE%

gcc %1.c -o %1 -I%HB_INC_INSTALL% %CFLAGS% %LIBS% 

del %1.c

goto EXIT

:HELP
   echo.
   echo.
   echo Usage: build filename  - don't use the .prg extention, e.g. build myapp
   echo.
   echo Notes:
   echo.
   echo     PATH:
   echo       - Add the path for harbour binaries as well as Gtk\bin files	
   echo.
   echo     HB_COMPILER:
   echo       - mingw32 (Cygnus/MinGW GNU C, Windows 32-bit)
   echo       - msvc    (Microsoft Visual C++, Windows 32-bit)
   echo.
   echo     GTK_BASEPATH:
   echo       - Location where is gtk is installed e.g. SET GTK_BASE_PATH=C:\Gtk
   echo.
   echo     HB_PREF:
   echo       - xHarbour (xhb) or Harbour (hb) compiler, e.g. SET HB_PREF=xhb
   echo.
   echo     HB_BIN_INSTALL:
   echo       - Location where the Harbour binaries are installed e.g. SET HB_BIN_INSTALL=C:\xHarbour\bin
   echo.
   echo     HB_LIB_INSTALL:
   echo       - Location where the Harbour libraries are installed e.g. SET HB_LIB_INSTALL=C:\xHarbour\lib
   echo.
   echo     HB_INC_INSTALL:
   echo       - Location where the Harbour include files are installed e.g. SET HB_INC_INSTALL=C:\xHarbour\include 
   echo.
   echo     INCLUDE:
   echo       - msvc only, where are the nclude files locations e.g. C:\Msvc\include
   echo.
   echo     LIB:
   echo       - msvc only, where are the libraries files locations e.g. C:\Msvc\lib
   echo.

:EXIT

Re: Menu

Enviado: 17 Jul 2008 08:58
por jamazevedo
clebervn escreveu:Aproveitando, qdo compilo meus sistemas utilizo o "hbmake", vi q nesses exemplos, ele utiliza o "build.bat", que chama o harbour, e sempre compila um programa apenas, como faço dentro disto compilar mais de um programa ???
Também tive esse problema: ai fiz o seguinte no fim do programa "menu.prg" acrescentei as seguintes linhas:

Código: Selecionar todos

...
DO Clientes.Prg
DO Produtos.PRG
...
Mas não funcionou.

Ai alterei o "build.bat"

Código: Selecionar todos

harbour %1.prg -m -n -q0 -gc -p -w -I%HB_INC_INSTALL% -I%XHGTK_INCLUDE%
cl %1.c -I%HB_INC_INSTALL% %CFLAGS% %LDFLAGS% %LIBS% 
del %1.c
del %1.obj
e salvei com outro nome. A alteração é a seguinte: tire a linha "del %1.c"

Código: Selecionar todos

harbour %1.prg -m -n -q0 -gc -p -w -I%HB_INC_INSTALL% -I%XHGTK_INCLUDE%
cl %1.c -I%HB_INC_INSTALL% %CFLAGS% %LDFLAGS% %LIBS% 
rem del %1.c
del %1.obj
Então você poderá usar esse "novo" build para compilar os .prg separadamente.

Depois altere a seguinte linha no "build.bat" (o antigo original)

Código: Selecionar todos

gcc %1.c clientes.c produtos.c ... -o %1 -I%HB_INC_INSTALL% %CFLAGS% %LIBS%
Bem é uma maneira estranha de compilar diversos .prg em GTK porém funcionou.

No Linux o HBMake funciona sem precisar destes artifícios. Em Windows o HBMake não funcionou para compilar vários ".prg".

Re: Menu

Enviado: 21 Jul 2008 10:41
por marcosgambeta
No Windows utilizo o MSYS. Com ele, temos uma janela de console semelhante ao Linux, podendo trabalhar com scripts ou makefiles.

MSYS: A Minimal SYStem providing a POSIX compatible Bourne shell environment, with a small collection of UNIX command line tools. Primarily developed as a means to execute the configure scripts and Makefiles used to build Open Source software, but also useful as a general purpose command line interface to replace Windows cmd.exe.
http://www.mingw.org