harbour + gtwvw + hwgui
Moderador: Moderadores
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
harbour + gtwvw + hwgui
Caros colegas.
Há vários dias venho acompanhando algumas postagens que me deixaram muito interesado em migrar pra harbour. Mas tenho algumas dúvida.
Hoje uso gtwvw junto com a hwgui, as duas convivem bem dentro do nosso sistema. Pergunto, no harbour:
1 - tem gtwvw ou equivalente?
2 - tem hwgui?
3 - as duas compilam juntas?
Há vários dias venho acompanhando algumas postagens que me deixaram muito interesado em migrar pra harbour. Mas tenho algumas dúvida.
Hoje uso gtwvw junto com a hwgui, as duas convivem bem dentro do nosso sistema. Pergunto, no harbour:
1 - tem gtwvw ou equivalente?
2 - tem hwgui?
3 - as duas compilam juntas?
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: harbour + gtwvw + hwgui
Ola!
Tem a WVW mas está parada.
Quanto a Hwgui, ela é nativa do Harbour. Alias não sei a necessidade de usar WVW com Hwgui, já que a Hwgui faz tudo mais fácil e melhor que a WVW, toda bugada e abandonada pelo seu criador.
Saudações,
Itamar M. Lins Jr.
Tem a WVW mas está parada.
Quanto a Hwgui, ela é nativa do Harbour. Alias não sei a necessidade de usar WVW com Hwgui, já que a Hwgui faz tudo mais fácil e melhor que a WVW, toda bugada e abandonada pelo seu criador.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Re: harbour + gtwvw + hwgui
Caro colega Itamar.
Obrigado por sua tentativa em ajudar.
Com relacao a necessidade de usar a gtwvw, se nao fosse realmente necessário eu nao estaria perguntando.
Infelizmente nem todos tem tempo para converter um sistema inteiro para hwgui, mesmo sabendo que é a melhor opcao.
Nem sempre a melhor é a mais viavel.
Por estas e outras, eu preciso das duas juntas, pelo menos por enquanto, entao continuo na dúvida:
No harbour, a gtwvw e hwgui compilam juntas?
Obrigado!
Obrigado por sua tentativa em ajudar.
Com relacao a necessidade de usar a gtwvw, se nao fosse realmente necessário eu nao estaria perguntando.
Infelizmente nem todos tem tempo para converter um sistema inteiro para hwgui, mesmo sabendo que é a melhor opcao.
Nem sempre a melhor é a mais viavel.
Por estas e outras, eu preciso das duas juntas, pelo menos por enquanto, entao continuo na dúvida:
No harbour, a gtwvw e hwgui compilam juntas?
Obrigado!
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: harbour + gtwvw + hwgui
Ola!
Então o tempo que eu levaria para converter minha aplicação para WVW ou WVG simplesmente era maior do que converter para Hwgui até a curva de apredizando é maior. Porque já fui um usuário da WVW e assemelhados wvwtools.
Eu tenho uma aplicação em WVT com algumas telas em HWGUI, mas ela não foi migrada nem será, porque eu conclui que na época era mais fácil abandonar o código e reescrever tudo em Hwgui, muito mais rápido do que reescrever para WVW ok?
Tem um post aqui antigo meu comparando a migração para a WVW e para a Hwgui.
Saudações,
Itamar M. Lins Jr.
Observe que a Hwgui roda não só com a WVW mais também com a WVT/WVG que está muito mais estável do que a WVW, estou dizendo isso no Harbour.Infelizmente nem todos tem tempo para converter um sistema inteiro para hwgui, mesmo sabendo que é a melhor opcao.
Nem sempre a melhor é a mais viavel.
Então o tempo que eu levaria para converter minha aplicação para WVW ou WVG simplesmente era maior do que converter para Hwgui até a curva de apredizando é maior. Porque já fui um usuário da WVW e assemelhados wvwtools.
Respondendo novamente... Existe a WVW no contrib do Harbour, não sei se tem todas as funções usadas por vocês funcionando redondo, precisa ser testada por quem está precisando.Por estas e outras, eu preciso das duas juntas, pelo menos por enquanto, entao continuo na dúvida:
No harbour, a gtwvw e hwgui compilam juntas?
Eu tenho uma aplicação em WVT com algumas telas em HWGUI, mas ela não foi migrada nem será, porque eu conclui que na época era mais fácil abandonar o código e reescrever tudo em Hwgui, muito mais rápido do que reescrever para WVW ok?
Tem um post aqui antigo meu comparando a migração para a WVW e para a Hwgui.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: harbour + gtwvw + hwgui
Ola!
Uma correção, a WVW está na pasta examples e não na contrib.
O exemplo abaixo compila no Harbour sem traumas, mas peguei uns erros quando executo e entro na parte do browse, talvez seja erro de programação e não da WVW em si.
Saudações,
Itamar M. Lins Jr.
Uma correção, a WVW está na pasta examples e não na contrib.
O exemplo abaixo compila no Harbour sem traumas, mas peguei uns erros quando executo e entro na parte do browse, talvez seja erro de programação e não da WVW em si.
Código: Selecionar todos
/*
* $Id: wvwtest9.prg 15533 2010-09-26 15:30:18Z vszakats $
*/
//-------------------------------------------------------------------//
//
// Test/Demo Program for
// GTWVW GUI Interface
// with multiple window support
// a work in progress by
// Budyanto Dj. <budyanto@centrin.net.id>
// based on:
//
// WVTGUI.PRG,
// GTWVT Console GUI Interface
// by Pritpal Bedi <pritpal@vouchcac.com>
//
// GTWVT
// by Peter Rees <peter@rees.co.nz>
//
// parts of this program are copyrights of their respective owners
//
//-------------------------------------------------------------------//
/*
Compile/Link info:
This program requires WVWMOUSE.PRG.
You may use 'hbmk2 wvwtest9.hbp' to build this program.
*/
#include "inkey.ch"
#include "common.ch"
#include "setcurs.ch"
#include "hbgtinfo.ch"
#define MF_INSERT 0
#define MF_CHANGE 128
#define MF_APPEND 256
#define MF_DELETE 512
#define MF_REMOVE 4096
#define MF_BYCOMMAND 0
#define MF_BYPOSITION 1024
#define MF_SEPARATOR 2048
#define MF_ENABLED 0
#define MF_GRAYED 1
#define MF_DISABLED 2
#define MF_UNCHECKED 0
#define MF_CHECKED 8
#define MF_USECHECKBITMAPS 512
#define MF_STRING 0
#define MF_BITMAP 4
#define MF_OWNERDRAW 256
#define MF_POPUP 16
#define MF_MENUBARBREAK 32
#define MF_MENUBREAK 64
#define MF_UNHILITE 0
#define MF_HILITE 128
#define MB_OK 0
#define MB_OKCANCEL 1
#define MB_ABORTRETRYIGNORE 2
#define MB_YESNOCANCEL 3
#define MB_YESNO 4
#define MB_RETRYCANCEL 5
#define MB_CANCELTRYCONTINUE 6
#define MB_ICONHAND 16
#define MB_ICONQUESTION 32
#define MB_ICONEXCLAMATION 48
#define MB_ICONASTERISK 64
#define MB_USERICON 128
#define MB_ICONWARNING MB_ICONEXCLAMATION
#define MB_ICONERROR MB_ICONHAND
#define MB_ICONINFORMATION MB_ICONASTERISK
#define MB_ICONSTOP MB_ICONHAND
#define MB_DEFBUTTON1 0
#define MB_DEFBUTTON2 256
#define MB_DEFBUTTON3 512
#define MB_DEFBUTTON4 768
#define MB_APPLMODAL 0
#define MB_SYSTEMMODAL 4096
#define MB_TASKMODAL 8192
#define MB_HELP 16384 // Help Button
#define MB_NOFOCUS 32768
#define MB_SETFOREGROUND 65536
#define MB_DEFAULT_DESKTOP_ONLY 131072
#define MB_TOPMOST 262144
#define MB_RIGHT 524288
#define MB_RTLREADING 1048576
#define IDOK 1
#define IDCANCEL 2
#define IDABORT 3
#define IDRETRY 4
#define IDIGNORE 5
#define IDYES 6
#define IDNO 7
#define IDCLOSE 8
#define IDHELP 9
#define IDTRYAGAIN 10
#DEFINE CRLF chr(13)+chr(10)
#DEFINE WVW_MAXWINDOWS 20 //! must match with HBGTWVW.H
#DEFINE WVW_DEFAULT_MENUKEYEVENT 1024 //! must match with HBGTWVW.H
//20040303: !!! copied from WVWMOUSE.PRG pls create an include file
* mouse object types //20040303
#DEFINE _MOBJECT_BUTTON 0 //mouse button
#DEFINE _MOBJECT_HSCROLL 1 //horiz scrollbar //obsolete, not used
#DEFINE _MOBJECT_VSCROLL 2 //horiz scrollbar //obsolete, not used
* for Button Types: //20040303
#DEFINE _BUTTON_NORMAL 0 //normal button
#DEFINE _BUTTON_FLAT 1 //'transparent', raised when mouseover
#DEFINE _BUTTON_NONE 2 //no sign even when mouseover or clicked
#DEFINE _BUTTON_HARD 3 //no recessed when pressed
* menu actions
#DEFINE IDM_DEMO_GET 101
#DEFINE IDM_DEMO_BROWSE 102
#DEFINE IDM_DEMO_CONSOLE 103
//#DEFINE IDM_DEMO_COLOR 104
#DEFINE IDM_DEMO_EXIT 199
#DEFINE IDM_TOOLBAR_RESET 501
#DEFINE IDM_TOOLBAR_DELETE 502
#DEFINE IDM_TOOLBAR_ENABLE 503
#DEFINE IDM_TOOLBAR_DISABLE 504
#DEFINE IDM_WINDOW_SPACING_INCREASE 201
#DEFINE IDM_WINDOW_SPACING_DECREASE 202
#DEFINE IDM_WINDOW_SPACING_DEFAULT 203
#DEFINE IDM_HELP_HELP 301
#DEFINE IDM_HELP_INFO 302
* menu action from toolbar only:
#DEFINE IDM_NETCONNECT 401
#DEFINE IDM_NETDISCONNECT 402
#DEFINE IDM_BACK 403
#DEFINE IDM_FORWARD 404
#DEFINE IDM_COPY 405
#DEFINE IDM_PASTE 406
static s_amiscobjlist := {} //x misc object list (actually: list of codeblocks)
static s_afontinfo := {} //x current font info
//-------------------------------------------------------------------//
PROCEDURE Main()
local nCurWindow
local hWnd, hMenu, hPopupmenu, hPopupmenu2
local cLabel := "This is the Main Window"
local nMaxRow, nMaxCol
local nCursor
local kF1, kF2, kF3
local kF9, kF10, kF11
local oMouse
local ch
SET( _SET_EVENTMASK, INKEY_ALL )
SET DATE BRITISH
SET SCOREBOARD OFF
//wvw_SetPaintRefresh(0)
wvw_SetVertCaret(.t.)
wvw_pbSetFont(, "Tahoma", 14)
nCursor := setcursor(0)
if !SetDefaultWindowSize()
ldebug("Cannot setDefaultWindowSize()")
else
ldebug("Successfully setDefaultWindowSize()")
endif
nMaxRow := maxrow(); nMaxCol := maxcol()
if wvw_SBcreate() > 0 .and.;
wvw_SBaddPart(, "99:99:99") > 0
wvw_SetTimer(, 1000)
endif
s_afontinfo := WVW_getfontinfo()
hb_gtInfo( HB_GTI_INKEYFILTER, {|nkey| nAfterInkey(nkey) } )
WVW_SETMOUSEMOVE(,.t.) //required by wvwmouse
kF1 := SetKey( K_F1, {|| xHelp() } )
kF2 := SetKey( K_F2, {|| xDebugInfo() } )
kF3 := SetKey( K_F3, {|| Demo_Console() } )
kF9 := SetKey( K_F9, {|| WVW_SetLineSpacing(NIL, WVW_SetLineSpacing()-2) } )
kF10 := SetKey( K_F10, {|| WVW_SetLineSpacing(NIL, WVW_SetLineSpacing()+2) } )
kF11 := SetKey( K_F11, {|| WVW_SetDefLineSpacing( WVW_SetLineSpacing() ) } )
* start menu definitions *************************************
hWnd := WVW_GETWINDOWHANDLE()
hMenu = WVW_CreateMenu( )
hPopupMenu = WVW_CreateMenu( )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_GET, "~GET demo" )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_BROWSE, "~BROWSE demo" )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_CONSOLE, "~CONSOLE demo (F3)" )
//WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_COLOR, "~COLOR demo" )
WVW_AppendMenu( hPopupMenu, MF_SEPARATOR )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_EXIT, "E~xit" )
WVW_AppendMenu( hMenu , MF_ENABLED + MF_POPUP , hPopupMenu , "~Demos", )
hPopupMenu = WVW_CreateMenu( )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_TOOLBAR_ENABLE, "~Enable Toolbar" )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_TOOLBAR_DISABLE, "~Disable Toolbar" )
WVW_AppendMenu( hPopupMenu, MF_SEPARATOR )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_TOOLBAR_RESET, "~Reset Toolbar" )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_TOOLBAR_DELETE, "~Delete Toolbar" )
WVW_AppendMenu( hMenu , MF_ENABLED + MF_POPUP , hPopupMenu , "~Toolbar", )
hPopupMenu = WVW_CreateMenu( )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_WINDOW_SPACING_DECREASE, "~Decrease Line Spacing (F9)" )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_WINDOW_SPACING_INCREASE, "~Increase Line Spacing (F10)" )
WVW_AppendMenu( hPopupMenu, MF_SEPARATOR )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_WINDOW_SPACING_DEFAULT, "~Set As Default Line Spacing (F11)" )
WVW_AppendMenu( hMenu , MF_ENABLED + MF_POPUP , hPopupMenu , "~Window", )
hPopupMenu = WVW_CreateMenu( )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_HELP_HELP, "~Help (F1)" )
WVW_AppendMenu( hPopupMenu, MF_SEPARATOR )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_HELP_INFO, "~Info (F2)" )
WVW_AppendMenu( hMenu , MF_ENABLED + MF_POPUP , hPopupMenu , "~Help", )
WVW_SetMenu(, hMenu )
* end menu definitions *************************************
nCurWindow := WVW_nNumWindows()-1 // == 0, Main Window
CreateToolbar(nCurWindow)
ResetMiscObjects( nCurWindow )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawLabel( nWindow, 1,40, cLabel,6,, rgb(255,255,255), rgb(198,198,198), 'Arial', s_afontinfo[2], , , , , .t., .t. ) } )
wvwm_ResetMouseObjects( nCurWindow )
wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New("Info!", maxrow()-2,67, , , {|| xDebugInfo() } ))
oMouse := WVWMouseButton():New("Flat", maxrow()-2,67-11, , , {|| lboxmessage("flat") }, 1, NIL )
oMouse:cImage := "vouch1.gif"
oMouse:cCaption := ""
wvwm_AddMouseObjects( nCurWindow, oMouse )
oMouse := WVWMouseButton():New("None", maxrow()-2,67-11-11, , , {|| lboxmessage("none") }, 2, NIL )
oMouse:Enable(.t.)
wvwm_AddMouseObjects( nCurWindow, oMouse )
wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New("Hard", maxrow()-2,67-11-11-11, , , {|| lboxmessage("hard") }, 3, NIL ))
oMouse := WVWMouseButton():New("Disabled", maxrow()-2,67-11-11-11-11, , , {|| xDebugInfo() } )
oMouse:Enable(.f.)
wvwm_AddMouseObjects( nCurWindow, oMouse )
oMouse := WVWMouseButton():New("Tight", maxrow()-2,67-11-11-11-11-11, , , {|| lboxmessage("tight") } )
oMouse:lTight := .t.
wvwm_AddMouseObjects( nCurWindow, oMouse )
* 20070525 the real pushbutton, easier and better looking. Nothing to do with wvwmouse.prg.
WVW_PBcreate( nCurWindow, maxrow()-4,67-11-11-11-11-11, maxrow()-4, 67+9-11-11-11-11-11, "native", NIL, {||lboxmessage("native pushbutton")}, NIL)
SetColor( 'N/W,N/GR*,,,N/W*' )
CLS
@ 0,0 say "This is line 0"
@ 1,0 say "This is line 1"
@ maxrow()-1,0 say "This is line " + alltrim(str(maxrow()-1))
@ maxrow(),0 say "This is line " + alltrim(str(maxrow()))
do while !((ch:=inkey(0))==K_ESC)
/* experiment with different paintrefresh interval:
do case
case ch==asc("<")
wvw_setPaintRefresh( INT(wvw_setPaintRefresh() / 2) )
alert(wvw_setPaintRefresh())
case ch==asc(">")
wvw_setPaintRefresh( INT(wvw_setPaintRefresh() * 2) )
alert(wvw_setPaintRefresh())
case ch==asc("0")
wvw_setPaintRefresh( 0 )
alert(wvw_setPaintRefresh())
otherwise
* do nothing. inkey() has been handled by nAfterInket()
endcase
*/
enddo
lboxmessage("Thanks for trying this program." + CRLF +;
"Good bye!")
* restore state
wvwm_ResetMouseObjects( nCurWindow )
ResetMiscObjects( nCurWindow )
SetKey( K_F11, kF11 )
SetKey( K_F10, kF10 )
SetKey( K_F9, kF9 )
//SetKey( K_F4, kF4 )
SetKey( K_F3, kF3 )
SetKey( K_F2, kF2 )
SetKey( K_F1, kF1 )
setcursor(nCursor)
RETURN //main()
//-------------------------------------------------------------------//
static procedure xDisableMenus(nWinNum, nNumItem)
* disables all Menu Items of window nWinNum
local i
local hMenu := WVW_GetMenu(nWinNum)
for i := 0 to nNumItem-1
WVW_EnableMenuItem(hMenu, i, MF_BYPOSITION + MF_GRAYED)
next
return
static procedure xEnableMenus(nWinNum, nNumItem)
* enables all Menu Items of window nWinNum
local i
local hMenu := WVW_GetMenu(nWinNum)
for i := 0 to nNumItem-1
WVW_EnableMenuItem(hMenu, i, MF_BYPOSITION + MF_ENABLED)
next
WVW_DrawMenuBar(nWinNum) //to force redraw of menu
return
//-------------------------------------------------------------------//
procedure Demo_Console(nTop, nLeft, nBottom, nRight)
local cWinName, nCurWindow
local nMaxrow, nMaxCol
local nCursor
local cColor
local ch
local lMouseMove
local lEchoing := .f.
default nTop to 2
default nLeft to 2
default nBottom to nTop+10
default nRight to nLeft+45
cWinName := "Typewriter (Win#" + alltrim( str( WVW_nNumWindows() ) ) + "); CtrlW: New Window; ESC: Exit"
//x init window
nCurWindow := WVW_nOpenWindow(cWinName, nTop, nLeft, nBottom, nRight)
if nCurWindow==0
lboxmessage("Failed Opening new window!")
return
endif
nCursor := setcursor(SC_NORMAL)
cColor := setcolor("W+/N")
lMouseMove := WVW_SETMOUSEMOVE(,.f.)
nMaxrow := maxrow(); nMaxcol := maxcol()
ResetMiscObjects( nCurWindow )
wvwm_ResetMouseObjects( nCurWindow )
************ begin typewriter mode *************
CLS
?? "Press Ctrl+E to toggle between echoing what you type to previous window"
?
do while inkey()<>chr(0); enddo //clear typeahead
ch := inkey(0)
do while !(ch == K_ESC)
if ch==K_ENTER
?? chr(ch)+chr(10)
if lEchoing
* write the same thing to previous window
WVW_nSetCurWindow( nCurWindow-1 )
?? chr(ch)+chr(10)
WVW_nSetCurWindow( nCurWindow )
endif
elseif ch==K_CTRL_W
* Recursively call (another) typewriter, bigger one
Demo_Console(nTop+2, nLeft+2, nBottom+4, nRight+6)
elseif ch==K_CTRL_E
* toggle echoing output to prev window
lEchoing := !lEchoing
else
* any other char goes here
?? chr(ch)
if lEchoing
* write the same thing to previous window
WVW_nSetCurWindow( nCurWindow-1 )
?? chr(ch)
WVW_nSetCurWindow( nCurWindow )
endif
endif
ch := inkey(0)
enddo
************ end typewriter mode ***************
* epilogue
WVW_lCloseWindow()
* restore state
wvwm_ResetMouseObjects( nCurWindow )
ResetMiscObjects( nCurWindow )
setcursor(nCursor)
setcolor(cColor)
WVW_SETMOUSEMOVE(,lMouseMove)
return //Demo_Console()
//-------------------------------------------------------------------//
PROCEDURE Demo_Get()
local nCurWindow, getlist := {}
local cLabel := "This is the GET Demo Window"
LOCAL nTop := 4
LOCAL nLeft := 4
LOCAL nBottom := 21
LOCAL nRight := 75
LOCAL nColGet := 8
LOCAL get_1 := ctod( '' )
LOCAL get_2 := Pad( 'Pritpal Bedi', 35 )
LOCAL get_3 := Pad( '60, New Professor Colony', 35 )
LOCAL get_4 := Pad( 'Ludhiana, INDIA', 35 )
LOCAL get_5 := Pad( 'http://www.vouchcac.com', 35 )
LOCAL get_6 := 20000
local nCursor := setcursor(SC_NORMAL)
memvar x
//x init window
nCurWindow := WVW_nOpenWindow("GET Demo", nTop, nLeft, nBottom, nRight)
if nCurWindow==0
lboxmessage("Failed Opening new window!")
return
endif
WVW_SetIcon(, 'vr_1.ico' )
ResetMiscObjects( nCurWindow )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawLabel( nWindow, 1,nRight-nLeft, cLabel,2,, rgb(255,255,255), rgb(198,198,198), 'Arial', s_afontinfo[2], , , , , .t., .t. ) } )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawBoxRecessed( nWindow, 7-nTop, 61-nLeft, 13-nTop, 70-nLeft ) } )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawBoxGroup( nWindow, 15-nTop, 59-nLeft, 18-nTop, 72-nLeft ) } )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawBoxGroup( nWindow, 5-nTop, 6-nLeft, 19-nTop, 44-nLeft ) } )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawImage( nWindow, 8-nTop,62-nLeft,12-nTop,69-nLeft, 'vouch1.bmp' ) } )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawBoxRecessed( nWindow, 7-nTop, 48-nLeft, 13-nTop, 55-nLeft ) } )
AddMiscObjects( nCurWindow, {|nWindow| x:= nWindow, aEval( GetList, {|oGet| WVW_DrawBoxGet( x, oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } ) } )
wvwm_ResetMouseObjects( nCurWindow )
/* we now use native push button
wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New("Info", maxrow()-1,maxcol()-15, , , {|| xDebugInfo() } ))
*/
WVW_PBcreate( nCurWindow, maxrow()-1,maxcol()-15, maxrow()-1, maxcol()-5, "Info", NIL, {||xDebugInfo()}, NIL)
CLS
@ 6-nTop, nColGet-nLeft SAY '< Date >'
@ 9-nTop, nColGet-nLeft SAY '<' + PadC( 'Name', 33 ) + '>'
@ 12-nTop, nColGet-nLeft SAY '<' + PadC( 'Address', 33 ) + '>'
@ 16-nTop, 61-nLeft SAY '< Salary >'
@ 7-nTop, nColGet-nLeft GET get_1
@ 10-nTop, nColGet-nLeft GET get_2 //VALID ( VouChoice() < 7 )
@ 13-nTop, nColGet-nLeft GET get_3
@ 15-nTop, nColGet-nLeft GET get_4
@ 17-nTop, nColGet-nLeft GET get_5
@ 17-nTop, 61-nLeft GET get_6 PICTURE '@Z 9999999.99'
READ
* epilogue
//lboxmessage("Thanks for trying the GET Demo!")
WVW_lCloseWindow()
* restore state
wvwm_ResetMouseObjects( nCurWindow )
ResetMiscObjects( nCurWindow )
setcursor(nCursor)
RETURN //Demo_Get()
//-------------------------------------------------------------------//
FUNCTION DEMO_Browse()
LOCAL nKey, bBlock, oBrowse , i
LOCAL lEnd := .f.
LOCAL info_ := {} //WVW_nOpenWindow() has not been performed, so...
LOCAL nTop := 3 //pls notice that this is relative to PARENT window!
LOCAL nLeft := 3 //pls notice that this is relative to PARENT window!
LOCAL nBottom := maxrow() - 2 //pls notice that this is relative to PARENT window!
LOCAL nRight := maxcol() - 3 //pls notice that this is relative to PARENT window!
LOCAL cColor
local nMaxRow, nMaxCol
local nStyle := 0
local nCurWindow
local oMouse, nHScrollBar, nVScrollBar
//x init window
nCurWindow := WVW_nOpenWindow("BROWSE Demo", nTop, nLeft, nBottom, nRight)
if nCurWindow==0
lboxmessage("Failed Opening new window!")
return NIL
endif
nMaxRow := maxrow(); nMaxCol := maxcol()
ResetMiscObjects( nCurWindow )
wvwm_ResetMouseObjects( nCurWindow )
cColor := SetColor( 'N/W' )
CLS
SetColor( 'N/W*,N/GR*,,,N/W* ' )
USE '..\..\..\tests\TEST' NEW
if NetErr()
WVW_lCloseWindow()
return nil
endif
index on FIELD->LAST to TEST1 //20040707
info_:= DbStruct()
oBrowse := TBrowseNew( 3, 2, maxrow()-3, maxcol()-3 )
oBrowse:ColSep = ' '
oBrowse:HeadSep = '__'
oBrowse:GoTopBlock = { || dbGoTop() }
oBrowse:GoBottomBlock = { || dbGoBottom() }
oBrowse:SkipBlock = { | nSkip | dbSkipBlock( nSkip,oBrowse ) }
for i := 1 to len( info_ )
bBlock := VouBlockField( i )
oBrowse:AddColumn( TBColumnNew( info_[ i,1 ], bBlock ) )
next
oBrowse:configure()
WVW_SetPen( nStyle, 0, rgb( 210,1210,210 ) )
WVW_SetIcon(, 'DIA_EXCL.ico' )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawBoxRecessed( nWindow, oBrowse:nTop, oBrowse:nLeft, oBrowse:nBottom, oBrowse:nRight ) } )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawGridHorz( nWindow, oBrowse:nTop+3, oBrowse:nLeft, oBrowse:nRight, oBrowse:nBottom - oBrowse:nTop - 2 ) } )
AddMiscObjects( nCurWindow, {|nWindow| WVW_DrawGridVert( nWindow, oBrowse:nTop, oBrowse:nBottom, oBrowse:aColumnsSep, len( oBrowse:aColumnsSep ) ) } )
/* we now use native push button
wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New("Info", maxrow(),maxcol()-15, , , {|| xDebugInfo() } ))
*/
WVW_PBcreate( nCurWindow, maxrow(),maxcol()-15, maxrow(), maxcol()-5, "Info", NIL, {||xDebugInfo()}, NIL)
nHScrollBar := wvw_xbCreate( nCurWindow, 0, oBrowse:nBottom+1, oBrowse:nLeft, oBrowse:nRight-oBrowse:nLeft+1, /*aBlock*/ {|nWinNum, nXBid, nXBmsg, nXBpos| HXBscroller(oBrowse, nWinNum, nXBid, nXBmsg)}, /*aOffset*/ NIL)
nVScrollBar := wvw_xbCreate( nCurWindow, 1, oBrowse:nTop, oBrowse:nRight+1, oBrowse:nBottom-oBrowse:nTop+1, /*aBlock*/ {|nWinNum, nXBid, nXBmsg, nXBpos| VXBscroller(oBrowse, nWinNum, nXBid, nXBmsg)}, /*aOffset*/ NIL)
DispOutAt( nTop + 1-nTop, nleft-nleft, padc( hb_CurDrive()+':\'+CurDir()+'\'+'test.dbf', nRight - nLeft + 1 ), 'W+/W' )
oBrowse:ForceStable()
RefreshHXB(oBrowse, nCurWindow, nHScrollBar) //20040704
RefreshVXB(oBrowse, nCurWindow, nVScrollBar) //20040704
While !lEnd
nKey = InKey( 0 )
do case
case nKey == K_ESC .or. nKey == K_ENTER
lEnd = .t.
loop
case nKey == K_DOWN
oBrowse:Down()
case nKey == K_MWBACKWARD
oBrowse:Down() //simple scroll down
case nKey == K_UP
oBrowse:Up()
case nKey == K_MWFORWARD
oBrowse:Up() //simple scroll up
case nKey == K_LEFT
if oBrowse:colPos== 1; loop; endif
oBrowse:Left()
case nKey == K_RIGHT
if oBrowse:colPos== oBrowse:colCount(); loop; endif
oBrowse:Right()
case nKey = K_PGDN
oBrowse:pageDown()
case nKey = K_PGUP
oBrowse:pageUp()
case nKey = K_CTRL_PGUP
oBrowse:goTop()
case nKey = K_CTRL_PGDN
oBrowse:goBottom()
case nKey = K_HOME
oBrowse:home()
case nKey = K_END
oBrowse:end()
case nKey = K_CTRL_LEFT
oBrowse:panLeft()
case nKey = K_CTRL_RIGHT
oBrowse:panRight()
case nKey = K_CTRL_HOME
oBrowse:panHome()
case nKey = K_CTRL_END
oBrowse:panEnd()
otherwise
* other keys, including mouse events do not need ForceStable
loop
endcase
oBrowse:ForceStable()
//refresh the scrollbars due to keyboard navigation
RefreshHXB(oBrowse, nCurWindow, nHScrollBar) //20040704
RefreshVXB(oBrowse, nCurWindow, nVScrollBar) //20040704
enddo
DBCloseArea()
* epilogue
//lboxmessage("Thanks for trying the BROWSE Demo!")
WVW_lCloseWindow()
* restore state
wvwm_ResetMouseObjects( nCurWindow )
ResetMiscObjects( nCurWindow )
WVW_SetPen( 0 )
SetColor( cColor )
//SetCursor( nCursor )
RETURN nil //DEMO_Browse()
/* generic Vertical Scrollbar handler for tbrowse */
function VXBscroller(oBrowse, nWinNum, XBid, XBmsg)
local nOldWin
local lNeedStabilize
//if we can't handle non topmost window we must return right away
//if nWinNum <> wvw_nNumWindows()-1 ; return ; endif
nOldWin := wvw_nSetCurWindow(nWinNum)
lNeedStabilize := .f.
do while .t. //dummy loop
do case
case XBmsg == 0 //SB_LINEUP
if ordKeyNo() == 1; exit; endif
oBrowse:up()
case XBmsg == 1 //SB_LINEDOWN
if ordKeyNo() == ordKeyCount(); exit; endif
oBrowse:down()
case XBmsg == 2 //SB_PAGEUP
if ordKeyNo() == 1; exit; endif
oBrowse:pageup()
case XBmsg == 3 //SB_PAGEDOWN
if ordKeyNo() == ordKeyCount(); exit; endif
oBrowse:pagedown()
otherwise
* ignore
lNeedStabilize := .f.
exit
endcase
lNeedStabilize := .t.
exit
enddo //dummy loop
if lNeedStabilize
oBrowse:ForceStable()
RefreshVXB(oBrowse, nWinNum, XBid)
endif
wvw_nSetCurWindow(nOldWin)
return NIL
/* generic Horizontal Scrollbar handler for tbrowse */
function HXBscroller(oBrowse, nWinNum, XBid, XBmsg)
local nOldWin
local lNeedStabilize
//if we can't handle non topmost window we must return right away
//if nWinNum <> wvw_nNumWindows()-1 ; return ; endif
nOldWin := wvw_nSetCurWindow(nWinNum)
lNeedStabilize := .f.
do while .t. //dummy loop
do case
case XBmsg == 0 //SB_LINELEFT
if oBrowse:colPos== 1; exit; endif
oBrowse:left()
case XBmsg == 1 //SB_LINERIGHT
if oBrowse:colpos == oBrowse:colCount(); exit; endif
oBrowse:right()
case XBmsg == 2 //SB_PAGELEFT
if oBrowse:colPos== 1; exit; endif
oBrowse:panleft()
case XBmsg == 3 //SB_PAGERIGHT
if oBrowse:colpos == oBrowse:colCount(); exit; endif
oBrowse:panright()
otherwise
* ignore
lNeedStabilize := .f.
exit
endcase
lNeedStabilize := .t.
exit
enddo //dummy loop
if lNeedStabilize
oBrowse:ForceStable()
RefreshHXB(oBrowse, nWinNum, XBid)
endif
wvw_nSetCurWindow(nOldWin)
return NIL
/**
20040704 notes:
0 <= nPage <= (nMax - nMin + 1)
nPage :: pagesize
nMin <= nPos <= (nMax - max(nPage-1, 0))
**/
static function RefreshVXB(oBrowse, nWinNum, XBid)
local nMin, nMax, nPage, nPos
local nRatio
//recalc the pos
if ordKeyCount() < 30000
nRatio := 1
nMin := 1
nMax := ordKeyCount()
nPage := oBrowse:RowCount() // ordKeyCount()
nPos := ordKeyNo()-oBrowse:RowPos+1 // ordKeyCount()
else
nRatio := ordKeyCount() / 10
do while nRatio > 30000
nRatio := nRatio / 10
enddo
nMin := 1
nMax := round( ordKeyCount() / nRatio, 0)
nPage := round(oBrowse:RowCount() / nRatio, 0) // ordKeyCount()
nPos := round( (ordKeyNo()-oBrowse:RowPos+1) / nRatio, 0 )// ordKeyCount()
endif
WVW_XBupdate(nWinNum, XBid, nPos, nPage, nMin, nMax)
return NIL
static function RefreshHXB(oBrowse, nWinNum, XBid)
local nMin, nMax, nPage, nPos
local nRatio
//recalc the pos
nMin := 1
nMax := oBrowse:ColCount
nPage := oBrowse:RightVisible - oBrowse:LeftVisible + 1
nPos := iif(oBrowse:RightVisible==oBrowse:ColCount, nMax, oBrowse:LeftVisible)
WVW_XBupdate(nWinNum, XBid, nPos, nPage, nMin, nMax)
return NIL
//-------------------------------------------------------------------//
STATIC FUNCTION DbSkipBlock( n, oTbr )
LOCAL nSkipped := 0
if n = 0
DBSkip( 0 )
elseif n > 0
do while nSkipped != n .and. TBNext( oTbr )
nSkipped++
enddo
else
do while nSkipped != n .and. TBPrev( oTbr )
nSkipped--
enddo
endif
RETURN nSkipped
//-------------------------------------------------------------------//
STATIC FUNCTION TBNext( oTbr )
LOCAL nSaveRecNum := recno()
LOCAL lMoved := .T.
if Eof()
lMoved := .F.
else
DBSkip( 1 )
if Eof()
lMoved := .F.
DBGoTo( nSaveRecNum )
endif
endif
RETURN lMoved
//-------------------------------------------------------------------//
STATIC FUNCTION TBPrev( oTbr )
LOCAL nSaveRecNum := Recno()
LOCAL lMoved := .T.
DBSkip( -1 )
if Bof()
DBGoTo( nSaveRecNum )
lMoved := .F.
endif
RETURN lMoved
//-------------------------------------------------------------------//
STATIC FUNCTION VouBlockField( i )
RETURN { || fieldget( i ) }
//-------------------------------------------------------------------//
// WVW_Paint() must be a FUNCTION in your application
// as it is called when Window gets WM_PAINT message.
//-------------------------------------------------------------------//
//20040330,was: FUNCTION WVW_Paint( hWnd, msg, wParam, lParam, nWinNum )
//20040408,was: FUNCTION WVW_Paint( nWinNum, nrow1, ncol1, nrow2, ncol2 )
FUNCTION WVW_Paint( nWinNum )
//ldebug("WVW_Paint:" + CRLF +;
// "hWnd = " + alltrim(str(hWnd)) + CRLF +;
// "nWinNum = " + alltrim(str(nWinNum)))
if len(s_amiscobjlist) >= nWinNum+1
aeval( s_amiscobjlist[nWinNum+1], {|e| eval( e, nWinNum )} )
endif
wvwm_paint( nWinNum )
RETURN 0
//-------------------------------------------------------------------//
// WVW_SetFocus() must be a FUNCTION in your application
// needs to process messages sent through WM_SETFOCUS message
// received by the window.
//-------------------------------------------------------------------//
/*
FUNCTION WVW_SetFocus( hWnd, nWinNum )
static nGotFocus := 0
if nWinNum==0
return NIL
endif
nGotFocus++
@ 0,0 say nGotFocus
if nGotFocus % 3 == 0
alert("Got focus " + tran(nGotFocus,"9999") + "th times")
endif
RETURN nil
*/
//-------------------------------------------------------------------//
// WVW_KillFocus() must be a FUNCTION in your application
// needs to process messages sent through WM_KILLFOCUS message
// received by the window.
//-------------------------------------------------------------------//
//FUNCTION WVW_KillFocus( hWnd )
//RETURN nil
function WVW_TIMER(nWinNum, hWnd, message, wParam, lParam)
* this function is called every certain interval, by GTWVW gtwndproc
WVW_SBsetText(0, 1, time())
return NIL
function CreateToolbar(nWinNum)
//for toolbar:
local nSysBitmap := 1 //0:none 1:small 2:large
local lDisplayText := .f. //text will be displayed as tooltip instead
local hWndTB
local ldefault
wvw_tbdestroy(nWinNum)
ldefault := lYesNo("would you like to use default toolbar setting?")
if !ldefault
nSysBitmap := alert("Select toolbar button size", {"Small", "Big"})
nSysBitmap := iif(nSysBitmap==0, 1, nSysBitmap)
lDisplayText:= alert("Display text in toolbar?", {"Yes", "No"})==1
endif
hWndTB := wvw_tbcreate(nWinNum, lDisplayText, NIL, nSysBitmap)
if hWndTB==0
lboxmessage("FAILED create toolbar")
return NIL
endif
/* system bitmaps use constants in commctrl.h */
/* using system view bitmaps */
wvw_tbAddButton(nWinNum, IDM_NETCONNECT, 9 /*VIEW_NETCONNECT*/, "Connect",2)
wvw_tbAddButton(nWinNum, IDM_NETDISCONNECT, 10 /*VIEW_NETDISCONNECT*/, "Dis",2)
wvw_tbAddButton(nWinNum) //separator
/* using system history bitmaps */
wvw_tbAddButton(nWinNum, IDM_BACK, 0 /*HIST_BACK*/, "Back",3)
wvw_tbAddButton(nWinNum, IDM_FORWARD, 1 /*HIST_FORWARD*/,"Forward",3)
wvw_tbAddButton(nWinNum) //separator
/* using custom bitmaps */
wvw_tbAddButton(nWinNum, IDM_DEMO_BROWSE, "def2.bmp","Browse",0)
wvw_tbAddButton(nWinNum, IDM_DEMO_GET, "vouch1.bmp", "Get",0)
wvw_tbAddButton(nWinNum) //separator
/* using system standard bitmaps */
wvw_tbAddButton(nWinNum, IDM_COPY, 1 /*STD_COPY*/, "Copy", 1)
wvw_tbAddButton(nWinNum, IDM_PASTE, 2 /*STD_PASTE*/,"Paste", 1)
wvw_tbAddButton(nWinNum) //separator
wvw_tbAddButton(nWinNum, IDM_HELP_INFO, 10 /*STD_PROPERTIES*/,"Info",1)
wvw_tbAddButton(nWinNum, IDM_HELP_HELP, 11 /*STD_HELP*/,"Help",1)
return NIL
function xDisableToolbar(nWinNum)
local i
for i := 0 to wvw_tbButtonCount(nWinNum)-1
WVW_TBEnableButton(nWinNum, i, .f.)
next
return NIL
function xEnableToolbar(nWinNum)
local i
for i := 0 to wvw_tbButtonCount(nWinNum)-1
WVW_TBEnableButton(nWinNum, i, .t.)
next
return NIL
//-------------------------------------------------------------------//
function ResetMiscObjects( nWinNum )
do while len(s_amiscobjlist) < nWinNum+1
aadd( s_amiscobjlist, {} )
enddo
s_amiscobjlist[ nWinNum+1 ] := {}
return .t.
function AddMiscObjects( nWinNum, bAction )
aadd( s_amiscobjlist[ nWinNum+1 ], bAction )
return .t.
// inkey() handler **************************************
/* this is for use with SETINKEYAFTERBLOCK() */
function nAfterInkey(nkey)
* check if nkey is:
* (1) menu command, or
* (2) mouse button action
local bAction
if nkey==WVW_DEFAULT_MENUKEYEVENT
* MenuKeyEvent
return nMenuChecker(WVW_GETLASTMENUEVENT())
//was: elseif ASCAN({K_LBUTTONDOWN, K_LBUTTONUP, K_MOUSEMOVE}, nKey) > 0
elseif ASCAN({K_LBUTTONDOWN, K_LBUTTONUP, K_MOUSEMOVE, K_MMLEFTDOWN,;
K_LDBLCLK}, nKey) > 0
* MouseEvent
return wvwm_nMouseChecker(nkey)
elseif (bAction := SETKEY(nKey)) != NIL
eval(bAction, PROCNAME(), PROCLINE(), READVAR())
return 0
endif
return nkey //nAfterInkey(nkey)
// MENU handler **************************************
function nMenuChecker(nMenuEvent)
local nkey := 0
xDisableMenus(0, 4)
//xDisableToolbar(0)
do case
case nMenuEvent==IDM_DEMO_GET
* lboxmessage("Demo GET")
Demo_Get()
case nMenuEvent==IDM_DEMO_BROWSE
* lboxmessage("Demo BROWSE")
Demo_Browse()
case nMenuEvent==IDM_DEMO_CONSOLE
* lboxmessage("Demo CONSOLE")
Demo_Console()
//case nMenuEvent==IDM_DEMO_COLOR
// * lboxmessage("Demo COLOR")
// Demo_Color()
case nMenuEvent==IDM_DEMO_EXIT
* lboxmessage("should EXIT!")
nkey := K_ESC
case nMenuEvent==IDM_WINDOW_SPACING_INCREASE
WVW_SetLineSpacing(NIL, WVW_SetLineSpacing()+2)
case nMenuEvent==IDM_WINDOW_SPACING_DECREASE
WVW_SetLineSpacing(NIL, WVW_SetLineSpacing()-2)
case nMenuEvent==IDM_WINDOW_SPACING_DEFAULT
WVW_SetDefLineSpacing( WVW_SetLineSpacing() )
case nMenuEvent==IDM_TOOLBAR_ENABLE
xEnableToolbar(0)
case nMenuEvent==IDM_TOOLBAR_DISABLE
xDisableToolbar(0)
case nMenuEvent==IDM_TOOLBAR_RESET
CreateToolbar(0)
case nMenuEvent==IDM_TOOLBAR_DELETE
WVW_TBdestroy(0)
case nMenuEvent==IDM_HELP_HELP
xHelp()
case nMenuEvent==IDM_HELP_INFO
xDebugInfo()
otherwise
lboxmessage("Sorry, unknown menu option")
endcase
//xEnableToolbar(0)
xEnableMenus(0, 4)
return nkey //nMenuChecker()
// MISCELLANEOUS *******************************************************
function lBoxMessage(cMsg, cTitle)
default cTitle to "Info"
win_messagebox(WVW_GETWINDOWHANDLE(), cMsg, cTitle, MB_OK + MB_ICONINFORMATION + MB_SYSTEMMODAL)
return .t.
function lYesNo(cMsg, cTitle)
default cTitle to "Konfirmasi"
return (win_messagebox(WVW_GETWINDOWHANDLE(), cMsg, cTitle, MB_YESNO + MB_ICONQUESTION + MB_SYSTEMMODAL) == IDYES)
function lDebug(cMsg)
return lBoxMessage(cMsg, "Debug")
function xDebugInfo()
static s_nfh := 0
MSETPOS(maxrow(), maxcol())
//SETMOUSE(.t., maxrow(), maxcol())
//WVW_SETMOUSEPOS(WVW_nNumWindows()-1, maxrow(), maxcol())
lboxmessage("GTWVW test/demo" + CRLF +;
"Budyanto Dj. <budyanto@centrin.net.id>" + CRLF+;
CRLF +;
"Topmost Window is Window #" + alltrim(str(wvw_nNumWindows()-1)) + CRLF +;
"Current Window is Window #" + alltrim(str(wvw_nSetCurWindow())) + CRLF +;
"MaxRow() = " + alltrim(str(maxrow())) + ", MaxCol() = " + alltrim(str(maxcol())) + CRLF +;
"Row() = " + alltrim(str(row())) + ", Col() = " + alltrim(str(col())) + CRLF +;
"WVW_RowOfs() = " + alltrim(str(wvw_nrowofs())) + ", WVW_ColOfs() = " + alltrim(str(wvw_ncolofs())) + CRLF +;
"Line Spacing = " + alltrim(str(WVW_SetLineSpacing())) + CRLF +;
"Default Line Spacing = " + alltrim(str(WVW_SetDefLineSpacing())) + CRLF +;
CRLF +;
"Font Face = '" + s_aFontInfo[1] + "'" + CRLF +;
"Font Height = " + alltrim(str(s_aFontInfo[2])) + CRLF +;
"Font Width = " + alltrim(str(s_aFontInfo[3])) + CRLF +;
CRLF+;
"BTW, mouse pointer now sits on maxrow(),maxcol(), doesn't it?")
return NIL
function xHelp()
lboxmessage("GTWVW test/demo" + CRLF +;
"Budyanto Dj. <budyanto@centrin.net.id>" + CRLF+;
CRLF +;
"Hotkeys (available in any window):" + CRLF+;
"F1 : Help" + CRLF+;
"F2 : Info on current window" + CRLF+;
"F3 : Open a new window of a pseudo-console typewriter" + CRLF+;
"F9 : Decrease Line Spacing" + CRLF+;
"F10: Increase Line Spacing" + CRLF+;
"F11: Set as Default Line Spacing" + CRLF+;
CRLF+;
"Test/demo available:" + CRLF+;
"GET: a simple GET/READ session"+CRLF+;
"BROWSE: a simple TBROWSE session"+CRLF+;
CRLF+;
"CONSOLE: a simple CONSOLE session" + CRLF+;
"You are interacting in a typewriter mode." + CRLF+;
"Press Ctrl+W to open a new, bigger window." + CRLF+;
"Press ESC to exit)"+CRLF+;
CRLF+;
"Maximum number of windows opened: " + alltrim(str(WVW_MAXWINDOWS)) + CRLF+;
CRLF+;
"Other info:"+CRLF+;
"Window repainting is checked at 100msec interval")
return NIL
function nCeiling(nNumber, nRoundDec)
* WARNING!!! tidak bekerja untuk nRoundDec > 0
* nRoundDec: 0=satuan, -1=puluhan, -2=ratusan, -3=ribuan
local i
local nTemp
default nRoundDec to 0 //SATUAN
if nRoundDec > 0
nRoundDec := 0
endif
* geser kanan
for i := nRoundDec to (0-1) //artinya kalau SATUAN gak usah
nNumber := nNumber / 10
next
nTemp := nNumber - INT(nNumber) //right of dec point
if nTemp>0
nNumber := INT(nNumber) + 1
else
nNumber := INT(nNumber)
endif
* geser kiri
for i := nRoundDec to (0-1) //artinya kalau SATUAN gak usah
nNumber := nNumber * 10
next
return nNumber
/* Modified from SetDefaultWindowSize() sample from Peter Rees */
/* Note: width < 0 appears better, but mouse caption will look bad */
FUNCTION SetDefaultWindowSize()
//x was: LOCAL Result:= SetMode(32,98), ScreenWidth
LOCAL Result:= .t., ScreenWidth
SetMode(25,80)
IF Result
screenWidth := Wvw_GetScreenWidth()
DO CASE
CASE screenWidth >= 1024
Result:= Wvw_SetFont(,'Terminal',20,10)
CASE screenWidth >= 800
IF HB_OSISWINNT()
Result:= Wvw_SetFont(,'Lucida Console',16,-8)
ELSE
Result:= Wvw_SetFont(,'System',16,-8)
ENDIF
OTHERWISE
Result:= Wvw_SetFont(,'Terminal',12,6)
ENDCASE
IF Result
Wvw_SetCodePage(,255) // #define OEM_CHARSET 255 - from wingdi.h
CLS
ENDIF
ENDIF
RETURN(Result)
//static function isWinNT()
//return lYesNo("I am preparing the 'best' font for you..." + CRLF+;
// "Sorry, is it Windows NT?")
//ERROR handler *******************************************************
procedure ErrorSys()
ErrorBlock( { |e| MyError( e ) } )
return
static procedure MyError( e )
local cTrace := "", i := 1 , cErr
cErr := "Runtime error" + CRLF + ;
CRLF + ;
"Gencode: " + LTrim( Str( e:GenCode ) ) + CRLF + ;
"Desc: " + e:Description + + CRLF + ;
"Sub-system: " + LTrim( Str( e:SubCode ) ) + CRLF + ;
CRLF + ;
"Call trace:" + CRLF + ;
CRLF
do while ! Empty( ProcName( ++i ) )
cErr += Trim( ProcName( i ) ) + "(" + Ltrim( Str( ProcLine( i ) ) ) + ")" + CRLF
enddo
//? cErr // Calls quit
ldebug(cErr)
hb_gtInfo( HB_GTI_INKEYFILTER, NIL )
quit
return
proc debugging(cMsg, nRow, nCol, nWinNum)
? cmsg + alltrim(str(nrow)) + ", " + alltrim(str(ncol))
return
proc pause
tone(660,2)
inkey(0)
return
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
harbour + gtwvw + hwgui
Bom dia Itamar.
Estou procurando respostas para como fazer harbour + gtwvw+ hwgui, estou lutando para executar o sistema com as duas juntas mas nao esta dando certo.
Já consegui compilar e gera o executavel perfeitamente sem erros, mas na hora de executar o programa ele não executa, vai para as estrelas e sai sem mostrar nada, nem tela.
Estou fazendo em HARBOUR 3.2 + GTwvw + HWgui 2.18, são as ultimas versões que baixei.
Detalhe, o executavel compilado com como esta acima só funciona se eu não chamar nenhum fonte em HWGUI, se chamar ele não executa.
DETALHES:
/////Meu HBMK.HBM
hwgui.hbc
gtwvw.hbc
-inc -lhbcomm -lhbwin -lhbct -lhbtip -lsqlite3 -lhbsqlit3
////Meu projeto.HBP
@hbmk.hbm
-oKAZA
-prgflag=/m /l /n
-compr=yes
TELAHWGUI.PRG
meusfontes.prg
KAZA.RC
////Gtwvw.hbc
{!allwin|!x86}skip=yes
incpaths=.
libpaths=lib/${hb_plat}/${hb_comp}
gt=${hb_name}
gui=yes
libs=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF}
////Hwgui.hbc
incpaths=include
libpaths=lib
{win}gt=gtgui
libs=hwgui procmisc hbxml
{win&!allmingw}libs=hbactivex
Necessito de ajuda porque preciso migrar o sistema todo para HWGUI, mas terei que fazer isto aos poucos devido ser muito extenso e o mesmo sofre muitas alterações diárias para melhorias de execução.
Grato pela colaboração.
:{
Estou procurando respostas para como fazer harbour + gtwvw+ hwgui, estou lutando para executar o sistema com as duas juntas mas nao esta dando certo.
Já consegui compilar e gera o executavel perfeitamente sem erros, mas na hora de executar o programa ele não executa, vai para as estrelas e sai sem mostrar nada, nem tela.
Estou fazendo em HARBOUR 3.2 + GTwvw + HWgui 2.18, são as ultimas versões que baixei.
Detalhe, o executavel compilado com como esta acima só funciona se eu não chamar nenhum fonte em HWGUI, se chamar ele não executa.
DETALHES:
/////Meu HBMK.HBM
hwgui.hbc
gtwvw.hbc
-inc -lhbcomm -lhbwin -lhbct -lhbtip -lsqlite3 -lhbsqlit3
////Meu projeto.HBP
@hbmk.hbm
-oKAZA
-prgflag=/m /l /n
-compr=yes
TELAHWGUI.PRG
meusfontes.prg
KAZA.RC
////Gtwvw.hbc
{!allwin|!x86}skip=yes
incpaths=.
libpaths=lib/${hb_plat}/${hb_comp}
gt=${hb_name}
gui=yes
libs=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF}
////Hwgui.hbc
incpaths=include
libpaths=lib
{win}gt=gtgui
libs=hwgui procmisc hbxml
{win&!allmingw}libs=hbactivex
Necessito de ajuda porque preciso migrar o sistema todo para HWGUI, mas terei que fazer isto aos poucos devido ser muito extenso e o mesmo sofre muitas alterações diárias para melhorias de execução.
Grato pela colaboração.
:{
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
harbour + gtwvw + hwgui
A Hwgui 2.18 está com muitos problemas.
Baixe a versão 2.17 no yahoo hwguibr que o Marcos Gambeta colocou lá.
Saudações,
Itamar M. Lins Jr.
Baixe a versão 2.17 no yahoo hwguibr que o Marcos Gambeta colocou lá.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
harbour + gtwvw + hwgui
Boa tarde.
Não consegui compilar a versao 2.17 com harbour 3.2, da erros de falta de arquivos etc..
Voltando ao assunto HWGui 2.18, eu consigo fazer funcionar se for somente HWGui com HARBOUR 3.2 rodando belezinha os exemplos dela, só não consegui rodar com GTWVW.
Um dos erros pode ser que não funcione com GTWVW?
Ou será que o programa deve ser a tela principal em HWGUI e o resto em GTWVW?, este teste nao fiz ainda, mas vou.
Grato por enquanto
:{
Não consegui compilar a versao 2.17 com harbour 3.2, da erros de falta de arquivos etc..
Voltando ao assunto HWGui 2.18, eu consigo fazer funcionar se for somente HWGui com HARBOUR 3.2 rodando belezinha os exemplos dela, só não consegui rodar com GTWVW.
Um dos erros pode ser que não funcione com GTWVW?
Ou será que o programa deve ser a tela principal em HWGUI e o resto em GTWVW?, este teste nao fiz ainda, mas vou.
Grato por enquanto
:{
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
harbour + gtwvw + hwgui
Olha, a GTWVW é uma lib sem suporte está abandonada.
Se for questão de rapidez no desenvolvimento melhor fazer tudo em HWGUI.
Não é essa a resposta que vc esperava provavelmente, mas não vale a pena perder tempo com a GTWVW.
A versão 2.18 está em beta com muita coisa por fazer... o Alexander voltou a contribuir e desfez muita coisa da versão 2.17 porém parou 2 meses e hoje dia 26/09/2013 fez algumas correções solicitadas por nós, já detectamos mais problemas e esperamos que ele corrija.
Saudações,
Itamar M. Lins Jr.
Se for questão de rapidez no desenvolvimento melhor fazer tudo em HWGUI.
Não é essa a resposta que vc esperava provavelmente, mas não vale a pena perder tempo com a GTWVW.
A versão 2.18 está em beta com muita coisa por fazer... o Alexander voltou a contribuir e desfez muita coisa da versão 2.17 porém parou 2 meses e hoje dia 26/09/2013 fez algumas correções solicitadas por nós, já detectamos mais problemas e esperamos que ele corrija.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
harbour + gtwvw + hwgui
Boa noite.
Voltei para Harbour 3.1 porque me deparei com um erro que não identifique nos erros modelo DOS, tela vermelha sem as escritas de identificação de erro.
Bom não tentei hwgui no harbour 3.1 ainda, vou tentar mais tarde se consigo compilar e fazer quem sabe funcionar HARBOUR + GTWVW + HWGUI.
Não tenho como abandonar a GTWVW de imediato em virtude de todo o sistema ja esta escrito com esta lib, será que com outra lib que molde a gtwvw para substituição funcione com a hwgui, o problema é que a hwgui é escrita totalmente diferente da gtwvw.
:xau :{
Voltei para Harbour 3.1 porque me deparei com um erro que não identifique nos erros modelo DOS, tela vermelha sem as escritas de identificação de erro.
Bom não tentei hwgui no harbour 3.1 ainda, vou tentar mais tarde se consigo compilar e fazer quem sabe funcionar HARBOUR + GTWVW + HWGUI.
Não tenho como abandonar a GTWVW de imediato em virtude de todo o sistema ja esta escrito com esta lib, será que com outra lib que molde a gtwvw para substituição funcione com a hwgui, o problema é que a hwgui é escrita totalmente diferente da gtwvw.
:xau :{
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
harbour + gtwvw + hwgui
Discordo do que foi apresentado, mas com ressalvas.
Ponto principal: o que usa da GTWVW?
Dependendo do que usa, pode passar direto pra GTWVT ou GTWVG.
O Harbour 3.2 está bem estável, e vai ser o mais compatível com LIBs, além de conter GTWVT/GTWVG mais atualizadas.
De repente pode brigar com um bug de compatibilidade no Harbour 3.0 que já foi resolvido no 3.2.
A curva de aprendizado.....
Tem que avaliar não só onde quer chegar, mas por onde pode passar.
Se for analisar friamente, a curva de aprendizado vai ser muito melhor em outra linguagem de programação.
Mas tudo depende de cada um.
Aproveitar fontes é bom, quando não dá pra passar um grande ERP pra outra linguagem de uma vez.
E se precisar adquirir conhecimentos de visual gráfico, o melhor é aproveitar fontes, e poder ir alterando conforme vai adquirindo conhecimento.
Não é o caso de algumas LIBs gráficas, que exigem que tudo seja alterado de uma vez.
Se seu ERP puder parar por meses, e ir fazendo versão em paralelo, aí a curva de aprendizado pode ser maior, mas só vai ver resultado no final, seja positivo ou negativo.
Se puder fazer aos poucos, pelo menos perde menos tempo com isso, e a decepção é menor.
Nesta semana liberei pra poder abrir várias janelas independentes do sistema.
Por incrível que pareça, preferiram sem isso.
Demorei meses pra deixar redondo, mas fui fazendo só de vez em quando, a passos longos, nada de tempo integral.
Já o menu estilo WIndows, eu mesmo não gostei e não liberei.
Ainda bem que está tudo como opcional, podendo ser ativado ou não.
Tem até recurso para Windows 8.1... onde o sistema vai falar em bom e claro português.
Mas é assim que funciona: tem coisas que interessam para o usuário final, e tem coisas que não.
O próprio Windows 8.1 é um exemplo, aonde a maioria não gostou do novo estilo metro, nem eu.
Poder liberar pequenas partes para clientes é bom pra avaliar a recepção do resultado, e poder mudar de rumo no meio do caminho.
Enquanto isso, todos os relatórios viraram Harupdf como principal elemento, com todos os recursos disponíveis, mas sem abandonar a opção de matricial.
Esta parte obrigatoriamente teria que ser feita, não depende de lib gráfica, então o sistema continuou indo em frente, sempre.
É isso que acho.
Obs.
Uma vez em muiltithread/multijanelas, como está agora, dá pra brincar com qualquer lib gráfica.
Falta paciência pra mexer nesses troços esquisitos que existem no Harbour.
Ponto principal: o que usa da GTWVW?
Dependendo do que usa, pode passar direto pra GTWVT ou GTWVG.
O Harbour 3.2 está bem estável, e vai ser o mais compatível com LIBs, além de conter GTWVT/GTWVG mais atualizadas.
De repente pode brigar com um bug de compatibilidade no Harbour 3.0 que já foi resolvido no 3.2.
A curva de aprendizado.....
Tem que avaliar não só onde quer chegar, mas por onde pode passar.
Se for analisar friamente, a curva de aprendizado vai ser muito melhor em outra linguagem de programação.
Mas tudo depende de cada um.
Aproveitar fontes é bom, quando não dá pra passar um grande ERP pra outra linguagem de uma vez.
E se precisar adquirir conhecimentos de visual gráfico, o melhor é aproveitar fontes, e poder ir alterando conforme vai adquirindo conhecimento.
Não é o caso de algumas LIBs gráficas, que exigem que tudo seja alterado de uma vez.
Se seu ERP puder parar por meses, e ir fazendo versão em paralelo, aí a curva de aprendizado pode ser maior, mas só vai ver resultado no final, seja positivo ou negativo.
Se puder fazer aos poucos, pelo menos perde menos tempo com isso, e a decepção é menor.
Nesta semana liberei pra poder abrir várias janelas independentes do sistema.
Por incrível que pareça, preferiram sem isso.
Demorei meses pra deixar redondo, mas fui fazendo só de vez em quando, a passos longos, nada de tempo integral.
Já o menu estilo WIndows, eu mesmo não gostei e não liberei.
Ainda bem que está tudo como opcional, podendo ser ativado ou não.
Tem até recurso para Windows 8.1... onde o sistema vai falar em bom e claro português.
Mas é assim que funciona: tem coisas que interessam para o usuário final, e tem coisas que não.
O próprio Windows 8.1 é um exemplo, aonde a maioria não gostou do novo estilo metro, nem eu.
Poder liberar pequenas partes para clientes é bom pra avaliar a recepção do resultado, e poder mudar de rumo no meio do caminho.
Enquanto isso, todos os relatórios viraram Harupdf como principal elemento, com todos os recursos disponíveis, mas sem abandonar a opção de matricial.
Esta parte obrigatoriamente teria que ser feita, não depende de lib gráfica, então o sistema continuou indo em frente, sempre.
É isso que acho.
Obs.
Uma vez em muiltithread/multijanelas, como está agora, dá pra brincar com qualquer lib gráfica.
Falta paciência pra mexer nesses troços esquisitos que existem no Harbour.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
leandrolinauer
- Usuário Nível 3

- Mensagens: 413
- Registrado em: 16 Out 2006 10:59
- Localização: Paranaíba-MS
harbour + gtwvw + hwgui
Boa tarde.
Obrigado pelos muitos esclarecimentos, mas quando me refiro em muitas alterações, são alterações gerenciais, são melhorias gerencias e não de telas, estas que estão me consumindo muito tempo, tais como:
Relatórios novos, bloqueios novos, alteração de algum cadastro ou até complementação de movimento, e tbem a parte fiscal que tem muito a ser feito.
Aí como estou trabalhando com isto, todo dia o dia todo, fica dificil parar o sistema para poder escrever em outra linguagem, por isto eu procuro algo que eu possa mesclar podendo deixar o sistema rodando e fazendo de tempo em tempo um bloco novo, exemplo:
Sistema (GTWVW)
CADASTRO DE CLIENTES (GTWVW)
........VARIOS OUTROS (GTWVW)
CADASTRO DE CIDADES (GTWVW) (agora vou trabalhar neste na folga) fazendo abaixo:
SISTEMA(GTWVW)
CADASTRO DE CLIENTES(GTWVW)
.....VARIOS OUTROS (GTWVW)
CADASTRO DE CIDADES (HWGUI)
e assim até terminar, mas rodando nos clientes sem que de falhas ou erros, apenas vão ver que em HWGUI com tela diferente, até alterar tudo ficando.
SISTEMA(HWGUI)
CADASTRO DE CLIENTES(HWGUI)
......VARIOS OUTROS (HWGUI)
CADASTRO DE CIDADES (HWGUI)
Por isto solicite se tem outra LIB que é igual ao GTWVW, exemplo a GTWVG e que combine com HWGUI para rodar no mesmo fonte compilado.
Grato pela ajuda.

Obrigado pelos muitos esclarecimentos, mas quando me refiro em muitas alterações, são alterações gerenciais, são melhorias gerencias e não de telas, estas que estão me consumindo muito tempo, tais como:
Relatórios novos, bloqueios novos, alteração de algum cadastro ou até complementação de movimento, e tbem a parte fiscal que tem muito a ser feito.
Aí como estou trabalhando com isto, todo dia o dia todo, fica dificil parar o sistema para poder escrever em outra linguagem, por isto eu procuro algo que eu possa mesclar podendo deixar o sistema rodando e fazendo de tempo em tempo um bloco novo, exemplo:
Sistema (GTWVW)
CADASTRO DE CLIENTES (GTWVW)
........VARIOS OUTROS (GTWVW)
CADASTRO DE CIDADES (GTWVW) (agora vou trabalhar neste na folga) fazendo abaixo:
SISTEMA(GTWVW)
CADASTRO DE CLIENTES(GTWVW)
.....VARIOS OUTROS (GTWVW)
CADASTRO DE CIDADES (HWGUI)
e assim até terminar, mas rodando nos clientes sem que de falhas ou erros, apenas vão ver que em HWGUI com tela diferente, até alterar tudo ficando.
SISTEMA(HWGUI)
CADASTRO DE CLIENTES(HWGUI)
......VARIOS OUTROS (HWGUI)
CADASTRO DE CIDADES (HWGUI)
Por isto solicite se tem outra LIB que é igual ao GTWVW, exemplo a GTWVG e que combine com HWGUI para rodar no mesmo fonte compilado.
Grato pela ajuda.
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
harbour + gtwvw + hwgui
Um exemplo parecido com o exemplo apresentado pela fwvw, sem nada complicado no fonte:
arquivo hbp
Tudo bem, a mudança é simples, mas nada que complique fontes.
É um visual simples, mas totalmente compatível com outras LIBs gráficas.
Comentário:
A mensagem estilo windows usa a própria api do windows, através da hbwin do Harbour
E as cores, são somente mudança de cor.
Código: Selecionar todos
PROCEDURE Main
LOCAL dDate := Date()
LOCAL cName := PadR( "Pritpal Bedi", 35 )
LOCAL cAdd1 := PadR( "60, New Professor Colony", 35 )
LOCAL cAdd2 := PadR( "Ludhiana, INDIA", 35 )
LOCAL cAdd3 := PadR( "http://hbide.vouch.info", 35 )
LOCAL nSlry := 20000
LOCAL nColGet := 8
LOCAL GetList := {}
SetColor( "N/W" )
CLS
SetColor( "N/W,N/GR*,,,N/W*" )
@ 6, nColGet SAY "< Date >"
@ 9, nColGet SAY "<" + PadC( "Name", 33 ) + ">"
@ 12, nColGet SAY "<" + PadC( "Address", 33 ) + ">"
@ 16, 61 SAY "< Salary >"
@ 7, nColGet GET dDate VALID DataOk( dDate )
@ 10, nColGet GET cName
@ 13, nColGet GET cAdd1
@ 15, nColGet GET cAdd2
@ 17, nColGet GET cAdd3
@ 17, 61 GET nSlry PICTURE "@Z 9999999.99"
READ
RETURN
FUNCTION DataOk( dDate )
IF Year( dDate ) != 2013
wapi_MessageBox( wapi_GetActiveWindow(), "Data invalida", "Atencao" )
RETURN .f.
ENDIF
RETURN .t.
Código: Selecionar todos
test.prg
gtwvg.hbc
hbwin.hbc
É um visual simples, mas totalmente compatível com outras LIBs gráficas.
Comentário:
A mensagem estilo windows usa a própria api do windows, através da hbwin do Harbour
E as cores, são somente mudança de cor.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
harbour + gtwvw + hwgui
Amigos, segue em anexo um pequeno exemplo de GtWvg + HwGui.
Leandro, qualquer dúvida posta aqui no fórum que tentamos lhe ajudar.
Abraços,
Leandro, qualquer dúvida posta aqui no fórum que tentamos lhe ajudar.
Abraços,
- Anexos
-
harbour_gtwvg_hwgui.zip- (1.07 MiB) Baixado 589 vezes
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
harbour + gtwvw + hwgui
Tava repassando o post. Já é usada WVW e HWGUI, a dúvida é só sobre ter isso no Harbour ou algo compatível.
wvw tem sim, mas wvw fica em extras, o que significa sem continuidade ou com ajustes de compatibilidade limitados. Se tiver problemas, acho que gtwvg é a mais próxima.
E hwgui é baixar a parte e compilar.
Obs. Isso falando de harbour 3.2, que é a versão base atual pra praticamente tudo.
Obs2. Lembro de ter lido sobre a parte gráfica do Harbour+Windows que serviu de base pra muita coisa, ter começado por alguém que morreu. Só não lembro qual das LIBs foi.
wvw tem sim, mas wvw fica em extras, o que significa sem continuidade ou com ajustes de compatibilidade limitados. Se tiver problemas, acho que gtwvg é a mais próxima.
E hwgui é baixar a parte e compilar.
Obs. Isso falando de harbour 3.2, que é a versão base atual pra praticamente tudo.
Obs2. Lembro de ter lido sobre a parte gráfica do Harbour+Windows que serviu de base pra muita coisa, ter começado por alguém que morreu. Só não lembro qual das LIBs foi.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/