Página 1 de 2
textbox date
Enviado: 29 Jul 2023 16:18
por JoséQuintas
Eu tento não reclamar, mas é difícil...
É só olhar exemplo...
Coloquei DATE igual no exemplo, e não aceita.
Vamos olhar na IDE.
Legal, resolvido.
d:\github\dlgauto\source>HBMK2 hmge.hbc -w3 -es2 -m -n *.hbp -strip -compr -workdir=c:\temp -q -Id:\fontes\build\
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
Harbour 3.2.0dev (r2307062207)
Copyright (c) 1999-2021,
https://harbour.github.io/
dlg_createedit.prg(126) Error E0030 Syntax error "syntax error at '@'"
dlg_createedit.prg(137) Error E0030 Syntax error "syntax error at '@'"
dlg_createedit.prg(149) Error E0030 Syntax error "syntax error at '@'"
3 errors
E agora ? olho aonde ?
É fácil dizer pra olhar exemplo, dizer que tem muito exemplo, que tem IDE, mas e quando nenhum deles ajuda ?
Talvez olhar no fonte da LIB, a InputWindow() ?
Pois é... não é tão simples assim começar do zero.
Quem não sabe, acaba sabendo menos ainda.
O que criei, estilo gerador, é justamente pra coisas desse tipo não fazerem desanimar.
É porque estou usando automático?
ÓTIMO
Isso já resolve pipinos que poderia ter depois.
Mas vamos em frente, de um jeito ou de outro, deve ter alguma saída, e ela vai acabar aparecendo.
Dá pra ir vendo outras coisas.
Alguma idéia ?
Nota: só acrescentei o DATE ou NUMERIC ou CHARACTER, já tentei com mudança de ordem. PARENT ou OF são equivalentes
textbox date
Enviado: 29 Jul 2023 16:37
por JoséQuintas
Código: Selecionar todos
DO CASE
CASE aItem[ CFG_FTYPE ] == "N"
aItem[ CFG_TOBJ ] := "Text" + Ltrim( Str( aItem:__EnumIndex ) )
@ nRow2, nCol2 TEXTBOX ( aItem[ CFG_TOBJ ] ) ;
PARENT ( ::oDlg ) ;
HEIGHT 20 ;
WIDTH aItem[ CFG_FLEN ] * 12 ;
NUMERIC ;
VALUE aItem[ CFG_VALUE ] ;
MAXLENGTH aItem[ CFG_FLEN ] ;
FONT "verdana" SIZE 12 ;
ON CHANGE Nil
CASE aItem[ CFG_FTYPE ] == "D"
aItem[ CFG_TOBJ ] := "Text" + Ltrim( Str( aItem:__EnumIndex ) )
@ nRow2, nCol2 TEXTBOX ( aItem[ CFG_TOBJ ] ) ;
PARENT ( ::oDlg ) ;
HEIGHT 20 ;
WIDTH aItem[ CFG_FLEN ] * 12 ;
; // DATE .T. ;
VALUE aItem[ CFG_VALUE ] ;
MAXLENGTH aItem[ CFG_FLEN ] ;
FONT "verdana" SIZE 12 ;
ON CHANGE Nil
OTHERWISE
aItem[ CFG_TOBJ ] := "Text" + Ltrim( Str( aItem:__EnumIndex ) )
@ nRow2, nCol2 TEXTBOX ( aItem[ CFG_TOBJ ] ) ;
PARENT ( ::oDlg ) ;
HEIGHT 20 ;
WIDTH aItem[ CFG_FLEN ] * 12 ;
; // CHARACTER ;
VALUE aItem[ CFG_VALUE ] ;
MAXLENGTH aItem[ CFG_FLEN ] ;
FONT "verdana" SIZE 12 ;
UPPERCASE ;
ON CHANGE Nil
ENDCASE
NUMERIC aceitou antes do VALUE.
Os outros ainda não.
textbox date
Enviado: 29 Jul 2023 21:56
por ivanil
Olá Quintas,
No ide tem o wizard, use uma tabela com todos os tipos de dados depois use o código gerado para seu protótipo.
Tudo é mais simples que parece.
textbox date
Enviado: 29 Jul 2023 23:00
por JoséQuintas
Praticamente foi o que eu fiz.
Mas não aceitou.
O que não testei foi compilar o fonte da IDE pra ver se a IDE tá falando a verdade.
textbox date
Enviado: 29 Jul 2023 23:28
por ivanil
Use a minha IDE, a que você está usando não tem o wizard.
textbox date
Enviado: 29 Jul 2023 23:51
por JoséQuintas
É complicado, parece que a minigui faz de tudo pro programador desistir.
textbox date
Enviado: 30 Jul 2023 09:21
por JoséQuintas
Resolvido, deixei pra entender depois.
textbox date
Enviado: 30 Jul 2023 23:17
por ivanil
É complicado, parece que a minigui faz de tudo pro programador desistir.
Como você já viu, ha duas sintaxes para minigui, você esta usando a alternativa e minha preferida, pois você consegue deixar o código enxuto e com uma aparência muito melhor segundo meu ponto de vista.
Seu código está com erros de sintaxe bem aparente, teoricamente misturou as 2 formas ja que não forneceu o valor as propriedades;
Para entender mais a fundo é bom visitar os includes.
na escrita convencional:
@ ... NUMERIC, o include entende que o controle é NUMERIC, então não tem valor ;
Na escrita alternativa, todas as propriedades devem ter um valor, você deixou algumas em branco.
Mencionei acima a possibilidade de enxugar código, veja abaixo uma forma mais curta de seu código
Define TEXTBOX (aItem[CFG_...])
Parent ...
...
NUMERIC aItem[CFG_FTYPE]=="N"
DATE aItem[CFG_FTYPE]=="D"
End TEXTOX
Perceba também que maxlength é para os textbox do tipo carácter, para os numéricos você deveria usar Mascara INPUTMASK, para os campos tipo Date tem um controle mais elegante e cheio de recursos,
Boa sorte no seu projeto.
textbox date
Enviado: 31 Jul 2023 09:35
por JoséQuintas
ivanil escreveu:Mencionei acima a possibilidade de enxugar código, veja abaixo uma forma mais curta de seu código
Define TEXTBOX (aItem[CFG_...])
Parent ...
...
NUMERIC aItem[CFG_FTYPE]=="N"
DATE aItem[CFG_FTYPE]=="D"
End TEXTOX
Pra harbour seria normal, mas quem disse que a LIB aceita isso?
Harbour 3.2.0dev (r2307062207)
Copyright (c) 1999-2021,
https://harbour.github.io/
frm_CreateEdit.prg(128) Error E0030 Syntax error "syntax error at 'AITEM'"
Harbour 3.2.0dev (r2307062207)
Copyright (c) 1999-2021,
https://harbour.github.io/
frm_CreateEdit.prg(128) Error E0021 Incorrect number of arguments in DATE
Passed: 1, expected: 0
1 error
Pois é, você, programador experiente em minigui, caiu nas "pegadinhas" dela, coisa que deveria funcionar mas não funciona.
textbox date
Enviado: 31 Jul 2023 10:04
por JoséQuintas
Pronto.
Postei minha rotina nos grupos OOHG e MINIGUI.
Incluindo os #ifdef pra chamar a atenção do troço que inventei, que serve pra testar tudo de uma vez.
No momento o fonte é válido pras duas LIBs, então, tem tudo a ver.
textbox date
Enviado: 31 Jul 2023 10:22
por ivanil
Olá Quintas,
Funciona normalmente, não ha pegadinha.
Apenas corrija o código conforme indicado...
Se for usar a sintaxe convencional, tire o valor da propriedade, não existe NUMERIC .T., o proprio NUMERIC é o indicador que o TEXTBOX é NUMERIC
se for usar a forma alternativa, toda a propriedade deve ter um valor, pois o criador do objeto é o "END TEXTBOX"
Grande abraço.
textbox date
Enviado: 31 Jul 2023 10:28
por JoséQuintas
O código está sendo compilado normalmente.
Código: Selecionar todos
DO CASE
CASE aItem[ CFG_FTYPE ] == "N"
aItem[ CFG_TOBJ ] := "Text" + Ltrim( Str( aItem:__EnumIndex ) )
DEFINE TEXTBOX ( aItem[ CFG_TOBJ ] )
PARENT ( ::oDlg )
ROW nRow2
COL nCol2
HEIGHT 20
WIDTH aItem[ CFG_FLEN ] * 12
FONTNAME "verdana"
NUMERIC .T.
VALUE aItem[ CFG_VALUE ]
MAXLENGTH aItem[ CFG_FLEN ]
ON CHANGE Nil
END TEXTBOX
CASE aItem[ CFG_FTYPE ] == "D"
aItem[ CFG_TOBJ ] := "Text" + Ltrim( Str( aItem:__EnumIndex ) )
DEFINE TEXTBOX ( aItem[ CFG_TOBJ ] )
PARENT ( ::oDlg )
ROW nRow2
COL nCol2
HEIGHT 20
WIDTH aItem[ CFG_FLEN ] * 12
DATE .T.
VALUE aItem[ CFG_VALUE ]
END TEXTBOX
OTHERWISE
aItem[ CFG_TOBJ ] := "Text" + Ltrim( Str( aItem:__EnumIndex ) )
DEFINE TEXTBOX ( aItem[ CFG_TOBJ ] )
PARENT ( ::oDlg )
ROW nRow2
COL nCol2
HEIGHT 20
WIDTH aItem[ CFG_FLEN ] * 12
FONTNAME "verdana"
VALUE aItem[ CFG_VALUE ]
MAXLENGTH aItem[ CFG_FLEN ]
END TEXTBOX
ENDCASE
Mas se colocar NUMERIC e DATE juntos dá erro.
textbox date
Enviado: 31 Jul 2023 14:53
por ivanil
Código: Selecionar todos
#include <hmg.ch>
Function Main( )
Local aStr,a,nRow:=10,cLabel,cContr,cField,cMasc
DbCreate("Test",{{"Codigo","N",5,0},{"Data","D",8,0},{"dataHora","T",8,0},{"Descricao","C",30,0},{"ativo","L",1,0},{"valor","N",12,4}})
use Test alias t shared new
T->(DbAppend())
T->Codigo := 1
T->Data := ctod("01/07/2023")
T->dataHora:= hb_DateTime()
T->Descricao:="Test1"
T->ativo := TRUE
aStr:=T->(DbStruct())
DEFINE WINDOW MAIN AT 265.5000,660.0000 WIDTH 600 HEIGHT 549 TITLE "" MAIN
For each a in aStr
cLabel:="lbl"+a[1]
cContr:="ctr"+a[1]
cField:="T->"+a[1]
@ nRow,10 Label &cLabel width 100 height 20 value a[1]+"-"+a[2] Rightalign
Do case
case a[2] $"D,@"
DEFINE DATEPICKER &cContr
COL 120
ROW nRow
FIELD &cField
WIDTH 120
TOOLTIP "Field "+a[1]
RANGEMIN Date()-30
RANGEMAX Date()+90
SHOWNONE .T.
UPDOWN .T.
if a[2]="D"
DATEFORMAT 'dd/MMM/yyyy'
else
DATEFORMAT 'dd/MMM/yyyy hh:mm:ss'
WIDTH 160
endif
END DATEPICKER
case a[2] $"N,C"
DEFINE TEXTBOX &cContr
COL 120
ROW nRow
FIELD &cField
WIDTH 120
TOOLTIP "Field "+a[1]
if a[2]="N"
NUMERIC TRUE
cMasc:=Replicate("9",a[3])
if a[4]>0
cMasc := StrTran(Transform(val(cMasc),"@e 999,999,999,999"),".",",")+"."+replicate("9",a[4])
FORMAT "E"
endif
INPUTMASK cMasc
else
MAXLENGTH a[3]
endif
END TEXTBOX
case a[2]="L"
DEFINE CHECKBOX &cContr
COL 120
ROW nRow
FIELD &cField
TOOLTIP "Field "+a[1]
TRANSPARENT TRUE
END CHECKBOX
Endcase
nRow += 30
Next
END WINDOW
Main.Center
Main.activate()
REturn .T.
textbox date
Enviado: 31 Jul 2023 15:53
por JoséQuintas
Código: Selecionar todos
DEFINE DATEPICKER &cContr
COL 120
ROW nRow
FIELD &cField
WIDTH 120
TOOLTIP "Field "+a[1]
RANGEMIN Date()-30
RANGEMAX Date()+90
SHOWNONE .T.
UPDOWN .T.
if a[2]="D"
DATEFORMAT 'dd/MMM/yyyy'
else
DATEFORMAT 'dd/MMM/yyyy hh:mm:ss'
WIDTH 160
endif
END DATEPICKER
Isso é outra coisa que eu não sabia, sobre poder usar um IF no meio do comando.
Nem sei se existe exemplo disso, mas se existir, dificilmente iria encontrar.
Mas falta o teste prático, só acredito vendo kkkk
textbox date
Enviado: 31 Jul 2023 16:45
por ivanil
o fonte esta completo... so compilar...