Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Der er både fordele og ulemper ved at bruge (Sender as TEtEllerAndet) - ulempen er her, at man ikke kan se hvem sender er. Jeg er på vej væk fra den praksis efter et par dårlige oplevelser (man har et standpunkt indtil man tager et nyt)
Du kan prøve at sætte en debug-linie ind foran din typecast:
Den procedure jeg bruger er en Speedbuttom.click, men det er der vel ikke noget galt i, eller hvad mener du med " Jeg gætter på at det er en knap og ikke FindDialog formen."
Nu har jeg prøvet at gøre sådan her, og så får jeg ikke fejlen nu kommer søg box'en fint frem men der sker ikke noget når jeg trykker på knappen søg her er min nye kode :
procedure TFrmEditor.SPFindClick(Sender: TObject); begin FindDialog1.Execute end;
procedure TFrmEditor.FindDialog1Find(Sender: TObject); var st: TSearchTypes; newpos: integer; FindDialog: TFindDialog; begin FindDialog := (Sender as TFindDialog);
if frMatchCase in FindDialog.Options then st := st+[stMatchCase];
if frWholeWord in FindDialog.Options then st := st+[stWholeWord];
if RichEdit1.SelLength > 0 then RichEdit1.SelStart := RichEdit1.SelStart + 1;
if newpos <> -1 then begin SetFocus; RichEdit1.SelStart := newpos; RichEdit1.SelLength := Length(FindDialog.FindText); end else begin MessageDlg('Slutning af filen er nået',mtInformation,[mbOK],0); RichEdit1.SelStart := 0; end;
Jeg har ikke lige kigget på dit seneste problem, men hvis du forsøger at typecaste en TSpeedButton til en TFindDialog, så vil det give problemer. Det var det jeg refererede til.
I øvrigt: Det er lidt uheldigt at du bruger st som en TSearchTypes. Jeg kan godt se at du bruger initialerne, men det er nærmest en De Facto standard at st = string så derfor kan det være forvirrende.
Hvad gør:
if RichEdit1.SelLength > 0 then RichEdit1.SelStart := RichEdit1.SelStart + 1;
Hvis der er markeret en tekst så skal den da ikke incrementere noget, eller hvad?
Umiddelbart (= ikke testet) synes jeg det virker logisk at gøre det således:
with RichEdit1 do if SelLength = 0 then NewPos := FindText(FindDialog.FindText, 0, length(Text) - 1, st) // Usikker mht. -1 -> test else NewPos := FindText(FindDialog.FindText, SelStart, SelLength, st);
Efter at have brugt lidt tid på det så er det slet ikke så dumt endda. Min version ser sådan ud (reText = RichEdit osv.). Jeg har slået UpDown knapperne fra, idet jeg legede lidt med ReverseString på både tekst og søgestreng, men det blev aldrig homogent og eksemplet blev ødelagt.
procedure TfrmMain.btnSearchClick(Sender: TObject); begin reText.SelStart := 0; FindDialog.Execute; end;
procedure TfrmMain.FindDialogFind(Sender: TObject); var NewPos : Integer; SearchSt : string; SearchTypes : TSearchTypes; begin SearchTypes := []; if FrMatchCase in FindDialog.Options then SearchTypes := SearchTypes + [StMatchCase];
if FrWholeWord in FindDialog.Options then SearchTypes := SearchTypes + [StWholeWord];
SearchSt := FindDialog.FindText;
with reText do begin if not (frFindNext in FindDialog.Options) then NewPos := FindText(SearchSt,0,MaxInt,SearchTypes) else begin SelStart := SelStart + length(FindDialog.FindText); NewPos := FindText(SearchSt,SelStart,MaxInt,SearchTypes); end;
if NewPos <> -1 then begin Setfocus; SelStart := NewPos; SelLength := length(SearchSt); end else if MessageDlg('EOF, start forfra?',mtConfirmation,[mbYes,mbNo],0) = mrYes then SelStart := 0; end; end;
Er de to procedurer koblet op med hhv. knappens OnClick og FindDialogens OnFind events?
Synes godt om
Ny brugerNybegynder
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.