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:
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