Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Posicionar linha no Memo


Aleksander

Question

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;

Edited by Aleksander
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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);

Edited by Gavel
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
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...