Toledo escreveu:Então a única saída neste caso é pressionar a tecla CTRL e fazer a seleção das linhas que você quer
Esquece o que eu disse... isto também não dá certo! Então coloquei um outro botão para ver o código em uma outra janela (PopUp), ai você pode selecionar e copiar as linhas que você quiser.
Bom, já terminei as alterações desta nova tag, acho que não está faltando mais nada.
* FUNCTAB.PRG
Static Tab_Numero := 0 // Num.Tab Atual
Static Tab_List := {} // Array com as Tabs
Static Tab_Conf := {0,0,20,70,{}} // Config.Tabs
Static Tab_Edit := .f. // Se pode editar
Static Tab_NoTab := {} // Gets Fora da Tab
#define K_MOUSELEFT 1002
Function TabBegin(nLini,nColi,nLinf,nColf)
nLini := iif(nLini==NIL,0,nLini)
nColi := iif(nColi==NIL,0,nColi)
nLinf := iif(nLinf==NIL,MaxRow(),nLinf)
nColf := iif(nColf==NIL,MaxCol(),nColf)
Tab_List := {}
Tab_Numero := 0
Tab_Conf := {nLini,nColi,nLinf,nColf,{}}
Tab_NoTab := {}
return NIL
Function NewTab(cNome)
aadd(Tab_List, {} )
Tab_Numero := Len(Tab_List)
cNome := iif(cNome==NIL,"Tab"+Str(Len(Tab_List),1),cNome)
if Len(cNome) < 5
cNome := Pad(cNome,5)
endif
aadd(Tab_Conf[5],cNome)
return NIL
Function PageEnd()
Tab_Numero := Tab_Numero - 1
return NIL
Function Label( mLinha,mColuna,mTexto )
local oGet
oGet := GetNew( mLinha,mColuna,&([{|x|"]+mTexto+["}]),NIL,,,)
If Tab_Numero == 0
aadd( Tab_NoTab, oGet )
Else
oGet:Row := oGet:Row + Tab_Conf[1]+3
oGet:Col := oGet:Col + Tab_Conf[2]+1
oGet:PreBlock := { |x| .f. }
oGet:Tag := {Tab_Numero,.f.}
aadd( Tab_List[ Tab_Numero ], oGet )
Endif
return NIL
Function TextBox(oGet)
If Tab_Numero == 0
aadd( Tab_NoTab, oGet)
Else
oGet:Row := oGet:Row + Tab_Conf[1]+3
oGet:Col := oGet:Col + Tab_Conf[2]+1
aadd( Tab_List[ Tab_Numero ], oGet )
Endif
return NIL
Function ReadTabs()
Local cColor, cTexto, nCont, nColTab, nKey
Private aMouseHot := {}
Tab_Numero := 1
cColor := SetColor()
do while .t.
aMouseHot := {}
@ Tab_Conf[1]+2, Tab_Conf[2] to Tab_Conf[3], Tab_Conf[4]
nColTab := Tab_Conf[2]+1
for nCont = 1 to Len(Tab_List)
if nCont == Tab_Numero
set key -(19+nCont) to
else
set key -(19+nCont) to MudaTab
endif
cTexto := Tab_Conf[5,nCont]
@ Tab_Conf[1], nColTab to Tab_Conf[1]+1, nColTab+Len(cTexto)+1
@ Tab_Conf[1]+1, nColTab say Chr(179)+cTexto+Chr(179)
if nCont == Tab_Numero
@ Tab_Conf[1]+2, nColTab say Chr(217)+Space(Len(cTexto))+Chr(192)
endif
if Tab_Numero == nCont
set color to N/W
endif
@ Tab_Conf[1]+1, nColTab+1 say cTexto
aadd(aMouseHot,{Tab_Conf[1]+1,nColTab+1,Tab_Conf[1]+1,nColTab+Len(cTexto),-19+nCont})
nColTab := nColTab+Len(cTexto)+2
set color to (cColor)
next
Scroll(Tab_Conf[1]+3,Tab_Conf[2]+1,Tab_Conf[3]-1,Tab_Conf[4]-1,0)
GetList := {}
// GetList := Tab_List[Tab_Numero]
For nCont = 1 To Len(Tab_NoTab)
aadd(GetList,Tab_NoTab[nCont])
Next
For nCont = 1 To Len(Tab_List[Tab_Numero])
aadd(GetList, Tab_List[Tab_Numero][nCont])
Next
for nCont = 1 to Len(GetList)
GetList[nCont]:Display()
next
if Tab_Edit
read
nKey := 0
else
clear gets
nKey := MyInkey(0)
endif
if LastKey() == 27
exit
elseif LastKey() == 5
if Tab_Numero > 1
Tab_Numero := Tab_Numero - 1
endif
elseif nKey == K_MOUSELEFT
for nCont = 1 to Len(aMouseHot)
if MouseRow() >= aMouseHot[nCont,1] .and. ;
MouseCol() >= aMouseHot[nCont,2] .and. ;
MouseRow() <= aMouseHot[nCont,3] .and. ;
MouseRow() <= aMouseHot[nCont,4]
Tab_Numero := nCont // KeyBoard Chr(aMouseHot[nCont,5])
endif
next
elseif LastKey() != 23 .and. LastKey() > 0
Tab_Numero := Tab_Numero + 1
if Tab_Numero > Len(Tab_List)
exit
endif
endif
enddo
Tab_List := {}
for nCont = 1 to Len(Tab_List)
set key -(19+nCont) to
next
return NIL
Function MudaTab()
Tab_Numero := Abs(LastKey())-19
clear gets
return NIL
Function TabEdit(lDigita)
Local nReturn
nReturn := Tab_Edit
If lDigita != NIL
Tab_Edit := lDigita
Endif
Return nReturn
Function MouseToTecla(nKey)
local nCont
if Type("aMouseHot") != "A"
aMouseHot := {}
endif
for nCont = 1 to Len(aMouseHot)
if MouseRow() >= aMouseHot[nCont,1] .and. ;
MouseCol() >= aMouseHot[nCont,2] .and. ;
MouseRow() <= aMouseHot[nCont,3] .and. ;
MouseCol() <= aMouseHot[nCont,4]
nKey := aMouseHot[nCont,5]
Tab_Numero := nCont
KeyBoard Chr(23)
endif
next
return nKey
/* oGet := GetNew( 10, 10, {|x| "OLA MUNDO"},;
// NIL, "@R (999)999-9999", "N/BG, W+/BG" )
// oGet := GetNew( 10, 10, {|x| IF(x == NIL, cVar, cVar := x)},;
// "cVar", "@R (999)999-9999", "N/BG, W+/BG" )
// Function GetNew2( nRow, nCol, bVar, cValue, cPict, cColor, bWhen, bValid )
// Local oGet
// cValue := iif( bVar == NIL, Eval(bVar), cValue )
// bWhen := iif( bWhen == NIL, {||.t.}, bWhen )
// bValid := iif( bValid == NIL, {||.t.}, bValid )
// oGet := GetNew( nRow, nCol, bVar, cValue, cPict, cColor )
// oGet:PreBlock := bWhen
// oGet:PostBlock := bValid
// return oGet */
Pessoal, dê a sua opinião... tá bom assim?
Abraços,