Comando copiar

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

Moderador: Moderadores

Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Comando copiar

Mensagem 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 :(
Editado pela última vez por Toledo em 29 Abr 2016 10:31, em um total de 1 vez.
Razão: 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 do usuário
viniciuspc
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Dez 2006 17:18
Localização: Rio de Janeiro

Comando copiar

Mensagem 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
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Comando copiar

Mensagem 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?
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 do usuário
viniciuspc
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Dez 2006 17:18
Localização: Rio de Janeiro

Comando copiar

Mensagem 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
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Comando copiar

Mensagem 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
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 do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Comando copiar

Mensagem 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?
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 do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Comando copiar

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Comando copiar

Mensagem 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
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 do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Comando copiar

Mensagem 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	 
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 do usuário
viniciuspc
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Dez 2006 17:18
Localização: Rio de Janeiro

Comando copiar

Mensagem 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
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Comando copiar

Mensagem por Daiane »

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 do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Comando copiar

Mensagem 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...
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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Comando copiar

Mensagem por asimoes »

Daiane,

O fórum mais apropriado para as suas duvidas é o fiveWin https://pctoledo.org/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 do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Comando copiar

Mensagem 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.
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 do usuário
viniciuspc
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Dez 2006 17:18
Localização: Rio de Janeiro

Comando copiar

Mensagem 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
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Responder