Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Copiar texto exibido no Memo


Aleksander

Question

4 answers to this question

Recommended Posts

  • 0
Boa tarde amigos, tenho o Memo1 com altura suficiente para exibir 10 linhas, neste Memo1 tenho um texto com mais de 50 linhas, desejo copiar para o Memo2 somente a parte do texto que está sendo exibida no Memo1. Como devo fazer?
Aleksander, de uma forma simplista, usando a informação que você passou, bastaria que você copiasse as 10 linhas como você mesmo disse. A propriedade Lines é um objeto do tipo TStrings. Assim sendo, basta indexar as 10 primeiras linhas do seu memo1.

Algo assim:

var
  Idx: integer;
begin
  Memo2.Lines.Clear;  // limpa memo2
  Idx := 0;
  while (Idx < 10) and (Idx < Memo1.Lines.Count) do
  begin
    Memo2.Add(Memo1.Lines[Idx]);
    Inc(Idx);
  end;
end;

Dê uma experimentada e veja se era isso.

Abraços

Link to comment
Share on other sites

  • 0
Boa tarde amigos, tenho o Memo1 com altura suficiente para exibir 10 linhas, neste Memo1 tenho um texto com mais de 50 linhas, desejo copiar para o Memo2 somente a parte do texto que está sendo exibida no Memo1. Como devo fazer?
Aleksander, de uma forma simplista, usando a informação que você passou, bastaria que você copiasse as 10 linhas como você mesmo disse. A propriedade Lines é um objeto do tipo TStrings. Assim sendo, basta indexar as 10 primeiras linhas do seu memo1.

Algo assim:

var
  Idx: integer;
begin
  Memo2.Lines.Clear;  // limpa memo2
  Idx := 0;
  while (Idx < 10) and (Idx < Memo1.Lines.Count) do
  begin
    Memo2.Add(Memo1.Lines[Idx]);
    Inc(Idx);
  end;
end;

Dê uma experimentada e veja se era isso.

Abraços

Micheus, este seu codigo copia as 10 primeiras linhas do Memo1, mas o que prentendo é copiar o trecho que está sendo exibido, digamos que estou lendo o texto de 50 linhas e que estão sendo exibidas as linhas 15 a 25 porque o Memo1 tem a altura para exibir 10 linhas, desejo copiar só aquelas linhas que estou visualizando no

momento independente da posição do cursor.

Link to comment
Share on other sites

  • 0
Micheus, este seu codigo copia as 10 primeiras linhas do Memo1, mas o que prentendo é copiar o trecho que está sendo exibido, digamos que estou lendo o texto de 50 linhas e que estão sendo exibidas as linhas 15 a 25 porque o Memo1 tem a altura para exibir 10 linhas, desejo copiar só aquelas linhas que estou visualizando no momento independente da posição do cursor.
Aleksander, como tinha dito, era um exemplo simplista - não estava certo do que você realmente queria - agora ficou mais claro. :blush:

Façamos uso da mensagem EM_GETFIRSTVISIBLELINE. Ela retorna o índice, baseado em 0 (zero), da primeira linha visível. O exemplo ficaria assim:

var
  Idx,
  IdxFinal: integer;
begin
  Memo2.Lines.Clear;  // limpa memo2
  Idx := Memo1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
  IdxFinal := Idx +10;
  while (Idx < IdxFinal) and (Idx < Memo1.Lines.Count) do
  begin
    Memo2.Add(Memo1.Lines[Idx]);
    Inc(Idx);
  end;
end;

Abraços

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...