03. august 2003 - 19:09Der er
17 kommentarer og 1 løsning
Fejl med TFinddialog
Jeg proever at soege i en RichEdit med en TFinddialog, men der er bare et problem. Naar jeg saetter den til at soege tilbage, soeger den alligevel fremad. En lidt irriterende fejl, og jeg har proevet, hjalp desvaerre ikke.
Gøre det præcist samme måde.. tror at jeg har brugt dit kode før. Sådan her:
procedure TForm1.FindDialog1Find(Sender: TObject); var st: TSearchTypes; newpos: integer; Mem : TRichEdit; FindDialog : TFinddialog; begin Mem := TRichEdit(FindComponent('Edits' + IntToStr(Dokumenter.ActivePage.Tag))); Finddialog := (Sender as TFinddialog)
if frMatchCase in FindDialog1.Options then st := st+[stMatchCase];
if frWholeWord in FindDialog1.Options then st := st+[stWholeWord];
if Mem.SelLength > 0 then Mem.SelStart := Mem.SelStart + 1;
if newpos <> -1 then begin Mem.SelStart := newpos; Mem.SelLength := Length(FindDialog1.FindText); end else begin MessageDlg('"'+FindDialog1.FindText+'"'+' '+'blev ikke fundet!',mtInformation,[mbOK],0); Mem.SelStart := 0; end; end;
Der er lidt fejl i denne kode, og det er sikkert heller ikke den bedste løsning, men det virker (næsten):
procedure TForm1.FindDialogFind(Sender: TObject); var st: TSearchTypes; newpos: integer; FindDialog: TFindDialog;
function VendTekst(Tekst: String): String; var I: Integer; begin Result := ''; for I := 1 to Length(Tekst) do Result := Tekst[I] + Result; end;
begin FindDialog := (Sender as TFindDialog);
if frMatchCase in FindDialog.Options then st := st+[stMatchCase];
if frWholeWord in FindDialog.Options then st := st+[stWholeWord];
if frDown in FindDialog.Options then begin if RichEdit1.SelLength > 0 then RichEdit1.SelStart := RichEdit1.SelStart + 1; newpos := RichEdit1.FindText(FindDialog.FindText, RichEdit1.SelStart, Length(RichEdit1.Text), st) end else begin if RichEdit1.SelLength > 0 then RichEdit1.SelStart := RichEdit1.SelStart - 1; tmpRichEdit.Text := VendTekst(RichEdit1.Text); newpos := tmpRichEdit.FindText(VendTekst(FindDialog.FindText), Length(RichEdit1.Text) - RichEdit1.SelStart + 1 - Length(FindDialog.FindText), Length(tmpRichEdit.Text), st); if newpos > -1 then newpos := Length(RichEdit1.Text) - newpos - Length(FindDialog.FindText); end;
if newpos > -1 then begin RichEdit1.SelStart := newpos; RichEdit1.SelLength := Length(FindDialog.FindText); end else begin MessageDlg('"'+FindDialog.FindText+'"'+' '+'blev ikke fundet!',mtInformation,[mbOK],0); RichEdit1.SelStart := 0; end; end;
virker næsten, men når jeg sætter den til at søge tilbage, så hvis der står "eeee" i min richedit, og jeg søger efter "e", så springer den én "e" over og marker den næste (kun når den er sat til at søge baglæns).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.