Página 1 de 2
No exported method: PROPS2ARR (Faltou oFont pro browse)
Enviado: 26 Out 2021 20:36
por JoséQuintas
Código: Selecionar todos
Error BASE/1004 No exported method: PROPS2ARR
Called from PROPS2ARR(0)
Called from HBROWSE:EDIT(1837)
Called from HBROWSE:BUTTONDBL(1757)
Called from HBROWSE:ONEVENT(423)
Called from HWG_ACTIVATEMAINWINDOW(0)
Called from HMAINWINDOW:ACTIVATE(400)
Called from HWGUIBROWSE(56)
Called from PTESHWGUI(17)
Called from DOPRG(139)
Called from (b)RUNMODULE(115)
Como sair do browse com ENTER, sem entrar no modo de edição?
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 01:07
por alxsts
Olá!
Se entendi bem, são coisas mutuamente exclusivas. Se você teclar enter em um browse, é porque ele tem o foco e vai poder detectar o enter no evento keyPress. Normalmente, se o browse não estiver vazio, enter serve para selecionar a linha sobre a qual foi detectado o enter. Se quiser tratar a linha ou sair do browse, é só tratar isto no evento keyPress...
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 06:20
por JoséQuintas
alxsts escreveu: vai poder detectar o enter no evento keyPress
a evento keypress, se refere a keydown?
Código: Selecionar todos
oBrowse:bKeyDown := { | o, key | oBrowseKey( o, key, @cText ) }
oBrowse:bEnter := { || oBrowse:oParent:Close() }
ACTIVATE WINDOW oDlgPesquisa
RETURN NIL
STATIC FUNCTION oBrowseKey( oBrowse, nKey, cText )
DO CASE
CASE nKey == K_ENTER .OR. nKey = K_ESC
oBrowse:oParent:Close()
CASE nKey == K_BS
CASE nKey == K_F5 .AND. OrdCount() > 1 .AND. lCanChangeOrder
CASE nKey == K_ALT_L .OR. nKey == K_CTRL_L .OR. nKey == K_ALT_T
CASE nKey == K_ALT_F
ENDCASE
HB_SYMBOL_UNUSED( cText )
RETURN .T.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 10:17
por JoséQuintas
Esqueci de mencionar:
Isso que postei já está no fonte, mas dá erro assim mesmo.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 10:43
por alxsts
Olá!
O caminho é este mas, na HwGUI, o teste de teclas é diferente. Veja:
Código: Selecionar todos
FUNCTION Teste()
LOCAL oForm, aArray := {}, oBr
INIT DIALOG oForm TITLE "Teste" AT 374,216 SIZE 778,425;
FONT HFont():Add( "Verdana",0,-13,400,,,) CLIPPER NOEXIT STYLE DS_CENTER + WS_VISIBLE + WS_CAPTION + WS_SYSMENU ICON NIL
@ 006,005 BROWSE oBr ARRAY SIZE 770,400 FONT HFont():Add( '',0,-13,400,,,) AUTOEDIT STYLE WS_TABSTOP+WS_VSCROLL+WS_HSCROLL ;
oBr:bKeyDown := {|o,oForm| oBr_KeyPress(o, oForm) }
...
RETURN NIL
//---------------------------------------------------------------------------------------------------------------------------------------
STATIC FUNCTION oBr_KeyPress(o, oForm )
If GetKeyState(VK_RETURN,.F.,.T.) < 0
oForm:close()
Endif
RETURN .T.
//---------------------------------------------------------------------------------------------------------------------------------------
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 10:47
por Itamar M. Lins Jr.
Olá!
Este método está em \source\winapi\drawidg.prg
Código: Selecionar todos
*
Returns an array with font properties (for creating a copy of a font entry)
Copy sample
apffrarr := oFont1:Props2Arr()
oFont2 := HFont():Add( apffrarr[1], apffrarr[2], apffrarr[3], apffrarr[4], apffrarr[5], ;
apffrarr[6], apffrarr[7], apffrarr[8] )
*/
METHOD Props2Arr() CLASS HFont
// fontName, nWidth, nHeight , fnWeight, fdwCharSet, fdwItalic, fdwUnderline, fdwStrikeOut
// 1 2 3 4 5 6 7 8
LOCAL fontName , nWidth , nHeight , fnWeight , fdwCharSet , fdwItalic , fdwUnderline , fdwStrikeOut
LOCAL aFontprops := {}
fontName := iif( ::name == NIL , "<Empty>", ::name )
nWidth := iif( ::width == Nil, - 9999 , ::width )
nHeight := iif( ::height == NIL , - 9999 , ::height )
fnWeight := iif( ::weight == Nil, - 9999 , ::weight )
fdwCharSet := iif( ::CharSet == Nil, - 9999 , ::CharSet )
fdwItalic := iif( ::Italic == Nil, - 9999 , ::Italic )
fdwUnderline := iif( ::Underline == Nil, - 9999 , ::Underline )
fdwStrikeOut := iif( ::StrikeOut == Nil, - 9999 , ::StrikeOut )
AADD (aFontprops, fontName) && C
AADD (aFontprops, nWidth) && all other of type N
AADD (aFontprops, nHeight)
AADD (aFontprops, fnWeight)
AADD (aFontprops, fdwCharSet)
AADD (aFontprops, fdwItalic)
AADD (aFontprops, fdwUnderline)
AADD (aFontprops, fdwStrikeOut)
RETURN aFontprops
Portanto deve-se ativar esse método para ser visto ai na classe ARRAY... Não sei fazer... E não tenho certeza se é isso. Mas é o que estou entendendo.
Saudações,
Itamar M. Lins Jr.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 12:13
por JoséQuintas
Itamar M. Lins Jr. escreveu:Portanto deve-se ativar esse método para ser visto ai na classe ARRAY... Não sei fazer... E não tenho certeza se é isso. Mas é o que estou entendendo.
Como assim? seus browses não tem ENTER ?
Se tem, então mesmo assim pode ter ajudado, pode ser a falta da MAIN() fornecendo defaults pra tudo.
alxsts escreveu:O caminho é este mas, na HwGUI, o teste de teclas é diferente. Veja:
oBr:bKeyDown := {|o,oForm| oBr_KeyPress(o, oForm) }
...
STATIC FUNCTION oBr_KeyPress(o, oForm )
If GetKeyState(VK_RETURN,.F.,.T.) < 0
oForm:close()
Endif
RETURN .T.
Discordo totalmente.
Motivo 1: GetKeyState() aqui nem existe, graças ao Viktor, no 3.4 ela está renomeada pra wapi_GetKeyState(), portanto NÃO FAZ PARTE DE HWGUI.
Motivo 2:
Código: Selecionar todos
oBrowse:bKeyDown := { | o, key | oBrowseKey( o, key ) }
...
STATIC FUNCTION oBrowseKey( oBrowse, nKey )
MsgExclamation( Transform( nKey, "" ) )

- nkey.png (6.55 KiB) Exibido 1946 vezes
Por enquanto não sei se hb_KeyStd( nKey ) resolve a diferença de teclas, porque nesse caso não houve diferença.
Em todo caso, testar acrescentando a janela nos parâmetros.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 12:17
por Itamar M. Lins Jr.
Olá!
Como assim? seus browses não tem ENTER ?
Tem, mas o browse array não é o mesmo browse DBF.
Não tem esse erro com a ausência do método props2arr.
Não tem nada a ver com ENTER ou qualquer outra tecla, a Hwgui (windows) controla todas.
Saudações,
Itamar M. Lins Jr.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 12:20
por alxsts
Olá!
JoséQuintas escreveu:portanto NÃO FAZ PARTE DE HWGUI
Use hwg_Getkeystate( nKey ) (Windows only)
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 12:26
por Itamar M. Lins Jr.
Olá!
O Alexander me ensinou a usar assim:
Código: Selecionar todos
oBrw:bOther := {|oBrw, msg, wParam, lParam| fKeyDown(oBrw, msg, wParam, lParam )
Static FUNCTION fKeyDown(oBrw, msg, wParam, lParam)
LOCAL nKEY := hwg_PtrToUlong( wParam ))
IF msg == WM_KEYDOWN
If nKey == VK_ESCAPE
...
IF nKey == VK_RETURN
...
ENDIF
ENDIF
//Meus browses uso pesquisa letra a letra já no automático.
IF msg == WM_CHAR
If nKey = VK_ESCAPE
hwg_EndDialog()
RETURN .F.
ElseIf nKey == VK_BACK
If len(cPesq) > 0
cPesq := substr(cPesq,1,len(cPesq)-1)
RefoBrw('eq',oBrw,cPesq)
EndIf
RETURN .F.
ENDIF
IF nKey = VK_RETURN .OR. nKey = VK_TAB
RETURN .F.
ENDIF
cPesq += chr(nKey)
RefoBrw('eq',oBrw,cPesq)
EndIf
Saudações,
Itamar M. Lins Jr.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 12:57
por JoséQuintas
Código: Selecionar todos
SYSTEM ERROR
Error BASE/1004 No exported method: PROPS2ARR
Called from PROPS2ARR(0)
Called from HBROWSE:EDIT(1837)
Called from HBROWSE:BUTTONDBL(1757)
Called from HBROWSE:ONEVENT(423)
Called from HWG_ACTIVATEMAINWINDOW(0)
Called from HMAINWINDOW:ACTIVATE(400)
Called from HWGUIBROWSE(39)
Called from PTESHWGUI(17)
Called from DOPRG(139)
Called from (b)RUNMODULE(115)
Pelo que eu entendo disso, está tentando EDITAR.
Código: Selecionar todos
#xcommand @ <x>,<y> BROWSE [ <oBrw> ] ;
[ <lArr: ARRAY> ] ;
[ <lDb: DATABASE> ] ;
[ OF <oWnd> ] ;
[ ID <nId> ] ;
[ SIZE <width>, <height> ] ;
[ ON INIT <bInit> ] ;
[ ON SIZE <bSize> ] ;
[ ON PAINT <bDraw> ] ;
[ ON CLICK <bEnter> ] ;
[ ON RIGHTCLICK <bRClick> ];
[ ON GETFOCUS <bGfocus> ] ;
[ ON LOSTFOCUS <bLfocus> ] ;
[ STYLE <nStyle> ] ;
[ <lNoVScr: NO VSCROLL> ] ;
[ <lNoBord: NOBORDER> ] ;
[ FONT <oFont> ] ;
[ <lAppend: APPEND> ] ;
[ <lAutoedit: AUTOEDIT> ] ;
[ ON UPDATE <bUpdate> ] ;
[ ON KEYDOWN <bKeyDown> ] ;
[ ON POSCHANGE <bPosChg> ] ;
[ <lMulti: MULTISELECT> ] ;
Pelo que entendo disso, só vai editar se colocar AUTOEDIT.
Resolvida uma parte, referente ao ENTER.
Agora falta resolver o CLICK, isto não resolveu
Código: Selecionar todos
@ 1, 1 BROWSE ARRAY oBrowse ;
SIZE AppWidth() - 10, AppHeight() - 10 STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL ;
ON CLICK { || hwg_EndWindow( oDlgPesquisa ) }
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 13:01
por JoséQuintas
Código: Selecionar todos
FUNCTION HwguiBrowse( cTitle, cnSQL, oBrowseList )
LOCAL oDlgPesquisa, oBrowse
INIT WINDOW oDlgPesquisa TITLE cTitle AT 9, 0 SIZE AppWidth(), AppHeight()
//INIT DIALOG oDlgPesquisa AT 0, 0 SIZE AppWidth() , AppHeight() TITLE "Browse do arquivo " + Alias()
@ 1, 1 BROWSE ARRAY oBrowse ;
SIZE AppWidth() - 10, AppHeight() - 10 STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL ;
ON CLICK { || hwg_EndWindow( oDlgPesquisa ) }
oBrowse:aArray := cnSQL
BrowseSet( oBrowse, oBrowseList, oDlgPesquisa )
//ACTIVATE DIALOG oDlgPesquisa
ACTIVATE WINDOW oDlgPesquisa
RETURN Nil
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 13:04
por JoséQuintas
Configuração do browse:
Código: Selecionar todos
FUNCTION BrowseSet( oBrowse, oBrowseList, oWindow )
LOCAL oElement
oBrowse:bSkip := { | o, nSkip | ADOSkipper( o:aArray, nSkip ) }
oBrowse:bGotop := { | o | o:aArray:MoveFirst() }
oBrowse:bGobot := { | o | o:aArray:MoveLast() }
oBrowse:bEof := { | o | o:nCurrent > o:aArray:RecordCount() }
oBrowse:bBof := { | o | o:nCurrent == 0 }
oBrowse:bRcou := { | o | o:aArray:RecordCount() }
oBrowse:bRecno := { | o | o:aArray:AbsolutePosition() }
oBrowse:bRecnoLog := oBrowse:bRecno
oBrowse:bGOTO := { | o, n | (o), o:aArray:Move( n - 1, 1 ) }
FOR EACH oElement IN oBrowseList
ADD COLUMN oElement[ 2 ] TO oBrowse HEADER oElement[ 1 ] LENGTH Int( Len( Transform( Eval( oElement[ 2 ] ), "" ) ) * 1.2 ) + 1
NEXT
oBrowse:bKeyDown := { | o, key | oBrowseKey( o, key ) }
oBrowse:bEnter := { || hwg_EndWindow( oWindow ) }
RETURN Nil
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 13:05
por JoséQuintas
Configuração de teclas, que no momento não tem efeito.
Código: Selecionar todos
STATIC FUNCTION oBrowseKey( oBrowse, nKey, oWindow )
(oBrowse)
nKey := hb_KeyStd( nKey )
MsgExclamation( Transform( nKey, "" ) )
DO CASE
CASE hb_KeyStd( nKey ) == K_ENTER // .OR. nKey = K_ESC
hwg_EndWindow( oWindow )
RETURN .F.
CASE nKey == K_BS
CASE nKey == K_F5 // .AND. OrdCount() > 1 .AND. lCanChangeOrder
CASE nKey == K_ALT_L .OR. nKey == K_CTRL_L .OR. nKey == K_ALT_T
CASE nKey == K_ALT_F
ENDCASE
RETURN .T.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 13:14
por JoséQuintas
Correção:
bENTER não resolveu nada.
Ao bloquear o nKey == K_ENTER não fechou mais.
Removi o bENTER e deixei só a função de teclas, e ok pra fechar no ENTER.
Ficou pendente o CLICK.
Tentar entender porque entrou na rotina EDIT.