本文整理自网络,侵删。
unit Unit2;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type TForm2 = class(TForm) Memo1: TMemo; Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form2: TForm2;
implementation
{$R *.dfm}
function search(pat: string; text: string): integer;var i, j, k, m, n: integer; skip: array [0..MAXCHAR] of integer; found: boolean;begin found := FALSE; search := 0; m := length(pat); if m=0 then begin search := 1; found := TRUE; end; for k:=0 to MAXCHAR do skip[k] := m; {*** Preprocessing ***} for k:= m-1 downto 1 do skip[ord(pat[k])] := m-k; k := m; n := length(text); {*** Search ***} while not found and (k <= n) do begin i := k; j := m; while (j >= 1) do begin if text[i] <> pat[j] then j := -1 else begin j := j-1; i := i-1; end; if j = 0 then begin search := i+1; found := TRUE; end; k := k + skip[ord(text[k])]; end; end;end;
procedure TForm2.Button1Click(Sender: TObject);var FoundIdx: Integer;begin // search() returns 0 if the text isn't found or the index of the // start of the string if the text is found FoundIdx := search(Edit1.Text, Memo1.Text); if FoundIdx > 0 then begin // Found text: highlight it in memo (TMemo.HideSelection must be // false for this to work). Since memo selections are 0 based, we // subtract 1 from the found index, which is 1 based.
Memo1.SelStart := FoundIdx - 1; Memo1.SelLength := Length(Edit1.Text); Memo1.SetFocus; end else ShowMessage('Text not found');end;
end.
相关阅读 >>
Delphi 2009 之 tcategorypanelgroup[2]: headeralignment、gradientdirection
更多相关阅读请进入《Delphi》频道 >>