Página 1 de 2

Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 11 Mai 2010 01:47
por Dr.Microso
Olá, caríssimos!!!

BioTech é um programa em MS-DOS (caso tb já conheça) que apresenta algumas implementações avançadas comuns à linguagens visuais como o Tabbed-Page ou Folder todavia operando in ASCII mode, que a princípio recusei-me à acreditar que era Clipper.
Porém a chamada do executável com a switch //info , veio a comprovar: CA-Clipper 5.2.
E foi o máximo onde fui, nem pude usar o teclado porque o software trabalha com dados sigilosos, então cópia do executável para um provável desmonte só de 2 jeitos: de jeito maneira e de jeito nenhum...

O assunto já foi abordado aqui como TabStrip pelo colega Pablo César que inclusive nos deixou uma contribuição bakana, mas o tal programa me deixou intrigado, justamente por possuir características idênticas (inclusive texto na orientaçao vertical) a da classe rFolder para FiveWin postada aqui desenvolvida pelo Ricardo Moura Marques, o que me leva a crer devida a semelhança, ser portada por uma LIB (mas qual???), que achei o maior tesão, porque embora já use xHarbour+FiveWin, tenho aplicativos em Clipper que não podem sofrer migração ainda por razões muito particulares.

Alguém aqui já teve contato com este software ou programa que apresentasse este tipo de controle?
Se tiver esta LIB (pode ser parecida tb) tenho muito interesse por causa das abas em multi-linhas.

Grato antecipadamente.

Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 11 Mai 2010 10:05
por Pablo César
BioTech é um programa em MS-DOS (caso tb já conheça) que apresenta algumas implementações avançadas comuns à linguagens visuais como o Tabbed-Page ou Folder todavia operando in ASCII mode, que a princípio recusei-me à acreditar que era Clipper.
Apresenta pra nós. Eu não conheço e não achei ! Podia você nos mostrar ?

O exemplo que eu fiz, foi feito na unha sem biblioteca alguma (apenas a do mouse para permitir a sua inteiração) e aquele exemplo pode ser modificado para que a abas seja na posição vertical também, mas acho que o efeito visual em modo texto, não irá ficar bom. Mas pode ser adapatado.

Re: Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 11 Mai 2010 13:15
por Dr.Microso
O código de sua autoria é show Pablo, bem funcional.
O tenho empregado em pelo menos uma dúzia de rotinas onde, a apresentação de opções simultâneas para alguns dados, só era feito através dos tradicionais menus (o aspecto ficava cansativo e não muito estético).

Antes de fazer o primeiro post, a exemplo de vc também segui o caminho óbvio... E lá se foi umas 2 horas de pesquisa na internet.
Como aqui temos profissionais de várias áreas, citei o nome do programa na esperança de alguém que atue no setor de laboratório ou engenharia genética tenha visto o bicho também.
O software é belga, desconheço a empresa criadora.
Mas vou tentar conseguir mais dados e umas screenshots do tal aplicativo, embora o colega que me apresentou seja deveras indigesto no trato.
Presumo que se é uma LIB, o mesmo recurso deva existir em outros software made in Clipper.

Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 12 Mai 2010 01:16
por Pablo César
O software é belga, desconheço a empresa criadora.
Mas vou tentar conseguir mais dados e umas screenshots do tal aplicativo, embora o colega que me apresentou seja deveras indigesto no trato.
Ahh sim, agora entendo. Eu procurei mas não achei... Convide ele a participar do fórum (mas claro teríamos que sensurar o adjetivo utilizado, se bem que não é tão ofensivo...) numa dessas ele nos apresenta e passa aser mais uma luz...

Re: Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 14 Mai 2010 10:35
por JoséQuintas
Por acaso seria o SSTAB, Microsoft Tabbed Dialog Control?
Se for, ele faz parte do Visual Studio.
Como o Visual Studio permite criar controles, asssim como o Delphi, então o que viu pode ser algum produto comercial.
Mas essa parte básica que mencionou, o SSTAB tem.

Re: Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 14 Mai 2010 11:01
por JoséQuintas
Desculpe, reli seu texto e vi que se refere a programa DOS.
Cheguei a começar algo sobre tabs no Clipper, pra GETs e SAYs básicos, permitindo clicar nas abas, e usando aqueles chr(196), chr(205) e afins.
Bom, esqueci o nome da variável da Getsys, acho que é aGets.
Basicamente é um array de aGets.
a rotina ativa o conjunto correspondente conforme a aba clicada.
E nesse caso, toda a montagem de tela, incluindo says, precisam ser inclusos no array.
Com auxílio do #define, a alimentação do array acaba simulando um comando novo.
Quanto ao texto de lado, já vimos que é possível montagem de caracteres especiais no padrão VGA.
Mas só fiz o básico, só pra ver se como ia ficar.

Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 14 Mai 2010 14:08
por Pablo César
Mas só fiz o básico, só pra ver se como ia ficar.
Se puder, mostre para vermos como ficou

Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 14 Mai 2010 16:35
por JoséQuintas
Só montei um protótipo na época e nunca mais mexi.
O programa usado pra teste ficou assim:

Código: Selecionar todos

#include "tabget.ch"

procedure Main

readexit(.t.)
AltD(.t.)
//set eventmask to 159
set color to w/b, n/w,,,w/b
set scoreboard off
set status off
clear
lCancel := .f.
label0 = "MINHOCA"
text0  = "TATU"

TabBegin(5,5,20,70)
@ 0, 0 TABSAY Label0 "Teste"
@ 0, 10 TABGET Text0 "000002"

NewTab("Dados")
     @ 0, 0  TABSAY Label1 "Codigo"
     @ 0, 10 TABGET Text1  "000001" ;
        picture "@K 999999" valid Val(Text1)>0
     @ 1, 0  TABSAY Label2 "Nome"
     @ 1, 10 TABGET Text2 "NOMENOMENOME" ;
        picture "@!"
NewTab("Financeiro")
     @ 5, 10 TABSAY Label3 "Endereco"
     @ 5, 20 TABGET Text3 "ENDERECOENDERECO" picture "@!"
     @ 6, 10 TABSAY Label4 "Cidade"
     @ 6, 20 TABGET Text4 "CIDADECIDADE" picture "@!"
NewTab("Cobranca")
// @ 6, 20 TABCMD lCancel ;
//         CAPTION "&Cancel" ;
//        STATE { || OlaMundo() }
     @ 7, 10 TABSAY Label5 "UF"
     @ 7, 20 TABGET Text5 "SP" picture "@!A"
     @ 8, 10 TABSAY Label6 "CEP"
     @ 8, 20 TABGET Text6 "03676080" picture "@R 99999-999"
NewTab("Entrega")
   @ 5, 10 TABSAY Label7 "Codigo"
   @ 5, 20 TABGET Text7 "000005"
NewTab("Obs")
   @ 6, 10 TABSAY Label8 "minhoca"
   @ 6, 20 TABGET Text8 "tatu"
// NewTab()
//     @ 3, 10 TABMEMO Memo1 "teste"
TabEdit(.t.)
ReadTabs()
Return

function OlaMundo()
   @ 23, 0 say "Ola Mundo"
   inkey(0)
   Scroll(23,0,23,79,0)
return NIL
José M. C. Quintas

Re: Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 14 Mai 2010 16:40
por JoséQuintas
E o .ch, como dá pra perceber, criado meio do estilo usado pela GetSys.
E o gerenciamento de tabs só alimenta uma GetSys conforme a tab.

Código: Selecionar todos

#command @ <row>, <col> TABGET <var> <xpr>                          ;
                        [PICTURE <pic>]                                 ;
                        [VALID <valid>]                                 ;
                        [WHEN <when>]                                   ;
                        [SEND <msg>]                                    ;
      => SetPos( <row>, <col> )                                         ;
       ; <var> := <xpr> ;
       ; TextBox( ;
           _GET_( <var>, <"var">, <pic>, <{valid}>, <{when}> ) )

// #command @ <row>, <col> TABSAY <xpr>                           ;
//       => SetPos( <row>, <col> )                                         ;
//        ; Label( <row>, <col>, <xpr> )


#command @ <row>, <col> TABSAY <var> <xpr> ;
                        [PICTURE <pic>]  ;
      =>  SetPos( <row>, <col> ) ;
      ; <var> := <xpr> ;
      ; TextBox( ;
         _GET_( <var>, <"var">, <pic>, {|x|.t.},{|x|.f.} ) )

#command @ <row>, <col> TABCMD <var> ;
           CAPTION <cCaption> ;
           STATE <oState> ;
           [ PICTURE <pic> ] ;
           [ VALID <valid> ] ;
           [ WHEN <when> ] ;
     => SetPos( <row>, <col> ) ;
        ; <var> := .f. ;
        ; xxxoGet = _GET_( <var>, <cCaption>, <pic>, <{valid}> , <{when}> ) ;
        ; xxxoGet:Control := _PushButt_( cCaption,,,, {<oState>},,,,,,,, ) ;
        ; xxxoGet:reader := { | a, b, c, d | GuiReader( a, b, c, d ) } ;
        ; xxxoGet:Control:Display();
        ; TextBox( xxxoGet )

Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 14 Mai 2010 17:38
por Pablo César
Ficou faltando as funções:

TABBEGIN
TEXTBOX
NEWTAB
TABEDIT
READTABS

Sem elas não dá para compilar sem erros...

Re: Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 20 Mai 2010 15:06
por JoséQuintas
Só não lembro se depende da minha Getsys, alterada pra mouse, se tem algo mais pra isso.
Como eu disse no início, fiz em 2004 só por curiosidade, por ter visto no VB, e não cheguei a colocar em prática.

José M. C. Quintas

Código: Selecionar todos

* 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

Re: Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 31 Mai 2010 11:16
por Adalberto
Ola amigos deste forum,

Desejo contribuir, e tal vez ajudar, com uma alternativa, mas preciso anexar os Prg´s e o Exe e não sei como fazer esse trabalho.
Se alguma alma caritativa me da uma ajuda, Le agradeço desde já.

Parabéns para vocês.

Re: Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 31 Mai 2010 14:43
por alxsts
Olá!

Adalberto:
veja este tópico.

Re: Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 31 Mai 2010 22:01
por Adalberto
Alexandre

muito obrigado pela ajuda.

Anexo os PRG´s para mostrar otra forma de aplicação de Tab_abas em Clipper.

Saludos para todos, desde Santa Cruz de la Sierra - Bolivia.

Tabbed-Panel/Page (painel com abas) no Clipper

Enviado: 01 Jun 2010 09:35
por Pablo César
Que tal Adalberto ? Te arreglas bien con el portugues, ein ? Te felicito y tambien agradezco por tu contribuicion, podria colocarlo en la seccion "Contribuições, Dicas e Tutoriais" para explicar mejor y redictas tu mensaje anterior dandonos el link donde estará postado tu tópico de contribuicion...
Solo me quedé con ganas de ejecutar tu aplicativo. Sinó es mucho pedir... puedes colocar un ejemplo de test asi logramos visualizar el resultado ?

Un gran abrazo al pueblo boliviano !