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:
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