2010-04-01 16:44 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/rtl/gtwin/gtwin.c
* harbour/src/rtl/gtwvt/gtwvt.h
* harbour/src/rtl/gtwvt/gtwvt.c
* modified to use in UNICODE builds current HVM CP if user
has not set display CP using HB_SETTERMCP() or HB_SETDISPCP()
* harbour/src/rtl/gtwvt/gtwvt.h
* harbour/src/rtl/gtwvt/gtwvt.c
* eliminated most of HB_TCHAR_*() translations
% optimized setting SelectCopy menu item name to avoid unnecessary
memory allocation and to use hb_str*() API
! allow to set window title before displaying the window
(HB_GTI_WINTITLE)
% use hb_str*() API for window title setting
! removed redundant window title setting just after creating new window
! pass pointer to HB_GTWVT structure as lpParam in CreateWindow()
function to allow WM_CREATE message processing and early window
handle registration
* harbour/tests/cpinfo.prg
* added HB_SETTERMCP() setting
* harbour/examples/gtwvw/tests/cbtest1.prg
* harbour/examples/gtwvw/tests/cbtest6.prg
* harbour/examples/gtwvw/tests/ebtest7.prg
* small cleanup to compile with Harbour
This commit is contained in:
@@ -17,6 +17,34 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2010-04-01 16:44 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/src/rtl/gtwin/gtwin.c
|
||||
* harbour/src/rtl/gtwvt/gtwvt.h
|
||||
* harbour/src/rtl/gtwvt/gtwvt.c
|
||||
* modified to use in UNICODE builds current HVM CP if user
|
||||
has not set display CP using HB_SETTERMCP() or HB_SETDISPCP()
|
||||
|
||||
* harbour/src/rtl/gtwvt/gtwvt.h
|
||||
* harbour/src/rtl/gtwvt/gtwvt.c
|
||||
* eliminated most of HB_TCHAR_*() translations
|
||||
% optimized setting SelectCopy menu item name to avoid unnecessary
|
||||
memory allocation and to use hb_str*() API
|
||||
! allow to set window title before displaying the window
|
||||
(HB_GTI_WINTITLE)
|
||||
% use hb_str*() API for window title setting
|
||||
! removed redundant window title setting just after creating new window
|
||||
! pass pointer to HB_GTWVT structure as lpParam in CreateWindow()
|
||||
function to allow WM_CREATE message processing and early window
|
||||
handle registration
|
||||
|
||||
* harbour/tests/cpinfo.prg
|
||||
* added HB_SETTERMCP() setting
|
||||
|
||||
* harbour/examples/gtwvw/tests/cbtest1.prg
|
||||
* harbour/examples/gtwvw/tests/cbtest6.prg
|
||||
* harbour/examples/gtwvw/tests/ebtest7.prg
|
||||
* small cleanup to compile with Harbour
|
||||
|
||||
2010-03-30 21:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/contrib/gtwvg/gtwvg.h
|
||||
! fixed compilation with XCC
|
||||
|
||||
@@ -31,7 +31,7 @@ static s_cThankYou := "Thanks for participating in our survey :-)"
|
||||
ANNOUNCE HB_NOSTARTUPWINDOW
|
||||
|
||||
proc main
|
||||
local nMaxWidth, nCBid
|
||||
local nMaxWidth, nCBid, nPBid, nPos
|
||||
local ch,ncursor
|
||||
setcolor("N/W")
|
||||
WVW_SetTitle(NIL,"Quick Survey")
|
||||
|
||||
@@ -17,19 +17,20 @@
|
||||
#include "getexit.ch"
|
||||
#include "inkey.ch"
|
||||
|
||||
* Two different keyboard handling method
|
||||
* (notes: WVW_CB_KBD_CLIPPER doesn't mimic anything from Clipper
|
||||
* it just 'feels like Clipper' to me)
|
||||
/* Two different keyboard handling method
|
||||
* (notes: WVW_CB_KBD_CLIPPER doesn't mimic anything from Clipper
|
||||
* it just 'feels like Clipper' to me)
|
||||
*/
|
||||
#define WVW_CB_KBD_STANDARD 0
|
||||
#define WVW_CB_KBD_CLIPPER 1
|
||||
|
||||
* our preferred method (choose one of the above)
|
||||
// our preferred method (choose one of the above)
|
||||
static s_nCB_Kbd := WVW_CB_KBD_CLIPPER
|
||||
|
||||
* list of created comboboxes
|
||||
// list of created comboboxes
|
||||
static s_aComboList := {}
|
||||
|
||||
* create these two as local, otherwise it will be assumed PRIVATE
|
||||
// create these two as local, otherwise it will be assumed PRIVATE
|
||||
MEMVAR __nCBid__,__temp__
|
||||
|
||||
#xcommand @ <row>,<col> COMBOBOX <var> ;
|
||||
@@ -37,18 +38,18 @@ MEMVAR __nCBid__,__temp__
|
||||
WIDTH <nWidth> => ;
|
||||
;
|
||||
;
|
||||
__nCBid__ := wvw_cbCreate(NIL, <row>, <col>, <nWidth>, ;
|
||||
<aOptions>, ;
|
||||
{|nWinNum,nId,nEvent,nIndex, temp| ;
|
||||
__nCBid__ := wvw_cbCreate(NIL, <row>, <col>, <nWidth>, ;
|
||||
<aOptions>, ;
|
||||
{|nWinNum,nId,nEvent,nIndex, temp| ;
|
||||
CBhandler(nWinNum,nId,nEvent,nIndex,<"var">,GetList);
|
||||
},;
|
||||
NIL,NIL,s_nCB_Kbd,NIL); ;
|
||||
AADD(s_aComboList, {__nCBid__, <"var"> }); ;
|
||||
__temp__ := wvw_cbFindString(NIL, __nCBid__, <var> );;
|
||||
if(__temp__>=0, wvw_cbSetIndex(NIL, __nCBid__, __temp__),NIL);;
|
||||
setpos(<row>,<col>);;
|
||||
AAdd(GetList,_GET_(<var>,<"var">,repl("X",<nWidth>),,) ) ;;
|
||||
ATAIL(GetList):cargo := __nCBid__; ;
|
||||
}, ;
|
||||
NIL,NIL,s_nCB_Kbd,NIL); ;
|
||||
AADD(s_aComboList, {__nCBid__, <"var"> }); ;
|
||||
__temp__ := wvw_cbFindString(NIL, __nCBid__, <var> ); ;
|
||||
if(__temp__>=0, wvw_cbSetIndex(NIL, __nCBid__, __temp__),NIL); ;
|
||||
setpos(<row>,<col>); ;
|
||||
AAdd(GetList,_GET_(<var>,<"var">,repl("X",<nWidth>),,) ) ; ;
|
||||
ATAIL(GetList):cargo := __nCBid__; ;
|
||||
ATAIL(GetList):reader := {|get| CBreader(get)}
|
||||
|
||||
proc main
|
||||
@@ -59,7 +60,7 @@ local __nCBid__,__temp__ //these two are temporary var required by CB get creat
|
||||
WVW_SetLineSpacing(NIL,4)
|
||||
WVW_SetLSpaceColor(NIL,0)
|
||||
WVW_cbSetFont(NIL, "Arial", 14) //std: 20-2
|
||||
set(_SET_TRACESTACK, 0)
|
||||
//set(_SET_TRACESTACK, 0)
|
||||
|
||||
//wvw_setmousemove(,.t.)
|
||||
|
||||
@@ -100,31 +101,32 @@ local __nCBid__,__temp__ //these two are temporary var required by CB get creat
|
||||
return //main
|
||||
|
||||
function CBhandler(nWinNum,nId,nEvent,nIndex, cVar, GetList)
|
||||
* this function is called by GTWVW indirectly, through the main program's codeblock
|
||||
* which adds 'cVar' and 'GetList' parameter to the original 4 parameter passed
|
||||
* by GTWVW.
|
||||
*
|
||||
* This is a sample of how a combobox bound to a GetList is handled.
|
||||
*
|
||||
* Events handled here:
|
||||
* CBN_SETFOCUS: (3)
|
||||
* Find i where GetList[i] is Get object beneath the combobox, then
|
||||
* synchronize the contents, and let TGetList think she is working on it.
|
||||
*
|
||||
* CBN_KILLFOCUS: (4)
|
||||
* Find i where GetList[i] is Get object beneath the combobox, then
|
||||
* synchronize the contents.
|
||||
*
|
||||
* CBN_SELCHANGE: (1)
|
||||
* (do nothing)
|
||||
*
|
||||
/* this function is called by GTWVW indirectly, through the main program's codeblock
|
||||
* which adds 'cVar' and 'GetList' parameter to the original 4 parameter passed
|
||||
* by GTWVW.
|
||||
*
|
||||
* This is a sample of how a combobox bound to a GetList is handled.
|
||||
*
|
||||
* Events handled here:
|
||||
* CBN_SETFOCUS: (3)
|
||||
* Find i where GetList[i] is Get object beneath the combobox, then
|
||||
* synchronize the contents, and let TGetList think she is working on it.
|
||||
*
|
||||
* CBN_KILLFOCUS: (4)
|
||||
* Find i where GetList[i] is Get object beneath the combobox, then
|
||||
* synchronize the contents.
|
||||
*
|
||||
* CBN_SELCHANGE: (1)
|
||||
* (do nothing)
|
||||
*/
|
||||
|
||||
local i, ccursel
|
||||
local oGetList := __GetListActive()
|
||||
local oGet := GetActive()
|
||||
|
||||
* if GetList is empty, then READ session is already ended
|
||||
* this should not be happenning!
|
||||
/* if GetList is empty, then READ session is already ended
|
||||
* this should not be happenning!
|
||||
*/
|
||||
if empty(GetList)
|
||||
MyAlert("Bad practice: you left an active combobox, but READ already ended")
|
||||
return NIL//ignore this event
|
||||
@@ -134,31 +136,33 @@ local oGet := GetActive()
|
||||
case nEvent==3 //CBN_SETFOCUS
|
||||
i := ascan(GetList, {|x|x:Name==cVar})
|
||||
if i>0
|
||||
* !oGet:HasFocus means
|
||||
* CBN_SETFOCUS was NOT initiated from mouseclick
|
||||
* then we don't need to bother about setting focus to the
|
||||
* new GET. GetSys has already done that via CBreader().
|
||||
* It is CBreader() that brought us here, so ignore it.
|
||||
/* !oGet:HasFocus means
|
||||
* CBN_SETFOCUS was NOT initiated from mouseclick
|
||||
* then we don't need to bother about setting focus to the
|
||||
* new GET. GetSys has already done that via CBreader().
|
||||
* It is CBreader() that brought us here, so ignore it.
|
||||
*/
|
||||
if oGet:HasFocus
|
||||
* So user has jumped here by clicking on the combobox.
|
||||
* And this combobox has oNewGet beneath it.
|
||||
* But do NOT assign oGetList:oGet into this oNewGet
|
||||
* from within here!
|
||||
* Remember that the reader() is still suspended
|
||||
* on inkey(0). If we change the ActiveGet from here, then
|
||||
* when we leave this CB (eg. by means of K_TAB)
|
||||
* this reader() will resume, but alas the active get
|
||||
* is no longer the same! Thus reader() most likely
|
||||
* will behave incorrectly.
|
||||
|
||||
* The trick is simple:
|
||||
* reject the SETFOCUS. This will cause reader()
|
||||
* resume its action on inkey(0).
|
||||
* All we have to do here is emulate the mouseclick
|
||||
* event on oNewGet object beneath the CB, ie.
|
||||
* putting K_LBUTTONDOWN into keyboard buffer
|
||||
* at proper coordinate.
|
||||
* We will then arrive at cbreader().
|
||||
/* So user has jumped here by clicking on the combobox.
|
||||
* And this combobox has oNewGet beneath it.
|
||||
* But do NOT assign oGetList:oGet into this oNewGet
|
||||
* from within here!
|
||||
* Remember that the reader() is still suspended
|
||||
* on inkey(0). If we change the ActiveGet from here, then
|
||||
* when we leave this CB (eg. by means of K_TAB)
|
||||
* this reader() will resume, but alas the active get
|
||||
* is no longer the same! Thus reader() most likely
|
||||
* will behave incorrectly.
|
||||
*
|
||||
* The trick is simple:
|
||||
* reject the SETFOCUS. This will cause reader()
|
||||
* resume its action on inkey(0).
|
||||
* All we have to do here is emulate the mouseclick
|
||||
* event on oNewGet object beneath the CB, ie.
|
||||
* putting K_LBUTTONDOWN into keyboard buffer
|
||||
* at proper coordinate.
|
||||
* We will then arrive at cbreader().
|
||||
*/
|
||||
|
||||
SetWinFocus(nWinNum)
|
||||
msetpos(GetList[i]:row, GetList[i]:col+1)
|
||||
@@ -166,13 +170,14 @@ local oGet := GetActive()
|
||||
endif //oGet:HasFocus
|
||||
|
||||
else //i==0
|
||||
* there's no GET object beneath the combobox.
|
||||
* This must be a combobox living in the wild.
|
||||
* Do what you want with it, we do nothing here.
|
||||
/* there's no GET object beneath the combobox.
|
||||
* This must be a combobox living in the wild.
|
||||
* Do what you want with it, we do nothing here.
|
||||
*/
|
||||
endif
|
||||
|
||||
case nEvent==4 //CBN_KILLFOCUS
|
||||
* put current content of combobox into GET variable beneath it.
|
||||
// put current content of combobox into GET variable beneath it.
|
||||
cCurSel := wvw_cbGetCurText(nWinNum, nId)
|
||||
oGet:varput(cCurSel)
|
||||
oGet:display() //this is optional
|
||||
@@ -210,7 +215,7 @@ FUNCTION CBreader( oGet )
|
||||
oGet:exitState := GE_UP
|
||||
|
||||
ELSEIF ( nKey == K_DOWN )
|
||||
* NOTE that in WVW_CB_KBD_STANDARD mode we will never get here
|
||||
// NOTE that in WVW_CB_KBD_STANDARD mode we will never get here
|
||||
oGet:exitState := GE_DOWN
|
||||
|
||||
ELSEIF ( nKey == K_TAB )
|
||||
@@ -253,7 +258,7 @@ RETURN (NIL) //cbreader()
|
||||
|
||||
/* not used:
|
||||
static function MoveToGet(GetList, nPos)
|
||||
* move focus to GET object at GetList[nPos]
|
||||
// move focus to GET object at GetList[nPos]
|
||||
local i
|
||||
local oGetList := __GetListActive( )
|
||||
local oGet
|
||||
@@ -279,7 +284,7 @@ return .t.
|
||||
/* miscellaneous **********************************/
|
||||
|
||||
static function SetWinFocus(nWinNum)
|
||||
* Set FOCUS to window nWinNum
|
||||
// Set FOCUS to window nWinNum
|
||||
local hWnd := wvw_getWindowHandle(nWinNum)
|
||||
WIN_SETFOCUS(hWnd)
|
||||
return NIL
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
#define __GET_NEBID 10
|
||||
#define __GET_LFOCUSED 11
|
||||
|
||||
REQUEST HB_NOSTARTUPWINDOW
|
||||
//REQUEST HB_NOSTARTUPWINDOW
|
||||
|
||||
proc main
|
||||
local nOpen, nClose
|
||||
|
||||
@@ -593,9 +593,18 @@ static BOOL WINAPI hb_gt_win_CtrlHandler( DWORD dwCtrlType )
|
||||
static void hb_gt_win_xGetScreenContents( PHB_GT pGT, SMALL_RECT * psrWin )
|
||||
{
|
||||
int iRow, iCol, i;
|
||||
#if defined( UNICODE )
|
||||
PHB_CODEPAGE cdpHost;
|
||||
#endif
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_gt_win_xGetScreenContents(%p,%p)", pGT, psrWin));
|
||||
|
||||
#if defined( UNICODE )
|
||||
cdpHost = s_cdpHost;
|
||||
if( !cdpHost )
|
||||
cdpHost = hb_vmCDP();
|
||||
#endif
|
||||
|
||||
for( iRow = psrWin->Top; iRow <= psrWin->Bottom; ++iRow )
|
||||
{
|
||||
i = iRow * _GetScreenWidth() + psrWin->Left;
|
||||
@@ -610,8 +619,8 @@ static void hb_gt_win_xGetScreenContents( PHB_GT pGT, SMALL_RECT * psrWin )
|
||||
* very slow in some cases
|
||||
*/
|
||||
|
||||
uc = hb_cdpGetChar( s_cdpHost, HB_FALSE, wc );
|
||||
if( uc == '?' && wc >= 0x100 && s_cdpHost != s_cdpBox )
|
||||
uc = hb_cdpGetChar( cdpHost, HB_FALSE, wc );
|
||||
if( uc == '?' && wc >= 0x100 && cdpHost != s_cdpBox )
|
||||
{
|
||||
uc = hb_cdpGetChar( s_cdpBox, HB_FALSE, wc );
|
||||
if( uc != '?' )
|
||||
@@ -827,13 +836,13 @@ static void hb_gt_win_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil
|
||||
s_bAltKeyHandling = HB_TRUE;
|
||||
|
||||
#if defined( UNICODE )
|
||||
s_cdpHost = s_cdpIn = hb_vmCDP();
|
||||
/* s_cdpHost = s_cdpIn = hb_vmCDP(); */
|
||||
s_cdpBox = hb_cdpFind( "EN" );
|
||||
#endif
|
||||
|
||||
#else
|
||||
/* initialize code page translation */
|
||||
HB_GTSELF_SETDISPCP( pGT, NULL, NULL, HB_FALSE );
|
||||
HB_GTSELF_SETKEYCP( pGT, NULL, NULL );
|
||||
#endif
|
||||
|
||||
#ifndef HB_NO_ALLOC_CONSOLE
|
||||
/*
|
||||
@@ -1475,7 +1484,8 @@ static int hb_gt_win_ReadKey( PHB_GT pGT, int iEventMask )
|
||||
|
||||
#if defined( UNICODE )
|
||||
ch = s_irInBuf[ s_cNumIndex ].Event.KeyEvent.uChar.UnicodeChar;
|
||||
ch = hb_cdpGetChar( s_cdpIn, HB_FALSE, ( HB_WCHAR ) ch );
|
||||
ch = hb_cdpGetChar( s_cdpIn ? s_cdpIn : hb_vmCDP(), HB_FALSE,
|
||||
( HB_WCHAR ) ch );
|
||||
#else
|
||||
ch = s_irInBuf[ s_cNumIndex ].Event.KeyEvent.uChar.AsciiChar;
|
||||
#endif
|
||||
@@ -2068,25 +2078,36 @@ static void hb_gt_win_Refresh( PHB_GT pGT )
|
||||
{
|
||||
HB_TRACE( HB_TR_DEBUG, ("hb_gt_win_Refresh(%p)", pGT) );
|
||||
|
||||
HB_GTSUPER_REFRESH( pGT );
|
||||
|
||||
if( s_pCharInfoScreen )
|
||||
{
|
||||
int iRow, iCol, iStyle;
|
||||
#if defined( UNICODE )
|
||||
PHB_CODEPAGE cdpHost = s_cdpHost;
|
||||
if( !cdpHost )
|
||||
s_cdpHost = hb_vmCDP();
|
||||
#endif
|
||||
|
||||
HB_GTSELF_GETSCRCURSOR( pGT, &iRow, &iCol, &iStyle );
|
||||
HB_GTSUPER_REFRESH( pGT );
|
||||
|
||||
s_iCurRow = iRow;
|
||||
s_iCurCol = iCol;
|
||||
if( s_pCharInfoScreen )
|
||||
{
|
||||
int iRow, iCol, iStyle;
|
||||
|
||||
if( iRow < 0 || iCol < 0 ||
|
||||
iRow >= ( int ) _GetScreenHeight() ||
|
||||
iCol >= ( int ) _GetScreenWidth() )
|
||||
s_iCursorStyle = SC_NONE;
|
||||
else
|
||||
s_iCursorStyle = iStyle;
|
||||
HB_GTSELF_GETSCRCURSOR( pGT, &iRow, &iCol, &iStyle );
|
||||
|
||||
hb_gt_win_xScreenUpdate();
|
||||
s_iCurRow = iRow;
|
||||
s_iCurCol = iCol;
|
||||
|
||||
if( iRow < 0 || iCol < 0 ||
|
||||
iRow >= ( int ) _GetScreenHeight() ||
|
||||
iCol >= ( int ) _GetScreenWidth() )
|
||||
s_iCursorStyle = SC_NONE;
|
||||
else
|
||||
s_iCursorStyle = iStyle;
|
||||
|
||||
hb_gt_win_xScreenUpdate();
|
||||
}
|
||||
#if defined( UNICODE )
|
||||
s_cdpHost = cdpHost;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -223,8 +223,11 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
|
||||
|
||||
HB_WVT_UNLOCK
|
||||
|
||||
if( pWVT->pszSelectCopy )
|
||||
hb_xfree( pWVT->pszSelectCopy );
|
||||
if( pWVT->hSelectCopy )
|
||||
hb_strfree( pWVT->hSelectCopy );
|
||||
|
||||
if( pWVT->hWindowTitle )
|
||||
hb_strfree( pWVT->hWindowTitle );
|
||||
|
||||
#if !defined( UNICODE )
|
||||
if( pWVT->hFontBox && pWVT->hFontBox != pWVT->hFont )
|
||||
@@ -324,8 +327,20 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, HINSTANCE hInstance, int iCmdShow )
|
||||
pWVT->bBeingMarked = HB_FALSE;
|
||||
pWVT->bBeginMarked = HB_FALSE;
|
||||
|
||||
pWVT->pszSelectCopy = hb_strdup( "Mark and Copy" );
|
||||
pWVT->lpSelectCopy = TEXT( "Mark and Copy" );
|
||||
pWVT->hSelectCopy = NULL;
|
||||
pWVT->bSelectCopy = HB_TRUE;
|
||||
|
||||
{
|
||||
PHB_FNAME pFileName = hb_fsFNameSplit( hb_cmdargARGV()[ 0 ] );
|
||||
PHB_ITEM pItem = hb_itemPutC( NULL, pFileName->szName );
|
||||
|
||||
pWVT->lpWindowTitle = HB_ITEMGETSTR( pItem, &pWVT->hWindowTitle, NULL );
|
||||
|
||||
hb_itemRelease( pItem );
|
||||
hb_xfree( pFileName );
|
||||
}
|
||||
|
||||
pWVT->bResizable = HB_TRUE;
|
||||
pWVT->bClosable = HB_TRUE;
|
||||
|
||||
@@ -334,10 +349,9 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, HINSTANCE hInstance, int iCmdShow )
|
||||
pWVT->bResizing = HB_FALSE;
|
||||
pWVT->bAlreadySizing = HB_FALSE;
|
||||
|
||||
pWVT->hostCDP = hb_vmCDP();
|
||||
#if defined( UNICODE )
|
||||
pWVT->inCDP = hb_vmCDP();
|
||||
pWVT->boxCDP = hb_cdpFind( "EN" );
|
||||
/* pWVT->hostCDP = pWVT->inCDP = hb_vmCDP(); */
|
||||
pWVT->boxCDP = hb_cdpFind( "EN" );
|
||||
#else
|
||||
{
|
||||
int i;
|
||||
@@ -554,6 +568,7 @@ static void hb_gt_wvt_TranslateKey( PHB_GTWVT pWVT, int key, int shiftkey, int a
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined( UNICODE )
|
||||
static int hb_gt_wvt_key_ansi_to_oem( int c )
|
||||
{
|
||||
BYTE pszSrc[ 2 ];
|
||||
@@ -570,6 +585,7 @@ static int hb_gt_wvt_key_ansi_to_oem( int c )
|
||||
|
||||
return pszDst[ 0 ];
|
||||
}
|
||||
#endif
|
||||
|
||||
static void hb_gt_wvt_FitRows( PHB_GTWVT pWVT )
|
||||
{
|
||||
@@ -885,31 +901,6 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT, HFONT hFont )
|
||||
hb_gt_wvt_UpdateCaret( pWVT );
|
||||
}
|
||||
|
||||
static void hb_gt_wvt_SetWindowTitle( HWND hWnd, const char * title )
|
||||
{
|
||||
LPTSTR text = HB_TCHAR_CONVTO( title );
|
||||
SetWindowText( hWnd, text );
|
||||
HB_TCHAR_FREE( text );
|
||||
}
|
||||
|
||||
static HB_BOOL hb_gt_wvt_GetWindowTitle( HWND hWnd, char ** title )
|
||||
{
|
||||
TCHAR buffer[ WVT_MAX_TITLE_SIZE ];
|
||||
int iResult;
|
||||
|
||||
iResult = GetWindowText( hWnd, buffer, WVT_MAX_TITLE_SIZE );
|
||||
if( iResult > 0 )
|
||||
{
|
||||
*title = ( char * ) hb_xgrab( iResult + 1 );
|
||||
HB_TCHAR_GETFROM( *title, buffer, iResult );
|
||||
( *title )[ iResult ] = '\0';
|
||||
return HB_TRUE;
|
||||
}
|
||||
|
||||
*title = NULL;
|
||||
return HB_FALSE;
|
||||
}
|
||||
|
||||
static HB_BOOL hb_gt_wvt_SetWindowSize( PHB_GTWVT pWVT, int iRows, int iCols )
|
||||
{
|
||||
if( HB_GTSELF_RESIZE( pWVT->pGT, iRows, iCols ) )
|
||||
@@ -1370,17 +1361,18 @@ static HB_BOOL hb_gt_wvt_KeyEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam,
|
||||
hb_gt_wvt_AddCharToInputQueue( pWVT, K_ESC );
|
||||
break;
|
||||
default:
|
||||
if( pWVT->inCDP )
|
||||
{
|
||||
#if defined( UNICODE )
|
||||
c = hb_cdpGetChar( pWVT->inCDP, HB_FALSE, ( HB_WCHAR ) c );
|
||||
c = hb_cdpGetChar( pWVT->inCDP ? pWVT->inCDP : hb_vmCDP(),
|
||||
HB_FALSE, ( HB_WCHAR ) c );
|
||||
#else
|
||||
if( pWVT->fKeyTrans )
|
||||
{
|
||||
if( c > 0 && c <= 255 && pWVT->keyTransTbl[ c ] )
|
||||
c = pWVT->keyTransTbl[ c ];
|
||||
#endif
|
||||
}
|
||||
else if( pWVT->CodePage == OEM_CHARSET )
|
||||
c = hb_gt_wvt_key_ansi_to_oem( c );
|
||||
#endif
|
||||
hb_gt_wvt_AddCharToInputQueue( pWVT, c );
|
||||
break;
|
||||
}
|
||||
@@ -1555,7 +1547,9 @@ static void hb_gt_wvt_PaintText( PHB_GTWVT pWVT, RECT updateRect )
|
||||
int iRow, iCol, startCol, len;
|
||||
int iColor, iOldColor = 0;
|
||||
HB_BYTE bAttr;
|
||||
#if ! defined( UNICODE )
|
||||
#if defined( UNICODE )
|
||||
PHB_CODEPAGE hostCDP;
|
||||
#else
|
||||
HFONT hFont, hOldFont = NULL;
|
||||
#endif
|
||||
HB_USHORT usChar;
|
||||
@@ -1563,6 +1557,7 @@ static void hb_gt_wvt_PaintText( PHB_GTWVT pWVT, RECT updateRect )
|
||||
hdc = BeginPaint( pWVT->hWnd, &ps );
|
||||
#if defined( UNICODE )
|
||||
SelectObject( hdc, pWVT->hFont );
|
||||
hostCDP = pWVT->hostCDP ? pWVT->hostCDP : hb_vmCDP();
|
||||
#endif
|
||||
|
||||
rcRect = hb_gt_wvt_GetColRowFromXYRect( pWVT, updateRect );
|
||||
@@ -1582,7 +1577,7 @@ static void hb_gt_wvt_PaintText( PHB_GTWVT pWVT, RECT updateRect )
|
||||
*/
|
||||
iColor &= 0xff;
|
||||
#if defined( UNICODE )
|
||||
usChar = hb_cdpGetU16( bAttr & HB_GT_ATTR_BOX ? pWVT->boxCDP : pWVT->hostCDP, HB_TRUE, ( HB_BYTE ) usChar );
|
||||
usChar = hb_cdpGetU16( bAttr & HB_GT_ATTR_BOX ? pWVT->boxCDP : hostCDP, HB_TRUE, ( HB_BYTE ) usChar );
|
||||
if( len == 0 )
|
||||
{
|
||||
iOldColor = iColor;
|
||||
@@ -1633,10 +1628,25 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
|
||||
{
|
||||
PHB_GTWVT pWVT = hb_gt_wvt_Find( hWnd );
|
||||
|
||||
if( !pWVT )
|
||||
{
|
||||
if( message == WM_CREATE )
|
||||
{
|
||||
pWVT = ( PHB_GTWVT ) ( ( LPCREATESTRUCT ) lParam )->lpCreateParams;
|
||||
if( pWVT )
|
||||
{
|
||||
if( s_wvtWindows[ pWVT->iHandle ] == pWVT )
|
||||
pWVT->hWnd = hWnd;
|
||||
else
|
||||
pWVT = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( pWVT ) switch( message )
|
||||
{
|
||||
case WM_CREATE:
|
||||
return hb_gt_wvt_InitWindow( pWVT, pWVT->ROWS, pWVT->COLS, NULL );
|
||||
return hb_gt_wvt_InitWindow( pWVT, pWVT->ROWS, pWVT->COLS, NULL ) ? 0 : -1;
|
||||
|
||||
case WM_PAINT:
|
||||
{
|
||||
@@ -1819,38 +1829,32 @@ static HB_BOOL hb_gt_wvt_ValidWindowSize( HWND hWnd, int rows, int cols, HFONT h
|
||||
return ( width <= maxWidth ) && ( height <= maxHeight );
|
||||
}
|
||||
|
||||
static HWND hb_gt_wvt_CreateWindow( HINSTANCE hInstance, HB_BOOL bResizable )
|
||||
static void hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT )
|
||||
{
|
||||
HWND hWnd;
|
||||
LPTSTR szAppName;
|
||||
DWORD dwStyle;
|
||||
|
||||
/* InitCommonControls(); */
|
||||
|
||||
szAppName = HB_TCHAR_CONVTO( hb_cmdargARGV()[ 0 ] );
|
||||
dwStyle = pWVT->bResizable ? _WVT_WS_DEF : _WVT_WS_NORESIZE;
|
||||
|
||||
hWnd = CreateWindow(
|
||||
s_szClassName, /* classname */
|
||||
szAppName, /* window name */
|
||||
bResizable ? _WVT_WS_DEF : _WVT_WS_NORESIZE, /* style */
|
||||
0, /* x */
|
||||
0, /* y */
|
||||
CW_USEDEFAULT, /* width */
|
||||
CW_USEDEFAULT, /* height */
|
||||
NULL, /* window parent */
|
||||
NULL, /* menu */
|
||||
hInstance, /* instance */
|
||||
NULL ); /* lpParam */
|
||||
|
||||
HB_TCHAR_FREE( szAppName );
|
||||
|
||||
return hWnd;
|
||||
pWVT->hWnd = CreateWindow( s_szClassName, /* classname */
|
||||
pWVT->lpWindowTitle, /* window name */
|
||||
dwStyle, /* style */
|
||||
0, /* x */
|
||||
0, /* y */
|
||||
CW_USEDEFAULT, /* width */
|
||||
CW_USEDEFAULT, /* height */
|
||||
NULL, /* window parent */
|
||||
NULL, /* menu */
|
||||
pWVT->hInstance, /* instance */
|
||||
( LPVOID ) pWVT ); /* lpParam */
|
||||
}
|
||||
|
||||
static HB_BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT )
|
||||
{
|
||||
if( !pWVT->hWnd )
|
||||
{
|
||||
pWVT->hWnd = hb_gt_wvt_CreateWindow( pWVT->hInstance, pWVT->bResizable );
|
||||
hb_gt_wvt_CreateWindow( pWVT );
|
||||
if( !pWVT->hWnd )
|
||||
hb_errInternal( 10001, "Failed to create WVT window", NULL, NULL );
|
||||
|
||||
@@ -1872,15 +1876,13 @@ static HB_BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT )
|
||||
#endif
|
||||
|
||||
pSetLayeredWindowAttributes( pWVT->hWnd,
|
||||
( COLORREF ) 0 /* COLORREF crKey */,
|
||||
255 /* BYTE bAlpha */,
|
||||
LWA_ALPHA /* DWORD dwFlags */ );
|
||||
( COLORREF ) 0, /* COLORREF crKey */
|
||||
255, /* BYTE bAlpha */
|
||||
LWA_ALPHA /* DWORD dwFlags */ );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
hb_gt_wvt_InitWindow( pWVT, pWVT->ROWS, pWVT->COLS, NULL );
|
||||
|
||||
/* Set icon */
|
||||
if( pWVT->hIcon )
|
||||
{
|
||||
@@ -1888,22 +1890,13 @@ static HB_BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT )
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
|
||||
}
|
||||
|
||||
/* Set default window title */
|
||||
{
|
||||
PHB_FNAME pFileName = hb_fsFNameSplit( hb_cmdargARGV()[ 0 ] );
|
||||
hb_gt_wvt_SetWindowTitle( pWVT->hWnd, pFileName->szName );
|
||||
hb_xfree( pFileName );
|
||||
}
|
||||
|
||||
{
|
||||
HMENU hSysMenu = GetSystemMenu( pWVT->hWnd, FALSE );
|
||||
if( hSysMenu )
|
||||
{
|
||||
/* Create "Mark" prompt in SysMenu to allow console type copy operation */
|
||||
LPTSTR buffer = HB_TCHAR_CONVTO( pWVT->pszSelectCopy );
|
||||
AppendMenu( hSysMenu, MF_STRING, SYS_EV_MARK, buffer );
|
||||
HB_TCHAR_FREE( buffer );
|
||||
|
||||
AppendMenu( hSysMenu, MF_STRING, SYS_EV_MARK, pWVT->lpSelectCopy );
|
||||
/* disable [x] button / close menu item */
|
||||
if( ! pWVT->bClosable )
|
||||
EnableMenuItem( hSysMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED );
|
||||
}
|
||||
@@ -2302,23 +2295,13 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
|
||||
break;
|
||||
}
|
||||
case HB_GTI_WINTITLE:
|
||||
if( pWVT->hWnd )
|
||||
pInfo->pResult = HB_ITEMPUTSTR( pInfo->pResult, pWVT->lpWindowTitle );
|
||||
if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING )
|
||||
{
|
||||
char * pszTitle = NULL;
|
||||
if( hb_gt_wvt_GetWindowTitle( pWVT->hWnd, &pszTitle ) )
|
||||
pInfo->pResult = hb_itemPutCPtr( pInfo->pResult, pszTitle );
|
||||
else
|
||||
pInfo->pResult = hb_itemPutC( pInfo->pResult, NULL );
|
||||
|
||||
if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING )
|
||||
{
|
||||
char * pszFreeTitle = NULL;
|
||||
|
||||
hb_gt_wvt_SetWindowTitle( pWVT->hWnd, hb_osEncodeCP( hb_itemGetCPtr( pInfo->pNewVal ), &pszFreeTitle, NULL ) );
|
||||
|
||||
if( pszFreeTitle )
|
||||
hb_xfree( pszFreeTitle );
|
||||
}
|
||||
hb_strfree( pWVT->hWindowTitle );
|
||||
pWVT->lpWindowTitle = HB_ITEMGETSTR( pInfo->pNewVal, &pWVT->hWindowTitle, NULL );
|
||||
if( pWVT->hWnd )
|
||||
SetWindowText( pWVT->hWnd, pWVT->lpWindowTitle );
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2413,14 +2396,14 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
|
||||
{
|
||||
if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) )
|
||||
{
|
||||
HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL;
|
||||
LPTSTR lpImage;
|
||||
HICON hIconToFree = pWVT->bIconToFree ? pWVT->hIcon : NULL;
|
||||
void * hImageName;
|
||||
|
||||
lpImage = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
|
||||
pWVT->bIconToFree = HB_TRUE;
|
||||
pWVT->hIcon = ( HICON ) LoadImage( ( HINSTANCE ) NULL, lpImage,
|
||||
pWVT->hIcon = ( HICON ) LoadImage( ( HINSTANCE ) NULL,
|
||||
HB_ITEMGETSTR( pInfo->pNewVal, &hImageName, NULL ),
|
||||
IMAGE_ICON, 0, 0, LR_LOADFROMFILE );
|
||||
HB_TCHAR_FREE( lpImage );
|
||||
hb_strfree( hImageName );
|
||||
if( pWVT->hWnd )
|
||||
{
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
|
||||
@@ -2438,14 +2421,13 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
|
||||
{
|
||||
if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING )
|
||||
{
|
||||
HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL;
|
||||
LPTSTR lpIcon;
|
||||
HICON hIconToFree = pWVT->bIconToFree ? pWVT->hIcon : NULL;
|
||||
void * hIconName;
|
||||
|
||||
lpIcon = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
|
||||
pWVT->bIconToFree = HB_FALSE;
|
||||
pWVT->hIcon = LoadIcon( pWVT->hInstance, lpIcon );
|
||||
HB_TCHAR_FREE( lpIcon );
|
||||
|
||||
pWVT->hIcon = LoadIcon( pWVT->hInstance,
|
||||
HB_ITEMGETSTR( pInfo->pNewVal, &hIconName, NULL ) );
|
||||
hb_strfree( hIconName );
|
||||
if( pWVT->hWnd )
|
||||
{
|
||||
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
|
||||
@@ -2457,7 +2439,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
|
||||
}
|
||||
else if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC )
|
||||
{
|
||||
HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL;
|
||||
HICON hIconToFree = pWVT->bIconToFree ? pWVT->hIcon : NULL;
|
||||
|
||||
pWVT->bIconToFree = HB_FALSE;
|
||||
pWVT->hIcon = LoadIcon( pWVT->hInstance,
|
||||
@@ -2573,56 +2555,45 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
|
||||
break;
|
||||
|
||||
case HB_GTI_SELECTCOPY:
|
||||
pInfo->pResult = hb_itemPutL( pInfo->pResult, pWVT->bSelectCopy );
|
||||
|
||||
if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING )
|
||||
{
|
||||
pInfo->pResult = hb_itemPutC( pInfo->pResult, pWVT->pszSelectCopy );
|
||||
pInfo->pResult = HB_ITEMPUTSTR( pInfo->pResult, pWVT->lpSelectCopy );
|
||||
|
||||
if( hb_itemGetCLen( pInfo->pNewVal ) )
|
||||
{
|
||||
HMENU hSysMenu = pWVT->hWnd ? GetSystemMenu( pWVT->hWnd, FALSE ) : NULL;
|
||||
if( hSysMenu || !pWVT->hWnd )
|
||||
{
|
||||
char * pszFreeTitle = NULL;
|
||||
|
||||
if( pWVT->pszSelectCopy )
|
||||
hb_xfree( pWVT->pszSelectCopy );
|
||||
|
||||
pWVT->pszSelectCopy = hb_strdup( hb_osEncodeCP( hb_itemGetCPtr( pInfo->pNewVal ), &pszFreeTitle, NULL ) );
|
||||
hb_strfree( pWVT->hSelectCopy );
|
||||
pWVT->lpSelectCopy = HB_ITEMGETSTR( pInfo->pNewVal, &pWVT->hSelectCopy, NULL );
|
||||
pWVT->bSelectCopy = HB_TRUE;
|
||||
|
||||
if( pszFreeTitle )
|
||||
hb_xfree( pszFreeTitle );
|
||||
|
||||
#if !defined( HB_OS_WIN_CE ) /* WinCE does not support ModifyMenu */
|
||||
if( hSysMenu )
|
||||
{
|
||||
LPTSTR buffer;
|
||||
buffer = HB_TCHAR_CONVTO( pWVT->pszSelectCopy );
|
||||
ModifyMenu( hSysMenu, SYS_EV_MARK, MF_BYCOMMAND | MF_STRING | MF_ENABLED, SYS_EV_MARK, buffer );
|
||||
HB_TCHAR_FREE( buffer );
|
||||
}
|
||||
ModifyMenu( hSysMenu, SYS_EV_MARK, MF_BYCOMMAND | MF_STRING | MF_ENABLED, SYS_EV_MARK, pWVT->lpSelectCopy );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( pInfo->pNewVal )
|
||||
else
|
||||
{
|
||||
HB_BOOL bNewValue = hb_itemGetL( pInfo->pNewVal );
|
||||
if( bNewValue != pWVT->bSelectCopy )
|
||||
pInfo->pResult = hb_itemPutL( pInfo->pResult, pWVT->bSelectCopy );
|
||||
if( pInfo->pNewVal )
|
||||
{
|
||||
if( pWVT->hWnd )
|
||||
HB_BOOL bNewValue = hb_itemGetL( pInfo->pNewVal );
|
||||
if( bNewValue != pWVT->bSelectCopy )
|
||||
{
|
||||
HMENU hSysMenu = GetSystemMenu( pWVT->hWnd, FALSE );
|
||||
if( hSysMenu )
|
||||
if( pWVT->hWnd )
|
||||
{
|
||||
EnableMenuItem( hSysMenu, SYS_EV_MARK, MF_BYCOMMAND | ( bNewValue ? MF_ENABLED : MF_GRAYED ) );
|
||||
pWVT->bSelectCopy = bNewValue;
|
||||
HMENU hSysMenu = GetSystemMenu( pWVT->hWnd, FALSE );
|
||||
if( hSysMenu )
|
||||
{
|
||||
EnableMenuItem( hSysMenu, SYS_EV_MARK, MF_BYCOMMAND | ( bNewValue ? MF_ENABLED : MF_GRAYED ) );
|
||||
pWVT->bSelectCopy = bNewValue;
|
||||
}
|
||||
}
|
||||
else
|
||||
pWVT->bSelectCopy = bNewValue;
|
||||
}
|
||||
else
|
||||
pWVT->bSelectCopy = bNewValue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -3025,9 +2996,11 @@ static HB_BOOL hb_gt_wvt_SetKeyCP( PHB_GT pGT, const char * pszTermCDP, const ch
|
||||
cdpHost = hb_cdpFind( pszHostCDP );
|
||||
|
||||
for( i = 0; i < 256; i++ )
|
||||
{
|
||||
pWVT->keyTransTbl[ i ] = ( HB_BYTE )
|
||||
hb_cdpTranslateChar( i, HB_FALSE, cdpTerm, cdpHost );
|
||||
pWVT->inCDP = cdpTerm;
|
||||
}
|
||||
pWVT->fKeyTrans = HB_TRUE;
|
||||
}
|
||||
# endif
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
#include "hbvm.h"
|
||||
#include "hbthread.h"
|
||||
#include "hbgfxdef.ch"
|
||||
#include "hbwinuni.h"
|
||||
|
||||
#include <windows.h>
|
||||
#if defined( HB_OS_WIN_CE )
|
||||
@@ -151,10 +152,12 @@ typedef struct
|
||||
HWND hWnd; /* the window handle */
|
||||
HB_BOOL fInit; /* logical variable indicating that window should be open */
|
||||
|
||||
PHB_CODEPAGE hostCDP; /* Host/HVM CodePage for unicode output translations */
|
||||
PHB_CODEPAGE inCDP; /* Host/HVM CodePage for unicode input translations */
|
||||
#if defined( UNICODE )
|
||||
PHB_CODEPAGE inCDP; /* Host/HVM CodePage for unicode input translations */
|
||||
PHB_CODEPAGE hostCDP; /* Host/HVM CodePage for unicode output translations */
|
||||
PHB_CODEPAGE boxCDP; /* CodePage for legacy drawing chars: IBM437 */
|
||||
#else
|
||||
HB_BOOL fKeyTrans; /* logical variable indicating that CP key translation is enabled */
|
||||
#endif
|
||||
|
||||
#if !defined( UNICODE )
|
||||
@@ -165,6 +168,9 @@ typedef struct
|
||||
HICON hIcon; /* Title Bar and Task List icon. Can be NULL. */
|
||||
HB_BOOL bIconToFree; /* Do we need to free this icon when it's not NULL? */
|
||||
|
||||
void * hWindowTitle;
|
||||
LPCTSTR lpWindowTitle;
|
||||
|
||||
int CodePage; /* Code page to use for display characters */
|
||||
#if ! defined( UNICODE )
|
||||
int boxCodePage; /* Code page to use for display draw line characters */
|
||||
@@ -175,19 +181,22 @@ typedef struct
|
||||
|
||||
HB_BOOL IgnoreWM_SYSCHAR;
|
||||
|
||||
HB_BOOL bResizable;
|
||||
HB_BOOL bClosable;
|
||||
|
||||
HB_BOOL bMaximized; /* Flag is set when window has been maximized */
|
||||
HB_BOOL bBeingMarked; /* Flag to control DOS window like copy operation */
|
||||
HB_BOOL bBeginMarked;
|
||||
|
||||
HB_BOOL bResizable;
|
||||
HB_BOOL bSelectCopy;
|
||||
char * pszSelectCopy;
|
||||
HB_BOOL bClosable;
|
||||
void * hSelectCopy;
|
||||
LPCTSTR lpSelectCopy;
|
||||
|
||||
int ResizeMode; /* Sets the resizing mode either to FONT or ROWS */
|
||||
RECT sRectNew;
|
||||
RECT sRectOld;
|
||||
|
||||
int ResizeMode; /* Sets the resizing mode either to FONT or ROWS */
|
||||
|
||||
HB_BOOL bResizing;
|
||||
HB_BOOL bAlreadySizing;
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ proc main( cdp, info, unicode )
|
||||
#ifdef __HARBOUR__
|
||||
/* for test */
|
||||
set( _SET_CODEPAGE, iif( empty( cdp ), "PLMAZ", upper( cdp ) ) )
|
||||
hb_setTermCP( set( _SET_CODEPAGE ), set( _SET_CODEPAGE ) )
|
||||
lEqual := .t.
|
||||
#else
|
||||
lEqual := .f.
|
||||
|
||||
Reference in New Issue
Block a user