Clipper On Line • Ver Tópico - Comando copiar

Comando copiar

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Comando copiar

Mensagempor Daiane » 28 Abr 2016 09:12

Olá colegas,
alguém saberia me informar como posso copiar o conteúdo armazenado em campos editáveis da minha tela de cadastro?
minha ideia é o seguinte,tenho 4 campos e preciso copiar os valores armazenados nesses campos,quero criar um botão que copie de vez esses valores.

estava querendo usar o chr(3) q tem a mesma função do ctrl + c
mas não sei como posso utilizar.
se houver algum exemplo de explicação eu agradeço.

fiz uma pesquisa,mas so encontrei uma maneira de copiar arquivos :(
Nota de Moderação:
Toledo: O presente tópico foi movido da seção Harbour, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o [x]Harbour.
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Comando copiar

Mensagempor viniciuspc » 28 Abr 2016 09:53

não captei a sua duvida :%

Você possui uma tela com 4 campos e deseja salvar o conteúdo em um arquivo ou tabela, é isso?

[]´s
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar de usuário

viniciuspc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 40
Data de registro: 19 Dez 2006 16:18
Cidade/Estado: Rio de Janeiro
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes

Comando copiar

Mensagempor Daiane » 28 Abr 2016 09:56

não, na verdade é assim suponha que: ]Campo1:= 1234 Campo2:= 5678 Campo3 9874 Campo4:=6532
quero criar um botão que copie dessa forma 1234567898746532
para eu poder colar em outra tela de cadastro.

entendeu?
basicamente quero usar o crtl C + ctrl V. so q sem digitar no teclado e sim num simples botão ele faria isso,entendeu?
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Comando copiar

Mensagempor viniciuspc » 28 Abr 2016 10:07

Ok,

Se os campos forem do tipo carácter, basta concatenar retirando os espaços em branco. Se for numérico, você deve converter primeiro.

Então, o botão chama uma função assim:

Campo5 := Alltrim(Campo1)+Alltrim(Campo2)+Alltrim(Campo3)+Alltrim(Campo4) && caso seja carácter

OU

Campo5 := Alltrim(Str(Campo1)))+Alltrim(Str(Campo2))+Alltrim(Str(Campo3))+Alltrim(Str(Campo4)) && caso seja numérico

Neste exemplo, Campo5 será do tipo carácter.

seria isso?

[]´s
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar de usuário

viniciuspc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 40
Data de registro: 19 Dez 2006 16:18
Cidade/Estado: Rio de Janeiro
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes

Comando copiar

Mensagempor Jairo Maia » 28 Abr 2016 10:38

Olá Daiane,

Veja se esse exemplo ajuda. Note que considerei os campos como caractere, se um ou mais for numérico precisa fazer como o Vinícius colocou acima.

Nota: Veja no exemplo as funções Copiar() e Colar(). Espero que ajude...
#include "inkey.ch"  // arquivo com definições das teclas

Function Main()

Local nCtrlC:=SetKey( K_CTRL_C, { || Copiar() } )
Local nCtrlV:=SetKey( K_CTRL_V, { || Colar() } )

Private cCampo1, cCampo2, cCampo3, cCampo4, cBuffer, cResultado:=Space(20)

Clear Screen

cCampo1 := "1234   "
cCampo2 := "5678   "
cCampo3 := "9874   "
cCampo4 := "6532   "

@ 3,10 Say "Pressione CTRL+C para copiar os campos, e depois ESC para sair"

@ 5,10 Say "Campo1:" Get cCampo1
@ 6,10 Say "Campo2:" Get cCampo2
@ 7,10 Say "Campo3:" Get cCampo3
@ 8,10 Say "Campo4:" Get cCampo4
Read

@ 12,10 Say "==> Pressione CTRL+V para colar o resultado"
@ 15,10 Say "Resultado:" Get  cResultado
Read

SetKey( K_CTRL_C, nCtrlC )
SetKey( K_CTRL_V, nCtrlV )

Return Nil

Function Copiar()
cBuffer := AllTrim( M->cCampo1 ) + AllTrim( M->cCampo2 ) + AllTrim( M->cCampo3 ) + AllTrim( M->cCampo4 )
Return

Function Colar()
Clear TypeaHead
KeyBoard cBuffer
Return Nil
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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2414
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 293 vezes
Mens.Curtidas: 257 vezes

Comando copiar

Mensagempor Daiane » 28 Abr 2016 10:58

Obrigada pelas respostas.
Jairo Maia,neste exemplo que vc mostrou teria como copiar e colar no Notepad ou em qualquer arquivo texto ?
pq na verdade preciso copiar para colar numa outra aplicação que tem o mesmo cadastro,entende?
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Comando copiar

Mensagempor Toledo » 28 Abr 2016 12:20

Veja se este código copia para a área de transferência:

Function Copiar()
   cBuffer := AllTrim( M->cCampo1 ) + AllTrim( M->cCampo2 ) + AllTrim( M->cCampo3 ) + AllTrim( M->cCampo4 )
   HB_GTINFO( HB_GTI_CLIPBOARDDATA, cBuffer)
Return


Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3021
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 221 vezes
Mens.Curtidas: 225 vezes

Comando copiar

Mensagempor Jairo Maia » 28 Abr 2016 13:09

Olá Pessoal,

Toledo, funcionou certinho. Show de bola...

Apenas uma OBSERVAÇÃO:

Para que o exemplo funcione corretamente, precisa acrescentar no início do exemplo a linha:
#include "hbgtinfo.ch"
E ao compilar acrescentar a lib: -lgtwvg
:-Y
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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2414
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 293 vezes
Mens.Curtidas: 257 vezes

Comando copiar

Mensagempor Daiane » 28 Abr 2016 14:13

Peço mais uma vez ajuda aos caros colegas pois fiz e não ta copiando
coloquei um print p ver se estava sendo chamado a rotina copiar e não está
Vou deixar o código caso alguém possa dar uma olhada.

outro detalhe é que dar erro no Clear TypeHead, o sistema para de funcionar fica travando e não sai

*Prg para teste de Copiar e colar dados

#include "FiveWin.ch"
#include "inkey.ch"
#include "hbgtinfo.ch"

static TesteInkey
//----------------------------------------------------------------------------//

CLASS TesteInkey FROM JanDlg
    export:
       METHOD getInstance(oWnd)
       METHOD BuildDlg()
    hidden:
      METHOD New(oWnd) CONSTRUCTOR
      METHOD DeleteW()
      METHOD Copiar()
      METHOD Colar()
      
      DATA xCampo1,xCampo2,xCampo3,xCampo4,xCampo5,xCampo6
      DATA gCampo1,gCampo2,gCampo3,gCampo4,gCampo5,gCampo6
      DATA bCopiar, bColar ,cBuffer

     

ENDCLASS

//----------------------------------------------------------------------------//

METHOD getInstance(oWnd)  CLASS TesteInkey

   IF TesteInkey = nil
      TesteInkey := ::New(oWnd,"#8041",325,130,"Teste Inkey")
   ELSE
      TesteInkey:oChld:SetFocus()
   ENDIF
return TesteInkey 

//------------------------------------------------------------------------------
METHOD New(oWind,cIcone,vLarg,vAlt,cTitulo) CLASS TesteInkey
   super:New(oWind,cIcone,vLarg,vAlt,cTitulo)
   
   ACTIVATE DIALOG ::oDlg NOMODAL VALID ( TesteInkey:oChld:End(), .t.)
RETURN self
//------------------------------------------------------------------------------
METHOD BuildDlg(oWnd) CLASS TesteInkey
     local nCtrlC:= SetKey( K_CTRL_C, { || ::Copiar() } )
   local nCtrlV:= SetKey( K_CTRL_V, { || ::Colar() } )
   
   DEFINE DIALOG ::oDlg RESOURCE "#1161" OF ::oChld
   
   Clear Screen
      
   ::xCampo1 := "1234"
   ::xCampo2 := "5678"
   ::xCampo3 := "4679"
   ::xCampo4 := "9564"
   ::xCampo5 := "3256"
   
   REDEFINE GET      ::gCampo1   VAR ::xCampo1  ID 4001 OF ::oDlg
   REDEFINE GET      ::gCampo2   VAR ::xCampo2  ID 4002 OF ::oDlg
   REDEFINE GET      ::gCampo3   VAR ::xCampo3  ID 4003 OF ::oDlg
   REDEFINE GET      ::gCampo4   VAR ::xCampo4  ID 4004 OF ::oDlg
   REDEFINE GET      ::gCampo5   VAR ::xCampo5  ID 4005 OF ::oDlg
   REDEFINE GET      ::gCampo6   VAR ::xCampo6  ID 4006 OF ::oDlg 
   

   SetKey( K_CTRL_C, nCtrlC )
   SetKey( K_CTRL_V, nCtrlV )
   
return Nil
//------------------------------------------------------------------------------
METHOD DeleteW() CLASS TesteInkey
   TesteInkey:= nil
return .T.
//------------------------------------------------------------------------------
METHOD Copiar() CLASS TesteInkey
  ::cBuffer := AllTrim( ::xCampo1 ) + AllTrim( ::xCampo2 ) + AllTrim( ::xCampo3 ) + AllTrim( ::xCampo5 ) + AllTrim( ::xCampo6 )
  HB_GTINFO( HB_GTI_CLIPBOARDDATA, ::cBuffer)
Return
//------------------------------------------------------------------------------   
METHOD Colar() CLASS TesteInkey
    Clear TypeaHead
    KeyBoard ::cBuffer
return Nil   
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Comando copiar

Mensagempor viniciuspc » 28 Abr 2016 14:43

Interessante, não conhecia este comando!

http://www.pctoledo.com.br/forum/viewtopic.php?p=72440

mas apenas no modo gráfico? não teria no harbour/DOS puro?

[]´s
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar de usuário

viniciuspc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 40
Data de registro: 19 Dez 2006 16:18
Cidade/Estado: Rio de Janeiro
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes

Comando copiar

Mensagempor Daiane » 28 Abr 2016 14:55

Sera q é alguma biblioteca? ou pelo fato deu usar o fivewin?
pois não adiantou,nem copiou e nem colou
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Comando copiar

Mensagempor Jairo Maia » 28 Abr 2016 17:01

Olá Pessoal,

viniciuspc escreveu:mas apenas no modo gráfico? não teria no harbour/DOS puro?
Vinícius, apesar do exemplo usar hbgtinfo.ch e a lib gtwvg, ele está em Harbour/DOS (Console) puro.

Daiane escreveu:Sera q é alguma biblioteca? ou pelo fato deu usar o fivewin?
Daiane, biblioteca creio que não, se não daria falta de função. Quanto a ser em FiveWin, não sei nada de FiveWin. Vamos aguardar algum colega que conhece FiveWin e ver se dá uma luz...
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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2414
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 293 vezes
Mens.Curtidas: 257 vezes

Comando copiar

Mensagempor asimoes » 28 Abr 2016 17:05

Daiane,

O fórum mais apropriado para as suas duvidas é o fiveWin http://www.pctoledo.com.br/forum/viewforum.php?f=2
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4144
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 290 vezes
Mens.Curtidas: 208 vezes

Comando copiar

Mensagempor Daiane » 29 Abr 2016 09:37

Olá pessoal,muito obrigada pela ajuda de vocês
Enfim encontrei a solução para copiar para o clipboard do windows
muito simples e fácil

METHOD Copiar() CLASS TesteInkey

Define ClipBoard oCop Of ::oDlg

oCop:clear()

oCop:setText( AllTrim( ::xCampo1 ) + AllTrim( ::xCampo2 ) + AllTrim( ::xCampo3 ) + AllTrim( ::xCampo5 ) + AllTrim( ::xCampo6 ) )

Return .t.
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar de usuário

Daiane
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 122
Data de registro: 28 Out 2014 15:19
Cidade/Estado: Feira de Santana - BA
Curtiu: 27 vezes
Mens.Curtidas: 13 vezes

Comando copiar

Mensagempor viniciuspc » 02 Mai 2016 09:59

Jairo Maia escreveu:
viniciuspc escreveu:mas apenas no modo gráfico? não teria no harbour/DOS puro?

Vinícius, apesar do exemplo usar hbgtinfo.ch e a lib gtwvg, ele está em Harbour/DOS (Console) puro.


Obrigado Jairo! :)Pos

Sempre utilizei o famigerado menu de contexto da janela DOS para o Edit->Copy e Edit->Past! não sabia que existia algo assim para o DOS Puro!

Então, fiz uma função bem genérica que atende um pouco os get´s normais!

Function Ctrl_C()
******** **************************************************
* copia o conteudo de um get para a area de transferencia *
* http://www.pctoledo.com.br/forum/viewtopic.php?p=72440
* http://pctoledo.com.br/forum/viewtopic.php?f=4&p=105627#p105627
* Problema : Ctrl + C = PgDn, Ctrl-ScrollLock no inkey.ch       *
*            então temos que diferenciar
***********************************************************
local cVar:=''
If IsKeyCtrl()
   if GetActive():type == 'N'
      cVar:=Alltrim(Str(GetActive():varGet()))
   Elseif GetActive():type == 'D'
      cVar:=Alltrim(DTOC(GetActive():varGet()))
   else
      cVar:=Alltrim(GetActive():varGet())
   Endif
Endif   
IF !EMPTY(cVar)
   Ctrl_C_Var(cVar)
ENDIF   
Return

Function Ctrl_C_Var(cVar)
******** ********************************************************
* copia o conteudo de uma variavel para a area de transferencia *
*****************************************************************
IF !EMPTY(cVar)
   HB_GTINFO( HB_GTI_CLIPBOARDDATA, cVar )
ENDIF   
Return
         
Function Ctrl_V()
******** ********************************************************
* cola um conteudo da area de transferencia para o GET corrente *
* PROBLEMA : CTRL + V = Ins no inkey.ch!                        *
* então devemos diferenciar se a tecla CTRL foi pressionada     *
*****************************************************************
local cVar:=''
local lIns
If IsKeyCtrl()
   Clear TypeaHead
   cVar:=Alltrim(HB_GTINFO( HB_GTI_CLIPBOARDDATA))
   keyboard cVar
Else
   lIns := ReadInsert()  && retorna o estado do Ins
   ReadInsert(.not.lIns) && alterna o estado do Ins
   KSETINS(.not.lIns)    && ct.lib
Endif   
return

Function IsKeyCtrl()
******** *************************************************
* http://www.pctoledo.com.br/forum/viewtopic.php?p=72440 *
* verificar se a tecla CTRL foi pressionada!             *
**********************************************************
Local nBits := hb_gtinfo( HB_GTI_KBDSHIFTS )
Return nBits == hb_bitor( nBits, HB_GTI_KBD_CTRL )


Utilizando os set´s abaixo no main!

set key K_CTRL_C to Ctrl_C()
set key K_CTRL_V to Ctrl_V()


e incluindo

#include "hbgtinfo.ch"

A parte de colar ficou genérica gracas ao keyboard, pois basta mandar o conteúdo da área de transferência para o teclado! isto pode gerar um problema caso o conteúdo extrapole o tamanho do campo.... mas vai dar para o gasto!

O problema ficou com o comando de copiar.. pois ele funciona apenas na classe get. e gostaria de utilizar ele na classe browse (Tbrowse), isto é fácil de resolver criando uma função de copiar para cada classe, e alterar o set key dependendo de qual classe utilizar! mais ai deixa de ser genérica e passa a ser mais especifica! mas não sei como saber se tem algum objeto browse ativo ou não... existe isso?

Fui claro?

:xau
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar de usuário

viniciuspc
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 40
Data de registro: 19 Dez 2006 16:18
Cidade/Estado: Rio de Janeiro
Curtiu: 38 vezes
Mens.Curtidas: 4 vezes




Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro