Files
harbour-core/harbour/examples/gtwvw/wvwedit.c
Viktor Szakats 45a114e471 2010-06-03 18:17 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* tests/testsha1.prg
  * tests/longdev.prg
  * tests/clsccast.prg
  * tests/cmphello.prg
  * tests/clsicast.prg
  * tests/testop.prg
  * tests/clsscast.prg
  * tests/objarr.prg
  * tests/rddtest/rddmktst.prg
  * tests/rddtest/adscl52.prg
  * tests/rddtest/adscl53.prg
  * tests/rddtest/ntxcl52.prg
  * tests/rddtest/ntxcl53.prg
  * tests/rddtest/cdxcl52.prg
  * tests/rddtest/rddtst.prg
  * tests/rddtest/cdxcl53.prg
  * tests/transtst.prg
  * tests/output.prg
  * tests/ac_test2.prg
  * tests/clsscope.prg
  * tests/dosshell.prg
  * tests/sbartest.prg
  * tests/speedold.prg
  * tests/sdf_test.prg
  * tests/wcecon.prg
  * tests/debugtst.prg
  * tests/testdyn.c
  * tests/multiarg.prg
  * tests/fornext.prg
  * tests/hbinline.prg
  * tests/foreach2.prg
  * tests/objasign.prg
  * tests/scroll.prg
  * tests/inherit.prg
  * tests/rto_get.prg
  * tests/boxtst2.prg
  * tests/inkeytst.prg
  * tests/overload.prg
  * tests/cpinfo.prg
  * tests/gtwin.prg
  * tests/mt/mttest08.prg
  * tests/mt/mttest09.prg
  * tests/mt/mttest01.prg
  * tests/mt/mttest10.prg
  * tests/mt/mttest02.prg
  * tests/mt/mttest11.prg
  * tests/mt/mttest03.prg
  * tests/mt/mttest12.prg
  * tests/mt/mttest04.prg
  * tests/mt/mttest05.prg
  * tests/mt/mttest06.prg
  * tests/mt/mttest07.prg
  * tests/speedtst.prg
  * tests/testsha2.prg
  * tests/hsxtest.prg
  * tests/arrayidx.prg
  * tests/clsnv.prg
  * tests/rto_tb.prg
  * tests/gtchars.prg
  * tests/disptest.prg
  * tests/funcarr.prg
  * tests/testhtml.prg
  * tests/readhrb.prg
  * tests/tstcolor.prg
  * tests/gtxfnt.prg
  * tests/devtest.prg
  * tests/aliaslck.prg
  * tests/stripem.prg
  * tests/dynobj.prg
  * tests/tb1.prg
  * tests/round.prg
  * tests/longstr.prg
  * tests/testdyn.prg
  * tests/testdyn1.prg
  * tests/delimtst.prg
  * tests/tstdspac.prg
  * tests/version.prg
  * tests/setkeys.prg
  * tests/gtcolors.prg
  * tests/destruct.prg
  * tests/seconds.prg
  * tests/gtkeys.prg
  * tests/usrrdd/exarr.prg
  * doc/en/diskspac.txt
  * doc/en/string.txt
  * doc/en/rdd.txt
  * doc/en/hashes.txt
  * doc/en/hb_apigt.txt
  * doc/en/rddord.txt
  * doc/en/hb_api.txt
  * doc/en/hb_date.txt
  * doc/en/math.txt
  * doc/en/hb_vm.txt
  * doc/en/treport.txt
  * doc/en/terminal.txt
  * doc/en/hb_apiln.txt
  * doc/en/dir.txt
  * doc/en/command.txt
  * doc/en/rddmisc.txt
  * doc/en/errsys.txt
  * doc/en/nation.txt
  * doc/en/var.txt
  * doc/en/dbstrux.txt
  * doc/en/datetime.txt
  * doc/en/memo.txt
  * doc/en/tgetlist.txt
  * doc/en/tlabel.txt
  * doc/en/1stread.txt
  * doc/en/hb_set.txt
  * doc/en/hb_compa.txt
  * doc/en/hb_apier.txt
  * doc/en/hbinet.txt
  * doc/en/hb_macro.txt
  * doc/en/array.txt
  * doc/en/hb_apiit.txt
  * doc/en/rdddb.txt
  * doc/en/dbsdf.txt
  * doc/en/hvm.txt
  * doc/en/input.txt
  * doc/en/dbdelim.txt
  * doc/en/browse.txt
  * doc/en/menu.txt
  * doc/en/hb_apird.txt
  * doc/en/hb_apifs.txt
  * doc/en/file.txt
  * doc/en/lang.txt
  * doc/en/objfunc.txt
  * doc/en/eval.txt
  * doc/en/binnum.txt
  * doc/en/tclass.txt
  * doc/en/misc.txt
  * doc/en/set.txt
  * doc/en/readme.txt
  * doc/man/harbour.1
  * doc/man/hbmk2.1
  * doc/man/hbpp.1
  * doc/man/hbtest.1
  * doc/man/hbrun.1
  * examples/hbextern/hbextern.prg
  * examples/pp/pp.c
  * examples/pp/hbpragma.c
  * examples/pp/hbppcore.c
  * examples/pp/hbppcomp.c
  * examples/pp/hbpptbl.c
  * examples/pp/hbppdef.h
  * examples/superlib/hbsuper.prg
  * examples/hbsqlit2/hbsqlit2.ch
  * examples/misc/mankala.prg
  * examples/misc/guess.prg
  * examples/rddado/adordd.prg
  * examples/rddado/adordd.ch
  * examples/hbapollo/apollo.ch
  * examples/hbapollo/apollo.c
  * examples/hbapollo/apollo1.prg
  * examples/hbdoc2/gentpl.prg
  * examples/hbdoc2/gentxt.prg
  * examples/hbdoc2/tmplates.prg
  * examples/hbdoc2/genxml.prg
  * examples/hbdoc2/genhtml.prg
  * examples/hbdoc2/hbdoc2.prg
  * examples/hbdoc2/hbdoc2.ch
  * examples/guestbk/guestbk.prg
  * examples/httpsrv/uhttpd.ini
  * examples/httpsrv/uhttpd.prg
  * examples/httpsrv/cookie.prg
  * examples/httpsrv/cgifunc.prg
  * examples/httpsrv/session.prg
  * examples/terminal/trm_cli.prg
  * examples/terminal/terminal.prg
  * examples/terminal/trm_srv.prg
  * examples/terminal/trm_app.prg
  * examples/hbbtree/hb_btree.h
  * examples/hbbtree/hb_btree.ch
  * examples/hbbtree/hb_btree.c
  * examples/hbbtree/tbtree.prg
  * examples/hscript/hscript.prg
  * examples/hscript/dir.hs
  * examples/hscript/multiply.hs
  * examples/hscript/ugly.hs
  * examples/hscript/hello.hs
  * examples/gtwvw/hbole.h
  * examples/gtwvw/wvwdraw.c
  * examples/gtwvw/wvwmenu.c
  * examples/gtwvw/gtwvw.c
  * examples/gtwvw/wvwstbar.c
  * examples/gtwvw/wvwcheck.c
  * examples/gtwvw/wvwfuncs.c
  * examples/gtwvw/wvwpush.c
  * examples/gtwvw/wvwedit.c
  * examples/gtwvw/wvwtbar.c
  * examples/gtwvw/hbgtwvw.h
    * Deleted 'www.' from harbour-project.org website name.
      (www.harbour-project.org -> harbour-project.org)
2010-06-03 16:23:36 +00:00

930 lines
25 KiB
C

/*
* $Id$
*/
/*
* Video subsystem for Win32 using GUI windows instead of Console
* with multiple windows support
* Copyright 2004 Budyanto Dj. <budyanto@centrin.net.id>
* gtwvw edit functions
* GTWVW is initially created based on:
*
* =Id: gtwvt.c,v 1.60 2004/01/26 08:14:07 vouchcac Exp =
*
* Harbour Project source code:
* Video subsystem for Win32 using GUI windows instead of Console
* Copyright 2003 Peter Rees <peter@rees.co.nz>
* Rees Software & Systems Ltd
* based on
* Bcc ConIO Video subsystem by
* Copyright 2002 Marek Paliwoda <paliwoda@inteia.pl>
* Copyright 2002 Przemys³aw Czerpak <druzus@polbox.com>
* Video subsystem for Win32 compilers
* Copyright 1999-2000 Paul Tucker <ptucker@sympatico.ca>
* Copyright 2002 Przemys³aw Czerpak <druzus@polbox.com>
*
* The following parts are Copyright of the individual authors.
* www - http://harbour-project.org
*
*
* Copyright 1999 David G. Holm <dholm@jsd-llc.com>
* hb_gt_wvw_Tone()
*
* See doc/license.txt for licensing terms.
*
* www - http://harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option )
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/ ).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#include "hbgtwvw.h"
/*WVW_EBcreate( [nWinNum], nTop, nLeft, nBottom, nRight, cText, bBlock, ;
* lMultiline, nMoreStyle, nMaxChar, nReserved, aOffset)
*create editbox for window nWinNum
*nTop: row of top/left corner (in character unit)
*nLeft: col of top/left corner (in character unit)
*nBottom: row of bottom/right corner (in character unit)
*nRight: col of bottom/right corner (in character unit)
*cText: initial text to display, default = ""
* WARNING!! must be of "C" typed!
*bBlock: codeblock to execute on these events:
* event=EN_SETFOCUS(...): editbox got focus
* event=EN_KILLFOCUS(...): editbox lose focus
* This codeblock will be evaluated with these parameters:
* nWinNum: window number
* nEBid : editbox id
* nType : event type (EN_SETFOCUS/EN_KILLFOCUS supported)
*
*
*lMultiline: .f. :: single line editbox (default)
* .t. :: multi line editbox
* mapped internally into two types of editbox:
* WVW_EB_SINGLELINE (1): single line editbox
* WVW_EB_MULTILINE (2): multi line editbox
* default is WVW_EB_SINGLELINE (1)
*
*nMoreStyle: more style that will be added to the predefined style
* some examples: ES_PASSWORD, ES_READONLY
*
*nMaxChar: (FUTURE FEATURE) maximum number of chars allowed
*
*nReserved: reserved for future use
*
*aOffset: array {y1,x1,y2,x2} of offsets to corner pixels, to adjust
* dimension of editbox.
* defaults: {-2,-2,+2,+2}
*
*returns control id of newly created editbox of windows nWinNum
*returns 0 if failed
*
*example:
*/
HB_FUNC( WVW_EBCREATE)
{
HANDLE hInstance = NULL;
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
HWND hWndParent = pWindowData->hWnd;
HWND hWndEB;
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
UINT uiEBid;
USHORT usTop = ( USHORT )hb_parni( 2 ),
usLeft = ( USHORT )hb_parni( 3 ),
usBottom = ( USHORT )hb_parni( 4 ),
usRight = ( USHORT )hb_parni( 5 );
LPTSTR lpszText = (LPTSTR) hb_parcx( 6 );
BOOL bMultiline = (ISLOG(8) ? hb_parl(8) : FALSE);
BYTE bEBType = (BYTE) (bMultiline ? WVW_EB_MULTILINE : WVW_EB_SINGLELINE);
DWORD dwMoreStyle = (DWORD) (ISNUM(9) ? hb_parnl(9) : 0);
USHORT usMaxChar = (USHORT) (ISNUM(10) && hb_parni(10)>0 ? hb_parni(10) : 0);
DWORD dwStyle;
WVW_DATA * pData= hb_getWvwData( ) ;
if (pWindowData->hEBfont==NULL)
{
pWindowData->hEBfont = CreateFontIndirect( &pData->s_lfEB );
if (pWindowData->hEBfont==NULL)
{
hb_retnl(0);
return;
}
}
iOffTop = !ISNIL( 12 ) ? hb_parvni( 12,1 ) : 0;
iOffLeft = !ISNIL( 12 ) ? hb_parvni( 12,2 ) : 0;
iOffBottom = !ISNIL( 12 ) ? hb_parvni( 12,3 ) : 0;
iOffRight = !ISNIL( 12 ) ? hb_parvni( 12,4 ) : 0;
if (hb_gt_wvw_GetMainCoordMode())
{
hb_wvw_HBFUNCPrologue(usWinNum, &usTop, &usLeft, &usBottom, &usRight);
}
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOffTop ;
iLeft = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + iOffBottom;
iRight = xy.x - 1 + iOffRight;
uiEBid = LastControlId(usWinNum, WVW_CONTROL_EDITBOX);
if (uiEBid==0)
{
uiEBid = WVW_ID_BASE_EDITBOX;
}
else
{
uiEBid++;
}
dwStyle = WS_BORDER | WS_GROUP | WS_TABSTOP | dwMoreStyle;
if ((bEBType & WVW_EB_MULTILINE) == WVW_EB_MULTILINE)
{
dwStyle |= ES_AUTOVSCROLL | ES_MULTILINE |
ES_WANTRETURN | WS_BORDER | WS_VSCROLL;
}
else
{
dwStyle |= ES_AUTOHSCROLL;
}
if ( pWindowData->CodePage == OEM_CHARSET )
{
dwStyle |= ES_OEMCONVERT;
}
hb_winmainArgGet( &hInstance, NULL, NULL );
hWndEB = CreateWindowEx(
0L,
"EDIT",
(LPSTR) NULL,
WS_CHILD | WS_VISIBLE | (DWORD) dwStyle,
iLeft,
iTop,
iRight-iLeft+1,
iBottom-iTop+1,
hWndParent,
(HMENU) uiEBid,
(HINSTANCE) hInstance,
(LPVOID) NULL
);
if(hWndEB)
{
RECT rXB = { 0 }, rOffXB = { 0 };
WNDPROC OldProc;
//USHORT i;
BOOL bFromOEM = ( pWindowData->CodePage == OEM_CHARSET );
if (bFromOEM)
{
ULONG ulLen = (ULONG) strlen(lpszText);
LPTSTR lpszTextANSI = (LPTSTR) hb_xgrab(ulLen+1);
OemToChar( lpszText, lpszTextANSI );
lpszText = lpszTextANSI;
}
SendMessage(
(HWND) hWndEB,
WM_SETTEXT,
0,
(LPARAM) lpszText
);
if (bFromOEM)
{
hb_xfree(lpszText);
}
if (usMaxChar>0)
{
SendMessage(
(HWND) hWndEB,
EM_LIMITTEXT,
(WPARAM) usMaxChar,
(LPARAM) 0
);
}
rXB.top = usTop; rXB.left= usLeft;
rXB.bottom=usBottom; rXB.right =usRight;
rOffXB.top = iOffTop; rOffXB.left= iOffLeft;
rOffXB.bottom=iOffBottom; rOffXB.right =iOffRight;
AddControlHandle(usWinNum, WVW_CONTROL_EDITBOX, hWndEB, uiEBid, (PHB_ITEM) hb_param( 7, HB_IT_BLOCK ), rXB, rOffXB, (byte) bEBType);
OldProc = (WNDPROC) SetWindowLong (hWndEB,
GWL_WNDPROC, (LONG) hb_gt_wvwEBProc) ;
StoreControlProc(usWinNum, WVW_CONTROL_EDITBOX, hWndEB, OldProc);
SendMessage( hWndEB, WM_SETFONT, (WPARAM) pWindowData->hEBfont, (LPARAM) TRUE);
hb_retnl( (LONG) uiEBid );
}
else
{
hb_retnl( (LONG) 0 );
}
}
/*WVW_EBdestroy( [nWinNum], nEBid )
*destroy editbox nEBid for window nWinNum
*/
HB_FUNC( WVW_EBDESTROY)
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
UINT uiEBid = (UINT) ( ISNIL( 2 ) ? 0 : hb_parni( 2 ) );
CONTROL_DATA * pcd = pWindowData->pcdCtrlList;
CONTROL_DATA * pcdPrev = (CONTROL_DATA *) NULL;
while (pcd)
{
if (pcd->byCtrlClass == WVW_CONTROL_EDITBOX && pcd->uiCtrlid == uiEBid)
{
break;
}
pcdPrev = pcd;
pcd = pcd->pNext;
}
if (pcd==NULL) { return; }
DestroyWindow (pcd->hWndCtrl) ;
if (pcdPrev==NULL)
{
pWindowData->pcdCtrlList = pcd->pNext;
}
else
{
pcdPrev->pNext = pcd->pNext;
}
if (pcd->phiCodeBlock)
{
hb_itemRelease( pcd->phiCodeBlock );
}
hb_xfree( pcd );
}
/*WVW_EBsetFocus( [nWinNum], nEditId )
*set the focus to editbox nEditId in window nWinNum
*/
HB_FUNC( WVW_EBSETFOCUS )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiCtrlId = ISNIL(2) ? 0 : hb_parni(2);
byte bStyle;
HWND hWndEB = FindControlHandle(usWinNum, WVW_CONTROL_EDITBOX, uiCtrlId, &bStyle);
if (hWndEB)
{
hb_retl( SetFocus(hWndEB) != NULL );
}
else
{
hb_retl(FALSE);
}
}
/*WVW_EBisFocused( [nWinNum], nEditId )
*returns .t. if the focus is on editbox nEditId in window nWinNum
*/
HB_FUNC( WVW_EBISFOCUSED )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiCtrlId = ISNIL(2) ? 0 : hb_parni(2);
byte bStyle;
HWND hWndEB = FindControlHandle(usWinNum, WVW_CONTROL_EDITBOX, uiCtrlId, &bStyle);
hb_retl((HWND) GetFocus() == hWndEB);
}
/*WVW_EBenable( [nWinNum], nEditId, [lEnable] )
*enable/disable editbox nEditId on window nWinNum
*(lEnable defaults to .t., ie. enabling the editbox)
*return previous state of the editbox (TRUE:enabled FALSE:disabled)
*(if nEditId is invalid, this function returns FALSE too)
*/
HB_FUNC( WVW_EBENABLE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiCtrlId = ISNIL(2) ? 0 : hb_parni(2);
BOOL bEnable = ISNIL(3) ? TRUE : hb_parl(3);
byte bStyle;
HWND hWndEB = FindControlHandle(usWinNum, WVW_CONTROL_EDITBOX, uiCtrlId, &bStyle);
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
if (hWndEB)
{
hb_retl( EnableWindow(hWndEB, bEnable)==0 );
if (!bEnable)
{
SetFocus( pWindowData->hWnd );
}
}
else
{
hb_retl(FALSE);
}
}
/*WVW_EBeditable( [nWinNum], nEditId, [lEditable] )
*get/set editability attribute from editbox nEditId on window nWinNum
*(if lEditable is not specified, no change to editability)
*return previous state of the editbox (TRUE:editable FALSE:not editable)
*(if nEditId is invalid, this function returns FALSE too)
*/
HB_FUNC( WVW_EBEDITABLE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiCtrlId = ISNIL(2) ? 0 : hb_parni(2);
BOOL bEditable = ISNIL(3) ? TRUE : hb_parl(3);
byte bStyle;
HWND hWndEB = FindControlHandle(usWinNum, WVW_CONTROL_EDITBOX, uiCtrlId, &bStyle);
if (hWndEB)
{
DWORD dwStyle = (DWORD) GetWindowLong( hWndEB, GWL_STYLE );
hb_retl( !((dwStyle & ES_READONLY)==ES_READONLY) );
if (!ISNIL(3))
{
SendMessage(
(HWND) hWndEB,
EM_SETREADONLY,
(WPARAM) !bEditable,
(LPARAM) 0
);
}
}
else
{
hb_retl(FALSE);
}
}
/*WVW_EBsetcodeblock( [nWinNum], nEBid, bBlock )
*assign (new) codeblock bBlock to editbox nEBid for window nWinNum
*
* return .t. if successful
*/
HB_FUNC( WVW_EBSETCODEBLOCK )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiEBid = (UINT) ( ISNIL( 2 ) ? 0 : hb_parni( 2 ) );
CONTROL_DATA * pcd = GetControlData(usWinNum, WVW_CONTROL_EDITBOX, NULL, uiEBid);
WVW_DATA * pData= hb_getWvwData( ) ;
PHB_ITEM phiCodeBlock = hb_param( 3, HB_IT_BLOCK );
BOOL bOldSetting = pData->s_bRecurseCBlock;
if (!phiCodeBlock || pcd==NULL || pcd->bBusy)
{
hb_retl( FALSE );
return;
}
pData->s_bRecurseCBlock = FALSE;
pcd->bBusy = TRUE;
if (pcd->phiCodeBlock)
{
hb_itemRelease( pcd->phiCodeBlock );
}
pcd->phiCodeBlock = hb_itemNew( phiCodeBlock );
pcd->bBusy = FALSE;
pData->s_bRecurseCBlock = bOldSetting;
hb_retl( TRUE );
}
/*WVW_EBSetFont([nWinNum], cFontFace, nHeight, nWidth, nWeight, nQUality,;
* lItalic, lUnderline, lStrikeout
*
*this will initialize font for ALL editboxes in window nWinNum
*(including ones created later on)
*
*TODO: ? should nHeight be ignored, and always forced to use standard char height?
*/
HB_FUNC( WVW_EBSETFONT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
BOOL retval = TRUE;
WVW_DATA * pData= hb_getWvwData( ) ;
pData->s_lfEB.lfHeight = ISNIL( 3 ) ? pWindowData->fontHeight - 2 : hb_parnl( 3 );
pData->s_lfEB.lfWidth = ISNIL( 4 ) ? pData->s_lfEB.lfWidth : hb_parni( 4 );
pData->s_lfEB.lfEscapement = 0;
pData->s_lfEB.lfOrientation = 0;
pData->s_lfEB.lfWeight = ISNIL( 5 ) ? pData->s_lfEB.lfWeight : hb_parni( 5 );
pData->s_lfEB.lfItalic = ISNIL( 7 ) ? pData->s_lfEB.lfItalic : ( BYTE )hb_parl( 7 );
pData->s_lfEB.lfUnderline = ISNIL( 8 ) ? pData->s_lfEB.lfUnderline : ( BYTE )hb_parl( 8 );
pData->s_lfEB.lfStrikeOut = ISNIL( 9 ) ? pData->s_lfEB.lfStrikeOut : ( BYTE )hb_parl( 9 );
pData->s_lfEB.lfCharSet = DEFAULT_CHARSET;
pData->s_lfEB.lfQuality = ISNIL( 6 ) ? pData->s_lfEB.lfQuality : ( BYTE )hb_parni( 6 );
pData->s_lfEB.lfPitchAndFamily = FF_DONTCARE;
if ( ISCHAR( 2 ) )
{
strcpy( pData->s_lfEB.lfFaceName, hb_parcx( 2 ) );
}
if (pWindowData->hEBfont)
{
HFONT hOldFont = pWindowData->hEBfont;
HFONT hFont = CreateFontIndirect( &pData->s_lfEB );
if (hFont)
{
CONTROL_DATA * pcd = pWindowData->pcdCtrlList;
while (pcd)
{
if ((pcd->byCtrlClass == WVW_CONTROL_EDITBOX) &&
((HFONT) SendMessage( pcd->hWndCtrl, WM_GETFONT, (WPARAM) 0, (LPARAM) 0) == hOldFont)
)
{
SendMessage( pcd->hWndCtrl, WM_SETFONT, (WPARAM) hFont, (LPARAM) TRUE);
}
pcd = pcd->pNext;
}
pWindowData->hEBfont = hFont;
DeleteObject( (HFONT) hOldFont );
}
else
{
retval = FALSE;
}
}
hb_retl( retval );
}
/*WVW_EBIsMultiline( [nWinNum], nEBid )
*returns .t. if editbox nEBid in window nWinNum is multiline
*otherwise .f.
*Also returns .f. if nEBid not valid
*/
HB_FUNC( WVW_EBISMULTILINE )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiEBid = hb_parni(2);
CONTROL_DATA * pcd = GetControlData(usWinNum, WVW_CONTROL_EDITBOX, NULL, uiEBid);
BOOL bMultiline;
if (pcd==NULL)
{
hb_retl(FALSE);
return;
}
bMultiline = ((pcd->bStyle & WVW_EB_MULTILINE) == WVW_EB_MULTILINE);
hb_retl(bMultiline);
}
/*WVW_EBgettext( [nWinNum], nEBid,;
* lSoftBreak )
*returns current text from editbox nEBid in window nWinNum
*lSoftBreak: Default is FALSE.
* insert soft line break character (CR+CR+LF) at wordwrap positions
* can be usefull to convert the text to MEMO format
* eg. converting editbox's softbreaks into memoline softbreak:
* cStr := wvw_ebgettext(NIL, nEBid, .t.)
* cStr := strtran(cStr, CR+CR+LF, chr(141)+LF)
*
*returns "" in case of error (eg. nEBid not valid)
*/
HB_FUNC( WVW_EBGETTEXT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiEBid = hb_parni(2);
CONTROL_DATA * pcd = GetControlData(usWinNum, WVW_CONTROL_EDITBOX, NULL, uiEBid);
BOOL bSoftBreak = (ISLOG(3) ? hb_parl(3) : FALSE);
USHORT usLen;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
LPTSTR lpszTextANSI;
BOOL bToOEM = ( pWindowData->CodePage == OEM_CHARSET );
if (pcd==NULL)
{
hb_retl(FALSE);
return;
}
if (bSoftBreak)
{
SendMessage(
(HWND) pcd->hWndCtrl,
EM_FMTLINES,
(WPARAM) TRUE,
(LPARAM) 0
);
}
usLen = ( USHORT )SendMessage( (HWND) pcd->hWndCtrl, WM_GETTEXTLENGTH, 0, 0 ) + 1 ;
lpszTextANSI = ( LPTSTR ) hb_xgrab( usLen );
SendMessage(
(HWND) pcd->hWndCtrl,
WM_GETTEXT,
usLen,
(LPARAM) lpszTextANSI
);
if (bToOEM)
{
ULONG ulLen = (ULONG) strlen(lpszTextANSI);
LPTSTR lpszText = (LPTSTR) hb_xgrab(ulLen+1);
CharToOem( lpszTextANSI, lpszText );
hb_retc( lpszText );
hb_xfree( lpszText );
}
else
{
hb_retc( lpszTextANSI );
}
hb_xfree( lpszTextANSI );
}
/*WVW_EBsettext( [nWinNum], nEBid, cText )
*set current text of editbox nEBid in window nWinNum
*returns .t. if successful, .f. in case of error (eg. nEBid not valid)
*/
HB_FUNC( WVW_EBSETTEXT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiEBid = hb_parni(2);
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
CONTROL_DATA * pcd = GetControlData(usWinNum, WVW_CONTROL_EDITBOX, NULL, uiEBid);
BOOL bRetval;
LPTSTR lpszText = (LPTSTR) hb_parcx( 3 );
BOOL bFromOEM = ( pWindowData->CodePage == OEM_CHARSET );
if (pcd==NULL)
{
hb_retl(FALSE);
return;
}
if (bFromOEM)
{
ULONG ulLen = (ULONG) strlen(lpszText);
LPTSTR lpszTextANSI = (LPTSTR) hb_xgrab(ulLen+1);
OemToChar( lpszText, lpszTextANSI );
lpszText = lpszTextANSI;
}
bRetval = SendMessage(
(HWND) pcd->hWndCtrl,
WM_SETTEXT,
0,
(LPARAM) lpszText
);
if (bFromOEM)
{
hb_xfree(lpszText);
}
hb_retl( bRetval );
}
/*WVW_EBgetsel( [nWinNum], nEBid, @nstart, @nend )
*get selected text editbox nEBid in window nWinNum
*the start selected text (0-based) is in nstart
*the end selected text (0-based) is in nend
*returns .t. if operation successful
*returns .f. if not (eg. nEBid not valid)
*/
HB_FUNC( WVW_EBGETSEL )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiEBid = hb_parni(2);
CONTROL_DATA * pcd = GetControlData(usWinNum, WVW_CONTROL_EDITBOX, NULL, uiEBid);
DWORD dwStart, dwEnd;
if (pcd==NULL)
{
hb_retl(FALSE);
return;
}
SendMessage( (HWND) pcd->hWndCtrl,
EM_GETSEL,
(WPARAM) &dwStart,
(LPARAM) &dwEnd
);
if (ISBYREF(3)) hb_stornl( dwStart, 3 );
if (ISBYREF(4)) hb_stornl( dwEnd, 4 );
hb_retl(TRUE);
}
/*WVW_EBsetsel( [nWinNum], nEBid, nstart, nend )
*set selected text editbox nEBid in window nWinNum
*the start selected text (0-based) is in nstart
*the end selected text (0-based) is in nend
*notes: nstart may be > nend (flipped selection)
*notes: to selet all text: WVW_EBsetsel(nwinnum, nebid, 0, -1)
*returns .t. if operation successful
*returns .f. if not (eg. nEBid not valid)
*/
HB_FUNC( WVW_EBSETSEL )
{
UINT usWinNum = WVW_WHICH_WINDOW;
UINT uiEBid = hb_parni(2);
CONTROL_DATA * pcd = GetControlData(usWinNum, WVW_CONTROL_EDITBOX, NULL, uiEBid);
DWORD dwStart = (DWORD) (ISNUM(3) ? hb_parnl(3) : 0);
DWORD dwEnd = (DWORD) (ISNUM(4) ? hb_parnl(4) : 0);
if (pcd==NULL)
{
hb_retl(FALSE);
return;
}
SendMessage( (HWND) pcd->hWndCtrl,
EM_SETSEL,
(WPARAM) dwStart,
(LPARAM) dwEnd
);
hb_retl(TRUE);
}
//Static controls
HB_FUNC( WVW_STCREATE )
{
HANDLE hInstance = NULL;
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
WVW_DATA * pData = hb_getWvwData( ) ;
HWND hWndParent = pWindowData->hWnd;
HWND hWndCB;
//RECT r;
// HDC hDc;
POINT xy = { 0 };
int iTop, iLeft, iBottom, iRight;
int iOffTop, iOffLeft, iOffBottom, iOffRight;
UINT uiCBid;
BOOL bBorder = hb_parnl( 7 ) ;
ULONG ulExStyle = 0 | ( bBorder ? WS_EX_CLIENTEDGE:0 );
USHORT usWidth = ( USHORT )hb_parni( 4 );
USHORT usTop = ( USHORT )hb_parni( 2 ),
usLeft = ( USHORT )hb_parni( 3 ),
usBottom = ISNUM(11) ? ( USHORT )hb_parni(11) : usTop,
usRight = ISNUM(12) ? ( USHORT )hb_parni( 12 ) : usLeft + usWidth - 1;
//char * sText = hb_parc( 5 );
int iStyle = ( bBorder ? WS_BORDER :0 ) ;
int iBox = ISNUM(10) ? hb_parni( 10 ) : 0;
HFONT hFont = NULL;
if (iBox > 0 )
iStyle |= iBox;
if (ISNUM(8))
hFont = (HFONT) HB_PARHANDLE( 8 ) ;
else
if (pWindowData->hSTfont==NULL)
{
pWindowData->hSTfont = CreateFontIndirect( &pData->s_lfST );
if (pWindowData->hSTfont==NULL)
{
hb_retnl(0);
return;
}
}
iOffTop = !ISNIL( 6 ) ? hb_parvni( 6,1 ) : 0;
iOffLeft = !ISNIL( 6 ) ? hb_parvni( 6,2 ) : 0;
iOffBottom = !ISNIL( 6 ) ? hb_parvni( 6,3 ) : 0;
iOffRight = !ISNIL( 6 ) ? hb_parvni( 6,4 ) : 0;
if (hb_gt_wvw_GetMainCoordMode())
{
hb_wvw_HBFUNCPrologue(usWinNum, &usTop, &usLeft, &usBottom, &usRight);
}
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usLeft, usTop );
iTop = xy.y + iOffTop ;
iLeft = xy.x + iOffLeft;
xy = hb_gt_wvwGetXYFromColRow( pWindowData, usRight + 1, usBottom + 1 );
xy.y -= pWindowData->byLineSpacing;
iBottom = xy.y - 1 + iOffBottom ;
iRight = xy.x - 1 + iOffRight;
uiCBid = LastControlId( usWinNum, WVW_CONTROL_STATIC);
if (uiCBid==0)
{
uiCBid = WVW_ID_BASE_STATIC;
}
else
{
uiCBid++;
}
hb_winmainArgGet( &hInstance, NULL, NULL );
hWndCB = CreateWindowEx(
ulExStyle,
"STATIC",
(LPSTR) NULL,
WS_CHILD | WS_VISIBLE | (DWORD) iStyle,
iLeft,
iTop,
iRight-iLeft+1,
iBottom-iTop+1,
hWndParent,
(HMENU) uiCBid,
(HINSTANCE) hInstance,
(LPVOID) NULL
);
if(hWndCB)
{
RECT rXB = { 0 }, rOffXB = { 0 };
// WNDPROC OldProc;
rXB.top = usTop; rXB.left= usLeft;
rXB.bottom=usBottom; rXB.right =usRight;
rOffXB.top = iOffTop; rOffXB.left= iOffLeft;
rOffXB.bottom=iOffBottom; rOffXB.right =iOffRight;
if( ISCHAR(5))
{
SendMessage( hWndCB, WM_SETTEXT, 0, (LPARAM) hb_parc(5) );
}
if (hFont)
SendMessage( hWndCB, WM_SETFONT, (WPARAM) hFont, (LPARAM) TRUE);
else
SendMessage( hWndCB, WM_SETFONT, (WPARAM) pWindowData->hSTfont, (LPARAM) TRUE);
hb_retnl( (LONG) uiCBid );
HB_STOREHANDLE( hWndCB ,9);
}
else
{
hb_retnl( (LONG) 0 );
}
}
HB_FUNC( WVW_STSETTEXT )
{
// byte bStyle;
HWND hWndCB = (HWND) HB_PARHANDLE( 2 );
if (hWndCB)
{
SetWindowText( (HWND) hWndCB, (LPCTSTR) hb_parc( 3 ) );
hb_retl(1);
}
else
{
hb_retl(FALSE);
}
}
HB_FUNC( WVW_STSETFONT )
{
UINT usWinNum = WVW_WHICH_WINDOW;
WIN_DATA * pWindowData = hb_gt_wvw_GetWindowsData( usWinNum );
WVW_DATA * pData= hb_getWvwData( ) ;
BOOL retval = TRUE;
pData->s_lfST.lfHeight = ISNIL( 3 ) ? pWindowData->fontHeight - 2 : hb_parnl( 3 );
pData->s_lfST.lfWidth = ISNIL( 4 ) ? pData->s_lfST.lfWidth : hb_parni( 4 );
pData->s_lfST.lfEscapement = 0;
pData->s_lfST.lfOrientation = 0;
pData->s_lfST.lfWeight = ISNIL( 5 ) ? pData->s_lfST.lfWeight : hb_parni( 5 );
pData->s_lfST.lfItalic = ISNIL( 7 ) ? pData->s_lfST.lfItalic : ( BYTE )hb_parl( 7 );
pData->s_lfST.lfUnderline = ISNIL( 8 ) ? pData->s_lfST.lfUnderline : ( BYTE )hb_parl( 8 );
pData->s_lfST.lfStrikeOut = ISNIL( 9 ) ? pData->s_lfST.lfStrikeOut : ( BYTE )hb_parl( 9 );
pData->s_lfST.lfCharSet = DEFAULT_CHARSET;
pData->s_lfST.lfQuality = ISNIL( 6 ) ? pData->s_lfST.lfQuality : ( BYTE )hb_parni( 6 );
pData->s_lfST.lfPitchAndFamily = FF_DONTCARE;
if ( ISCHAR( 2 ) )
{
strcpy( pData->s_lfST.lfFaceName, hb_parcx( 2 ) );
}
if (pWindowData->hSTfont)
{
HFONT hOldFont = pWindowData->hSTfont;
HFONT hFont = CreateFontIndirect( &pData->s_lfST );
if (hFont)
{
CONTROL_DATA * pcd = pWindowData->pcdCtrlList;
while (pcd)
{
if ((pcd->byCtrlClass == WVW_CONTROL_STATIC) &&
((HFONT) SendMessage( pcd->hWndCtrl, WM_GETFONT, (WPARAM) 0, (LPARAM) 0) == hOldFont)
)
{
SendMessage( pcd->hWndCtrl, WM_SETFONT, (WPARAM) hFont, (LPARAM) TRUE);
}
pcd = pcd->pNext;
}
pWindowData->hSTfont = hFont;
DeleteObject( (HFONT) hOldFont );
}
else
{
retval = FALSE;
}
}
hb_retl( retval );
}