INSERT / SET INSERT

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Shark
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 25 Set 2017 21:42
Localização: Brasília - DF

INSERT / SET INSERT

Mensagem por Shark »

Então pessoal... Alguns conhecimentos se perdem ao longo dos anos e creio que este caso seja um deles:

Gostaria de inverter o padrão de entrada do INSERT no meu sistema para deixá-lo como o padrão de GET dos programas atuais mais modernos.

Em um GET, quero que o cursor permaneça em seus estado normal "fininho", mas, que a digitação seja feita com INSERT (empurrando os caracteres já existentes) num GET.

Quando apertar o INSERT, o cursor fica "grandão" como de costume, porém ao digitar os caracteres vão sendo substituídos no GET.

Quem se lembra como se faz isso? Eu já matutei e não me recordo.

Agradeço antecipadamente a quem puder ajudar.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

INSERT / SET INSERT

Mensagem por Jairo Maia »

Olá Shark,

Coloque o seguinte em sua função MAIN():

Código: Selecionar todos

// coloca em modo de inserção por padrão...
READINSERT( .T. )

// muda tamanho do cursor quando no modo de SOBREPOSIÇÃO
SETKEY(K_INS,{||IF(READINSERT(),SETCURSOR(3),SETCURSOR(1)),READINSERT(!READINSERT())})
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

INSERT / SET INSERT

Mensagem por Kapiaba »

Uma idéia,

Código: Selecionar todos

#INCLUDE "FIVEWIN.CH"

FUNCTION MAIN()

   LOCAL ODLG
   LOCAL OGET1, OGET2, OGET3, OGET4
   LOCAL CVAR1, CVAR2, CVAR3, CVAR4
   LOCAL LACTIVE := .F.
   
   CVAR1 := 0
   CVAR2 := 0
   CVAR3 := 0
   CVAR4 := 0

   READINSERT( .F. )
   
   DEFINE DIALOG ODLG TITLE "FROM CODE" PIXEL SIZE 300,300

   @ 10,10 GET OGET1 VAR CVAR1 BITMAP "..\BITMAPS\ON.BMP" ;
      ACTION( LIGA_INSERE_GET1() ) OF ODLG PIXEL SIZE 60,12

   OGET1:CTOOLTIP := OEMTOANSI( "CLICK NA BITMAP: LIGA/DESLIGA O INSERT" )
   OGET1:LBTNTRANSPARENT := .T.       // TRANSPARENT BUTTON

   @ 40,10 GET OGET2 VAR CVAR2 BITMAP "..\BITMAPS\ON.BMP" ACTION( MSGINFO( "WITHOUT TRANSPARENT" ) ) OF ODLG PIXEL SIZE 60,12

   @ 70,10 GET OGET3 VAR CVAR3 BITMAP "..\BITMAPS\CHKYES.BMP" ACTION( MSGINFO( "WITH ADJUST-TRANSPARENT" ) ) OF ODLG PIXEL SIZE 120,12

   OGET3:DISABLE()
   OGET3:LBTNTRANSPARENT := .T.       // TRANSPARENT BUTTON GET OGET3
   OGET3:LADJUSTBTN      := .T.       // BUTTON GET ADJUST WITDH OGET3
   OGET3:LDISCOLORS      := .F.       // DEACTIVE DISABLE COLOR
   OGET3:NCLRTEXTDIS     := CLR_WHITE // COLOR TEXT DISABLE STATUS
   OGET3:NCLRPANEDIS     := CLR_BLUE  // COLOR PANE DISABLE STATUS

   @ 100,10 GET OGET4 VAR CVAR4 BITMAP "..\BITMAPS\CHKYES.BMP" ;
      ACTION( IF( LACTIVE,OGET3:DISABLE(),OGET3:ENABLE()), LACTIVE:= !LACTIVE, ODLG:UPDATE() ) OF ODLG PIXEL SIZE 120,12
   
   OGET4:LADJUSTBTN      := .T.
   
   ACTIVATE DIALOG ODLG CENTERED ;

   SET( _SET_INSERT, ! SET( _SET_INSERT ) )
 
RETURN NIL

FUNCTION LIGA_INSERE_GET1()

   SET( _SET_INSERT, ! SET( _SET_INSERT ) )

RETURN( .T. )
Shark
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 25 Set 2017 21:42
Localização: Brasília - DF

INSERT / SET INSERT

Mensagem por Shark »

Ambas as soluções acima são interessantes e funcionais. Entretanto, eu gostaria que o cursor ficasse normal com READINSERT( .T. ) e ficasse maior com READINSERT(.F.) que é o padrão de entrada dos programas mais modernos.

Isso é possível?

Nos testes que fiz, quando o INSERT é ligado o cursor assume a forma de inserção automaticamente ( setcursor(3) ) e mesmo chamando a função setcursor(1) o cursor não muda.
Shark
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 25 Set 2017 21:42
Localização: Brasília - DF

INSERT / SET INSERT

Mensagem por Shark »

Como utilizo fivewin, vou alterar aqui a classe TGET pra fazer o que preciso mas lembro que no passado, em clipper, eu fazia isso facilmente. Porém não me recordo como. rsrsrsrsrs...

Por hora agradeço a contribuição dos nobres colegas.

Deixar aqui o trecho do código da classe TGET do fivewin que alterei para conseguir o resultado dsejado. Talvez sirva de ajuda para algum visitante deste post futuramente.

SharkAbraços!

Código: Selecionar todos

  if ::oGet:Type == "N" .and. ;
              ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
              if ::oGet:Clear()
              #ifndef __XHARBOUR__
                 ::oGet:DelEnd()
              #endif
              endif
              ::oGet:ToDecPos()
           else
              if Set( _SET_INSERT )                     //
                 ::oGet:Overstrike( Chr( nKey ) )  //
              else                                              // by shark
                 ::oGet:Insert( Chr( nKey ) )        //
              end                                              //
           endif
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

INSERT / SET INSERT

Mensagem por Jairo Maia »

Olá Shark,
Shark escreveu:em clipper, eu fazia isso facilmente. Porém não me recordo como.
Que bom que já resolveu, isso que é importante, mas apenas para registro:

Uso da forma que passei acima desde o Clipper, e manteve quando migrei para Harbour. O sistema inicia em modo INSERÇÃO e com o cursor "underline", se pressiona a tecla INSERT, o cursor fica cheio na vertical e com sobreposição dos caracteres. Deveria ter funcionado, mas importante que já resolveu.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder