Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Delphi x64
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый Вчера, 12:56
Chel2023 Chel2023 вне форума
Прохожий
 
Регистрация: 02.11.2023
Сообщения: 4
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Поиск текста в компоненте мемо на форме

Привет, как можно найти текст в компоненте мемо на форме не используя AnsiPOS, пожалуйста приведете пример.
Ответить с цитированием
  #2  
Старый Вчера, 18:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,107
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну это, конечно, извращение, но например как то так:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    lbSearch: TLabel;
    edSearch: TEdit;
    cbCaseSensitive: TCheckBox;
    edText: TMemo;
    btFind: TButton;
    btFindNext: TButton;
    procedure btFindClick(Sender: TObject);
    procedure btFindNextClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function SearchForText(AMemo : TMemo; AText : String; ACaseSensitive : Boolean; AStartPos : Integer) : Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.btFindClick(Sender: TObject);
var
  Idx : Integer;
begin
  Idx := SearchForText(edText, edSearch.Text, cbCaseSensitive.Checked, 1);
  If Idx = 0
    Then
      Begin
        MessageDlg('Not found.',mtInformation,[mbOK],0);
        edSearch.SetFocus;
      End
    Else
      Begin
        edText.SelStart := Idx-1;
        edText.SelLength := Length(edSearch.Text);
        edText.SetFocus;
      End;

end;

procedure TForm1.btFindNextClick(Sender: TObject);
var
  Idx : Integer;
begin
  If edText.SelLength = 0
    Then btFindClick(Sender)
    Else
      Begin
        Idx := SearchForText(edText, edSearch.Text, cbCaseSensitive.Checked, edText.SelStart+2);
        If Idx > 0
          Then
            Begin
              MessageDlg('Not found.',mtInformation,[mbOK],0);
              edSearch.SetFocus;
            End
          Else
            Begin
              edText.SelStart := Idx-1;
              edText.SelLength := Length(edSearch.Text);
              edText.SetFocus;
            End;
      End;
end;

function TForm1.SearchForText(AMemo: TMemo; AText: String;
  ACaseSensitive: Boolean; AStartPos: Integer): Integer;

  function IsCharsEqual(Ch1, Ch2 : Char; IsCaseSensitive : Boolean) : Boolean;
  begin
    If IsCaseSensitive
      Then Result := Ch1 = Ch2
      Else Result := UpperCase(Ch1) = UpperCase(Ch2);
  end;

  function IsStringsEqual(Str1, Str2 : String;IsCaseSensitive : Boolean) : Boolean;
  begin
    If IsCaseSensitive
      Then Result := Str1 = Str2
      Else Result := UpperCase(Str1) = UpperCase(Str2);
  end;

var
  I : Integer;
  strText : String;
  strSample : String;
begin
  Result := 0;
  If Atext = '' Then Exit;

  strText := AMemo.Lines.Text;
  For I := AStartPos To Length(strText) Do
    If IsCharsEqual(AText[1], strText[i], ACaseSensitive) Then
      Begin
        strSample := Copy(strText,I,Length(AText));
        If IsStringsEqual(AText,strSample,ACaseSensitive) Then
          Begin
            Result := I;
            Break;
          End;
      End;
end;

end.

Но вообще, это просто своя имлементация расширенного PosEx или чего-то подобного.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:24.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025