Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MasterDelphi

Copiando conteudo de um Memo...

Recommended Posts

Estou quebrando a cabeça pra tentar copiar o conteúdo de um Memo e colar em qualquer lugar do PC aonde da para colocar texto, um exemplo:Eu digito num Memo qualquer coisa + ou - assim:Eae tudo bem?Tudo, e você?Td tbm.Depois de eu digitar isso no Memo eu minimizo o programa (ficando em segundo plano), e vou para um bloco de notas e perto a tecla F6 e ele teria que colar linha por linha fazer da seguinte forma:1linha do memo = "Eae tudo bem?" ENTER2linha do memo = "Tudo, e você?"ENTER3linha do memo = "Td bem."ENTERNo bloco de notas iria aparecer assim:Eae tudo bem?Tudo, e você?Td bem.A parte de perta o F6 e de dar ENTER eu ja fiz e esta funcionando.OBS: O ENTER é como se eu tivesse apertado a tecla ENTER no teclado, mais é o programa que eu fiz que simula a clicagem.O que eu não estou conseguindo é aparte de copiar o conteúdo do Memo e colar dando Enter linha por linha.Deu pra intender ^^?Exemplo na teoria:

ENTER> 1ªlinha do memo copia > "Eae tudo bem?" ColaENTER> 2ªlinha do memo copia > "Tudo, e você?" ColaENTER> 3ªlinha do memo copia > "Td bem." Cola eENTER

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo, mas montei um pequeno teste colocando em um notepad...

 

 

var	hEdit, hTela: THandle;	x, y: integer;beginhTela:=FindWindow('notepad',nil);if hTela = 0 then	begin	Winexec('notepad',5);	hTela:=FindWindow('notepad',nil);	end;if hTela > 0 then	begin	hEdit:=FindWindowEx(hTela,0,'Edit',nil);	if hEdit > 0 then		begin		for x:=0 to Memo1.Lines.Count - 1 do			begin			for y:=1 to Length(Memo1.Lines.Strings[x]) do				PostMessage(hEdit,WM_CHAR,Ord(Memo1.Lines.Strings[x][y]),0);			if x < (Memo1.Lines.Count - 1) then				PostMessage(hEdit,WM_CHAR,Ord(#13),0);			end;		end;	end;

No caso para ser em qualquer local, precisa ser utilizado o CopyToClipboard, fazendo algo como:

 

Memo1.SelectAll;Memo1.CopyToClipboard;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor dizendo, é como se o programa fosse um Bind (um atalho), eu escrevo no Memo qualquer coisa que eu queira, dae eu vou em algum lugar clico no botão F6 (que é o padrao do programa) e ele ira Copiar/Colar o conteúdo que está no Memo para onde eu tiver, poderia ser aqui neste campo a onde eu estou digitando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa perfeito, é isso mesmo que eu estou precisando, só que esse esta funcionando só no notpad como você disse, agora teria que funcionar em tudo e, ele teria que dar Enter em cada linha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O codigo:

Memo1.SelectAll;Memo1.CopyToClipboard;
Ele seleciona o conteúdo do Memo e copia, ate ae tudo bem e, deu certo.Só que num teria como dar enter, copiar a primeira linha, colar e dar enter?Exemplo:

Enter>Copia 1ª linha>Cola> Enter>Copia 2ª linha>Cola> Enter>Copia 3ª linha>Cola> Enter>Copia 4ª linha>Cola>

Tentei fazer essa parte e não deu certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas como que ele iria descobri onde deve de colar, para colar basta usar o PasteFromClipboard, mas não sei como você vai fazer para ele saber onde ele esta e onde deve de colar

 

Ou poderia tentar simular o Ctrl + V

Compartilhar este post


Link para o post
Compartilhar em outros sites

To ligado.... coloquei o PasteFromClipboard só que não deu...Tem esse codigo ae:Ctrl+C

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
Ctrl+V
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
Simula o ENTER do teclado:
keybd_event(VK_RETURN, 0, 0, 0);
Só que com esse codigo daria pra fazer o esquema que eu citei de copiar linha por linha:

Enter>Copia 1ª linha>Cola>Enter>Copia 2ª linha>Cola>Enter>Copia 3ª linha>Cola>Enter>Copia 4ª linha>Cola>ENTER

Você conseguiria montar esse esquema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enter>Copia 1ª linha>Cola>Enter>Copia 2ª linha>Cola>Enter>Copia 3ª linha>Cola>Enter>Copia 4ª linha>Cola>ENTER

Você conseguiria montar esse esquema?Os códigos estão no post anterior, é que eu tentei e tentei e não estou conseguindo...se não der, não tem problema ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vo colocar aqui todo o código que estou usando, dae se você tiver alguma ideia, pode postar ae.

 

unit uMain;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, AppEvnts, StdCtrls, Buttons, Menus, CoolTrayIcon, ExtCtrls;type  TFrmMain = class(TForm)	CoolTrayIcon1: TCoolTrayIcon;	PopupMenu1: TPopupMenu;	este1: TMenuItem;	Fechar1: TMenuItem;	Esconder1: TMenuItem;	N1: TMenuItem;	ApplicationEvents1: TApplicationEvents;	Bevel1: TBevel;	BitBtn1: TBitBtn;	BitBtn2: TBitBtn;	Image1: TImage;	txtMsg: TMemo;	Label1: TLabel;	TAtivar: TTimer;	procedure FormKeyDown(Sender: TObject; var Key: Word;	  Shift: TShiftState);	procedure Fechar1Click(Sender: TObject);	procedure este1Click(Sender: TObject);	procedure Esconder1Click(Sender: TObject);	procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);	procedure TAtivarTimer(Sender: TObject);  private	{ Private declarations }  public	{ Public declarations }  end;var  FrmMain: TFrmMain;implementation{$R *.dfm}procedure TFrmMain.FormKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginend;procedure TFrmMain.Fechar1Click(Sender: TObject);beginapplication.Terminate;end;procedure TFrmMain.este1Click(Sender: TObject);beginCoolTrayIcon1.ShowMainForm;end;procedure TFrmMain.Esconder1Click(Sender: TObject);beginApplication.Minimize;CoolTrayIcon1.HideMainForm;end;procedure TFrmMain.ApplicationEvents1Idle(Sender: TObject;  var Done: Boolean);begin	if (GetASyncKeyState ( Vk_F6) <> 0)  thenif TAtivar.enabled=false then beginTAtivar.enabled:=true; endelse begin Tativar.Enabled:=false; end;end;procedure TFrmMain.TAtivarTimer(Sender: TObject);begintxtmsg.SelectAll;keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);TAtivar.enabled:=False;end;end.
Este ultimo aqui procedure TFrmMain.TAtivarTimer(Sender: TObject); ta errado, não esta funcionando....

 

Ve o que da pra fazer ae... Pode ser Copiar e colar só...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria que tentar colocar o código:

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
Logo aonde você faz a validação do vk_F6, para que assim que precione o F6 já tente colar, o timer da forma que esta usando realmente não vai servir neste momento para nada, acho que para copiar o conteúdo do memo é melhor usar o outro comando, no caso quando precionar F6 fazer a copia do memo e logo após executar o ctrl+v

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para fazer a copia do Memo como eu deveria fazer? não to conseguindo...

 

 

procedure TFrmMain.ApplicationEvents1Idle(Sender: TObject;  var Done: Boolean);begin	if (GetASyncKeyState ( Vk_F6) <> 0)  then	begin	txtMSG.SelectAll;	keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);	keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);	keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);	keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);	end;	end;	keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);	keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);	keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);	keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.