Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Posicionar linha no Memo


Aleksander

Pergunta

Olá, abaixo tem um código que localiza palavras no texto do Memo, ele funciona, quando mostra a palavra pesquisada dependendo da posição da palavra no texto ela aparece na primeira linha do Memo, outras palavras aparecem na última linha do Memo.

Eu gostaria que todas as palavras pesquisadas fossem exibidas na primeira linha do Memo porque no meu texto a primeira palavra esta acompanhada de sua definição que tem até cinco linhas e quando ela aparece na última linha é necessário usar scroll para ver o restante do texto, mas se ela aparecer na primeira linha o texto se enquadra perfeitamente e o resultado fica muito melhor.

Por exemplo, digamos que o desenho abaixo é um Memo..

-------------------------------------------------------------------------------------------------

| quero que a palavra apareça só nesta linha

|

|

| e não apareça nesta linha.

--------------------------------------------------------------------------------------------------

Usei um Memo com altura para exibir 5 linhas e um Button com o código, agradeço pelo espaço e pela atenção.

Abraços.

----------------------------------------------------------------------------------------------------

...

private

FSelPos: integer;

...

procedure TForm1.Button1Click(Sender: TObject);

var

S : string;

Startpos : integer;

begin

if FSelPos = 0 then

StartPos := FSelPos + Length(Edit1.text);

S := Copy(Memo1.Lines.Text, StartPos, MaxInt);

S := Memo1.Lines.Text;

StartPos := 1;

FSelPos := Pos(Edit1.text, S);

if FSelPos > 0 then

begin

FSelPos := FSelPos + StartPos - 1;

Memo1.SelStart := FSelPos - 1;

Memo1.SelLength := Length(Edit1.text);

Memo1.SetFocus;

end;

end;

Editado por Aleksander
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Eu gostaria que todas as palavras pesquisadas fossem exibidas na primeira linha do Memo porque no meu texto a primeira palavra esta acompanhada de sua definição que tem até cinco linhas e quando ela aparece na última linha é necessário usar scroll para ver o restante do texto, mas se ela aparecer na primeira linha o texto se enquadra perfeitamente e o resultado fica muito melhor.

Oi colega, dei uma ajeitada no seu codigo para ficar como voce esta querendo

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
    FSelPos: integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure ScrollMemo(Memo: TMemo; Direction: Integer); 
var 
  ScrollMessage: TWMVScroll;
  I: Integer; 
begin 
  ScrollMessage.Msg := WM_VSCROLL;
  Memo.Lines.BeginUpdate; 
  try
    for I := 0 to Memo.Lines.Count do 
    begin 
     ScrollMessage.ScrollCode := Direction; 
     ScrollMessage.Pos := 0; 
     Memo.Dispatch(ScrollMessage);
    end; 
  finally 
    Memo.Lines.EndUpdate; 
  end; 
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
var
   S : string;
   Startpos : integer;
begin
   if FSelPos = 0 then
      StartPos := FSelPos + Length(Edit1.text);
   S := Copy(Memo1.Lines.Text, StartPos, MaxInt);
   S := Memo1.Lines.Text;
   StartPos := 1;
   FSelPos := Pos(Edit1.text, S);
   if FSelPos > 0 then
      begin
         FSelPos := FSelPos + StartPos - 1;
         Memo1.SelStart := FSelPos - 1;
         ScrollMemo(Memo1, SB_LINEDOWN);
         Memo1.SelLength := Length(Edit1.text);
         Memo1.SetFocus;
      end;

end;


end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

      Memo1.SetFocus;
      { Mantém pressionada "CTRL" }
      Keybd_Event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
      { Pressiona "HOME" }
      Keybd_Event(VK_HOME, 0, 0, 0);
      { Libera (solta) "CTRL" }
      Keybd_Event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);

Editado por Gavel
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...