Avatar billede armena Nybegynder
03. august 2003 - 19:09 Der 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.

Haaber at i forstaar og jeg ved i kan hjaelpe!

MVH.
Armen L.A.
Avatar billede borrisholt Novice
04. august 2003 - 08:18 #1
Avatar billede armena Nybegynder
04. august 2003 - 20:17 #2
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;

newpos := Mem.FindText(FindDialog1.FindText, Mem.SelStart, Length(Mem.Text), st);

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;

Virker bare ik :(
Avatar billede armena Nybegynder
04. august 2003 - 20:20 #3
Finddialog1 er Finddialog (glemte at rette), men det virker ikke stadig.
Avatar billede athlon-pascal Juniormester
04. august 2003 - 20:56 #4
Så vidt jeg kan se, understøtter TRichEdit.FindText det slet ikke som standard.
Avatar billede armena Nybegynder
04. august 2003 - 21:46 #5
athlon-pascal> Men det virker jo, bare ikke når man sætter den til at søge tilbage (up).
Avatar billede armena Nybegynder
04. august 2003 - 21:55 #6
det virker også nårman sætter den til at søge tilbage (up) men den søger stadigvæk bare fremad (down)
Avatar billede athlon-pascal Juniormester
04. august 2003 - 22:00 #7
"Så vidt jeg kan se, understøtter TRichEdit.FindText det slet ikke som standard."
Med "det" mente jeg at søge tilbage :-)
Avatar billede armena Nybegynder
04. august 2003 - 22:09 #8
ahh sorry :) misforstod :)
Men hvad gør jeg så ?
Avatar billede athlon-pascal Juniormester
04. august 2003 - 22:18 #9
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;

Den oprindelige kode er fra Jens' eksempel.
Avatar billede athlon-pascal Juniormester
04. august 2003 - 22:19 #10
Du skal indsætte en ekstra TRichEdit på din form, sætte name=tmpRichEdit og visible=false :-)
Avatar billede armena Nybegynder
05. august 2003 - 02:36 #11
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).
Avatar billede athlon-pascal Juniormester
05. august 2003 - 15:00 #12
Det er ikke den eneste fejl...
Avatar billede armena Nybegynder
05. august 2003 - 22:14 #13
okay, hvilke andre fejl er der? og kan du fixe dem ?
Avatar billede athlon-pascal Juniormester
06. august 2003 - 13:57 #14
Det er ikke noget jeg lige har mod på (det driller for meget) ...
Avatar billede armena Nybegynder
07. august 2003 - 01:15 #15
argh!! Andre der kan hjælpe :(
Avatar billede armena Nybegynder
07. august 2003 - 01:50 #16
Fandt ud af det!
Mem.SelStart := Mem.SelStart -1;
Fjerner man -1 så virker det :)
Avatar billede armena Nybegynder
30. august 2003 - 05:27 #17
athlon-pascal, læg lige et svar :)
Avatar billede athlon-pascal Juniormester
30. august 2003 - 11:40 #18
Jeg håber ikke du findeer nye fejl :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester