Página 1 de 1

Comando copiar

Enviado: 28 Abr 2016 09:12
por Daiane
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 :(

Comando copiar

Enviado: 28 Abr 2016 09:53
por viniciuspc
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

Comando copiar

Enviado: 28 Abr 2016 09:56
por Daiane
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?

Comando copiar

Enviado: 28 Abr 2016 10:07
por viniciuspc
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

Comando copiar

Enviado: 28 Abr 2016 10:38
por Jairo Maia
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...

Código: Selecionar todos

#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

Comando copiar

Enviado: 28 Abr 2016 10:58
por Daiane
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?

Comando copiar

Enviado: 28 Abr 2016 12:20
por Toledo
Veja se este código copia para a área de transferência:

Código: Selecionar todos

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

Comando copiar

Enviado: 28 Abr 2016 13:09
por Jairo Maia
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:

Código: Selecionar todos

#include "hbgtinfo.ch"
E ao compilar acrescentar a lib: -lgtwvg
:-Y

Comando copiar

Enviado: 28 Abr 2016 14:13
por Daiane
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

Código: Selecionar todos

*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	 

Comando copiar

Enviado: 28 Abr 2016 14:43
por viniciuspc
Interessante, não conhecia este comando!

https://pctoledo.org/forum/viewtopic.php?p=72440

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

[]´s

Comando copiar

Enviado: 28 Abr 2016 14:55
por Daiane
Sera q é alguma biblioteca? ou pelo fato deu usar o fivewin?
pois não adiantou,nem copiou e nem colou

Comando copiar

Enviado: 28 Abr 2016 17:01
por Jairo Maia
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...

Comando copiar

Enviado: 28 Abr 2016 17:05
por asimoes
Daiane,

O fórum mais apropriado para as suas duvidas é o fiveWin https://pctoledo.org/forum/viewforum.php?f=2

Comando copiar

Enviado: 29 Abr 2016 09:37
por Daiane
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.

Comando copiar

Enviado: 02 Mai 2016 09:59
por viniciuspc
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!

Código: Selecionar todos

Function Ctrl_C()
******** **************************************************
* copia o conteudo de um get para a area de transferencia *
* https://pctoledo.org/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()
******** *************************************************
* https://pctoledo.org/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