Página 1 de 3

Copia / Colar no HARBOUR

Enviado: 28 Fev 2022 11:15
por leandrolinauer
Bom dia a todos, pesquisei no fórum algo para copiar e colar no get e encontrei as funções abaixo que cairam como uma luva.

Código: Selecionar todos

SET KEY K_CTRL_C TO Ctrl_c
SET KEY K_CTRL_V TO Ctrl_v   


Function Ctrl_c
local oGet := GetActive()
If !Empty(oGet)
   Return WVW_SetClipboard( Alltrim(oGet:buffer) )
EndIf
Return   

Function Ctrl_v
local oGet := GetActive()
If !Empty(oGet)
   Keyboard WVW_GetClipboard() //StrTran( WVW_GetClipboard(), ';', ',')
EndIf
Return

Nada é perfeito por completo (rsrsrs)
Vamos ao problema:

Depois de inserido estas funções o PAGE DOWN deixou de funcionar para escape do GET, mas o PAGE UP funciona, alguém sabe me informar o porque, visto que nada foi alterado para interferir no page down.

Grato.

Copia / Colar no HARBOUR

Enviado: 28 Fev 2022 16:09
por JoséQuintas
TUDO FOI ALTERADO pra interferir no Page Down.

PAGEDOWN e CONTROL-C são a mesma coisa.

Saída:
Na função de copiar/colar, ANTES de acionar a rotina, ou de preferência durante o teste, testar se CONTROL está pressionado.

Copia / Colar no HARBOUR

Enviado: 28 Fev 2022 17:46
por leandrolinauer
Boa tarde José Quintas, realmente é a mesma coisa, por isto que da problema mesmo.
Pesquisei e encontrei a função abaixo que faz a mesma coisa e mantem todas as outras teclas com suas funcionalidades.

Código: Selecionar todos


hb_gtInfo( HB_GTI_INKEYFILTER, ;
      { | nKey |
      LOCAL nBits, lIsKeyCtrl
      nBits := hb_GtInfo( HB_GTI_KBDSHIFTS )
      lIsKeyCtrl := ( nBits == hb_BitOr( nBits, HB_GTI_KBD_CTRL ) )
      SWITCH nKey
      CASE HB_K_CLOSE
         RETURN K_ESC
      CASE K_MWBACKWARD
         RETURN K_DOWN
      CASE K_MWFORWARD
         RETURN K_UP
      CASE K_RBUTTONDOWN
         RETURN K_ESC
      CASE K_RDBLCLK
         RETURN K_ESC
      CASE K_TAB
         RETURN K_DOWN
      CASE K_SH_TAB
         RETURN K_UP
      CASE K_CTRL_V
         IF lIsKeyCtrl
            hb_GtInfo( HB_GTI_CLIPBOARDPASTE )
            RETURN 0
         ENDIF
      CASE K_CTRL_C
         IF lIsKeyCtrl
            IF GetActive() != NIL
               hb_gtInfo( HB_GTI_CLIPBOARDDATA, Transform( GetActive():VarGet(), "" ) )
               RETURN 0
            ENDIF
         ENDIF
      ENDSWITCH
      RETURN nKey
       } )

Valeu, grato pela ajuda.
Um abraço.

Copia / Colar no HARBOUR

Enviado: 01 Mar 2022 09:37
por Itamar M. Lins Jr.
Olá!
Estamos em 2022 e pergunto; Quantos anos tem que o (MS-DOS) não existe ?
Mesmo assim milhares de aplicações ainda são mantidas e até feitas usando o ambiente (MS-DOS).
Quem mudou para Minigui/Hwgui/FiveWin.... Não tem essas barreiras ou problemas.
Apenas estou observando, esse obstáculo. O mesmo raciocínio p/ impressões e relatórios.
Nisso fica um misto de coisas que não são ultrapassadas, funcionam, são eficientes até certo ponto ! Mas, porém tem muita incompatibilidade com a realidade do (OS-WINDOWS) ou com qualquer (OS) VISUAL.

Saudações,
Itamar M. Lins Jr.

Copia / Colar no HARBOUR

Enviado: 01 Mar 2022 15:26
por vailton
Obrigado Leandro por compartilhar!

Copia / Colar no HARBOUR

Enviado: 01 Mar 2022 17:10
por JoséQuintas
Acabou encontrando a função que postei tempos atrás.
Acaba facilitando o uso do scroll do mouse, o HB_K_CLOSE transformado em ESC - da GTWVG, o TAB e SHIFT-TAB muito usado em GUI transformado no equivalente da GETSYS.
Uso até hoje.
Itamar M. Lins Jr. escreveu:Estamos em 2022 e pergunto; Quantos anos tem que o (MS-DOS) não existe ?
Mesmo assim milhares de aplicações ainda são mantidas e até feitas usando o ambiente (MS-DOS).
Quem mudou para Minigui/Hwgui/FiveWin.... Não tem essas barreiras ou problemas.
Pois é....
tem horas que o negócio é Android/Tablet/etc. e não serve minigui/fivewin.
tem horas que o negócio é html.
Mas aqui.... o Itamar reforçou sobre Windows.
Sei lá....

Realidade de 2022:
Considerando que mudaram até o negócio de homem e mulher, o que dizer de programação....
Tá valendo tudo, junto ou misturado, tanto faz.

Copia / Colar no HARBOUR

Enviado: 01 Mar 2022 20:49
por Itamar M. Lins Jr.
Olá!
A minha postagem foi em relação a essa:
TUDO FOI ALTERADO pra interferir no Page Down.
PAGEDOWN e CONTROL-C são a mesma coisa.
Porque no windows não é assim. CTRL + C e CTRL + V etc... no windows não interfere no PgDn. Que no caso do MS-DOS é chr(3).
São as adaptações novas em um OS limitado de um OS bem mais amplo.
Mas aqui.... o Itamar reforçou sobre Windows.
Não tem nada a ver com linguagens, é limitação do ambiente mesmo.

Saudações,
Itamar M. Lins Jr.

Copia / Colar no HARBOUR

Enviado: 02 Mar 2022 00:06
por JoséQuintas
Itamar M. Lins Jr. escreveu:Porque no windows não é assim. CTRL + C e CTRL + V etc... no windows não interfere no PgDn. Que no caso do MS-DOS é chr(3).
São as adaptações novas em um OS limitado de um OS bem mais amplo.
No Harbour dá pra fazer a checagem, usando o INKEY extendido.

Não muito importante, MS-DOS é puxar o saco da Microsoft.

Mas limitado mesmo é seu cérebro kkkkk
Em pleno 2022, está considerando que CONSOLE é o extinto DOS kkkkkkk

Copia / Colar no HARBOUR

Enviado: 02 Mar 2022 08:17
por Itamar M. Lins Jr.
Olá!
Em pleno 2022, está considerando que CONSOLE é o extinto DOS kkkkkkk
Inventa as coisas e depois sai tirando o corpo de banda... e como sempre inventando o que eu não disse.
Console podemos entender como herança do MS-DOS.(CLIPPER) -> inkey do Clipper.

Vc que escreveu.
TUDO FOI ALTERADO pra interferir no Page Down.


Agora vem mudando para inkey estendido etc...

Saudações,
Itamar M. Lins Jr.

Copia / Colar no HARBOUR

Enviado: 02 Mar 2022 10:33
por JoséQuintas
Itamar M. Lins Jr. escreveu:Inventa as coisas e depois sai tirando o corpo de banda... e como sempre inventando o que eu não disse.
Console podemos entender como herança do MS-DOS.(CLIPPER) -> inkey do Clipper.
Avisa a Microsoft porque ela não sabe disso kkkkkk

Só acredito se o Linus Toward ou Bill Gates confirmarem isso.

Copia / Colar no HARBOUR

Enviado: 02 Jun 2022 17:30
por leandrolinauer
Boa tarde a todos, revendo novamente as funções.
Cada dia uma surpresa nova do Harbour (rsrsrsrs)
Alterei de Harbour 3.2 para 3.4 e arrumei muitos problemas, mas em compensação ganhei outros.
Bom é o seguinte:

Código: Selecionar todos

hb_gtInfo( HB_GTI_INKEYFILTER, ;
      { | nKey |
      LOCAL nBits, lIsKeyCtrl
      nBits := hb_GtInfo( HB_GTI_KBDSHIFTS )
      lIsKeyCtrl := ( nBits == hb_BitOr( nBits, HB_GTI_KBD_CTRL ) )
      SWITCH nKey
      CASE HB_K_CLOSE
         RETURN K_ESC
      CASE K_MWBACKWARD
         RETURN K_DOWN
      CASE K_MWFORWARD
         RETURN K_UP
      CASE K_RBUTTONDOWN
         RETURN K_ESC
      CASE K_RDBLCLK
         RETURN K_ESC
      //CASE K_TAB
//         RETURN K_DOWN
      CASE K_SH_TAB
         RETURN K_UP
      CASE K_CTRL_V
         IF lIsKeyCtrl
            IF GetActive() != NIL
               hb_GtInfo( HB_GTI_CLIPBOARDPASTE )
               RETURN 0
            ENDIF   
         ENDIF
      CASE K_CTRL_C
         IF lIsKeyCtrl
            IF GetActive() != NIL
               hb_gtInfo( HB_GTI_CLIPBOARDDATA,  Transform( GetActive():buffer,"") )
               RETURN 0
            ENDIF
         ENDIF
      ENDSWITCH
      RETURN nKey
       } )

A função acima, funcionava perfeitamente no 3.2, mas no 3.4 não cola como deveria.
O problema, ao colar um conteúdo copiado de qualquer lugar para dentro de um GET texto e até grande o mesmo não respeita o simbolo ';' automaticamente os dados são jogados de get em get posteriores e não ficando tudo em um get só.
Exemplo campo email 350 caracteres totais.
teste@gmail.com;teste1@gmail.com;teste2@gmail.com (area de transferencia copiada de qualquer lugar, até de um get mesmo)
Ao ser colado esta area de transferencia em um get a função acima joga agora desta forma abaixo.
teste@gmail.com no get corrente e cada um dos outros em outros gets sucessivos pra frente separados certinho no ';'.
Já fiz teste, troquei o ';' por ',' e funciona perfeitamente, então por isto descobri que é justamente o caracter ';'.

Alguem sabe como resolver este b.o ?

Valeu

Copia / Colar no HARBOUR

Enviado: 02 Jun 2022 19:16
por JoséQuintas
Esse pulo automático de um GET para outro pode atrapalhar o usuário, porque dependendo da digitação pode pular ou não para o próximo get.

Acostumei a usar SET CONFIRM ON, isso só pula ao próximo get se o usuário teclar ENTER.

Acaba ajudando nesse problema, pelo menos não vai pular de get ao colar, mas a última letra pode não ser a correta, porque vai considerar todo restante como digitando na última letra.
Mesmo assim, como continua no get, o usuário ainda pode fazer ajustes no texto colado, o que é interessante.

Copia / Colar no HARBOUR

Enviado: 03 Jun 2022 08:08
por carlaoonline
Bom dia!
leandrolinauer escreveu:Depois de inserido estas funções o PAGE DOWN deixou de funcionar para escape do GET, mas o PAGE UP funciona, alguém sabe me informar o porque, visto que nada foi alterado para interferir no page down.
O porquê eu não faço ideia, porém como o Page UP (Asc=18) está funcionando como escape para os Get,s (segundo o que entendi), então como medida provisória, podes atribuir o código do Page Up para a tecla Page Down (Asc=3) antes do Read e retirar após.

Código: Selecionar todos

@ 10,10 say .......
@ 11,10 say .......

SET KEY  3 TO Up2Down()
READ
SET KEY 3 TO




Function Up2Down()
KEYBOARD( CHR( 18 ) )  // Ao teclar no Page Down, é enviado um Page Up
Return


No caso de Copiar/Colar para Harbour console, temos as propriedades do executável clicando no canto esquerdo superior, onde as configurações de copiar e colar mudam dependendo das caixas marcadas (sei que praticamente todos sabem disso, mas pode ter alguém que passe despercebido...)
Propriedades desmarcadas afetam o copiar/colar
Propriedades desmarcadas afetam o copiar/colar

Copia / Colar no HARBOUR

Enviado: 03 Jun 2022 08:46
por leandrolinauer
Bom dia.
Set confirm On, não adiantou, continua pulando de campo em campo com os restantes dos dados.
Mas como eu testei, só quebra o texto com o simbolo ";" com virgula não acontece copia tudo no get mesmo, o problema esta sendo no ";".

Grato

Copia / Colar no HARBOUR

Enviado: 03 Jun 2022 10:07
por carlaoonline
... acredito que tenha um SET para habilitar/desabilitar esse procedimento de distribuir pelos gets o conteúdo ao colar.

Dei um hbmk2.exe -find set pra ver se aparece alguma coisa que possa ser (vai que tenha um SetBreakGetOnPaste ) , mas aparece um milhão de comandos....

Talves esse possa ser

ZGM_EXPANDROWSONPASTE()
Esta no núcleo do Harbour (3.2)

Mas esse negócio de distribuir pelos gets pode ser muito proveitoso na programação e poupar algum tempo para o usuário dependendo o caso, principalmente se houver também uma maneira de trocarmos o " ; " por outro símbolo a nossa escolha.