From: Olivier S. <ob...@us...> - 2005-08-10 14:42:41
|
Update of /cvsroot/jvcl/dev/JVCL3/run In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24635/dev/JVCL3/run Modified Files: JvFindReplace.pas Log Message: Mantis 2515, 2503, 2504, 2505, 2507, 2508, 2509, 2513: Lots of bug fixes in TJvFindReplace. Index: JvFindReplace.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvFindReplace.pas,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** JvFindReplace.pas 17 Feb 2005 10:20:34 -0000 1.27 --- JvFindReplace.pas 10 Aug 2005 14:42:32 -0000 1.28 *************** *** 47,51 **** var Terminate: Boolean) of object; TJvReplaceAllEvent = procedure(Sender: TObject; ReplaceCount: Integer) of object; ! TJvFindReplace = class(TJvComponent) private --- 47,51 ---- var Terminate: Boolean) of object; TJvReplaceAllEvent = procedure(Sender: TObject; ReplaceCount: Integer) of object; ! TJvFindReplace = class(TJvComponent) private *************** *** 64,73 **** FOptions: TFindOptions; FPosition: TPoint; - FLeft: Integer; - FTop: Integer; FFast: Boolean; FHelpContext: THelpContext; FShowDialogs: Boolean; - FKeepText: Boolean; FFindText: string; FReplaceText: string; --- 64,70 ---- *************** *** 82,94 **** procedure SetReplaceText(const Value: string); procedure SetShowDialogs(Value: Boolean); - function GetPosition: TPoint; function GetTop: Integer; function GetLeft: Integer; - function GetOptions: TFindOptions; - function GetHelpContext: THelpContext; - function GetFindText: string; - function GetReplaceText: string; function ReplaceOne(Sender: TObject): Boolean; procedure UpdateDialogs; procedure NeedDialogs; protected --- 79,87 ---- procedure SetReplaceText(const Value: string); procedure SetShowDialogs(Value: Boolean); function GetTop: Integer; function GetLeft: Integer; function ReplaceOne(Sender: TObject): Boolean; procedure UpdateDialogs; + procedure UpdateProperties(sender: TObject); procedure NeedDialogs; protected *************** *** 102,105 **** --- 95,99 ---- procedure DoReplacedAll(Sender: TObject); virtual; procedure DoProgress(Position: Integer; var Terminate: Boolean); virtual; + procedure Loaded; override; public constructor Create(AOwner: TComponent); override; *************** *** 108,123 **** procedure Replace; virtual; procedure ReplaceAll(const SearchText, ReplaceText: string); virtual; ! property Position: TPoint read GetPosition write SetPosition; property Top: Integer read GetTop write SetDialogTop default -1; property Left: Integer read GetLeft write SetDialogLeft default -1; published property Fast: Boolean read FFast write FFast default False; ! property Options: TFindOptions read GetOptions write SetOptions; property EditControl: TCustomEdit read FEditControl write SetEditControl; ! property FindText: string read GetFindText write SetFindText; ! property KeepText: Boolean read FKeepText write FKeepText default False; ! property ReplaceText: string read GetReplaceText write SetReplaceText; property ShowDialogs: Boolean read FShowDialogs write SetShowDialogs default True; ! property HelpContext: THelpContext read GetHelpContext write SetHelpContext default 0; property OnFind: TNotifyEvent read FOnFind write FOnFind; property OnReplace: TNotifyEvent read FOnReplace write FOnReplace; --- 102,116 ---- procedure Replace; virtual; procedure ReplaceAll(const SearchText, ReplaceText: string); virtual; ! property Position: TPoint read FPosition write SetPosition; property Top: Integer read GetTop write SetDialogTop default -1; property Left: Integer read GetLeft write SetDialogLeft default -1; published property Fast: Boolean read FFast write FFast default False; ! property Options: TFindOptions read FOptions write SetOptions; property EditControl: TCustomEdit read FEditControl write SetEditControl; ! property FindText: string read FFindText write SetFindText; ! property ReplaceText: string read FReplaceText write SetReplaceText; property ShowDialogs: Boolean read FShowDialogs write SetShowDialogs default True; ! property HelpContext: THelpContext read FHelpContext write SetHelpContext default 0; property OnFind: TNotifyEvent read FOnFind write FOnFind; property OnReplace: TNotifyEvent read FOnReplace write FOnReplace; *************** *** 144,155 **** JvConsts, JvResources, JvTypes; - type - TFoundText = record - StartAt: Longint; - EndAt: Longint; - isWhole: Boolean; - isSameCase: Boolean; - end; - procedure Error; begin --- 137,140 ---- *************** *** 183,187 **** function BoyerMoore(SubStr, S: PChar): Integer; var ! CharJump, MatchJump, BackUp: array [0..255] of Integer; PatLen, TextLen, u, uA, uB, uText, uPat: Integer; begin --- 168,172 ---- function BoyerMoore(SubStr, S: PChar): Integer; var ! CharJump, MatchJump, BackUp: array[0..255] of Integer; PatLen, TextLen, u, uA, uB, uText, uPat: Integer; begin *************** *** 250,288 **** end; ! { Find text, return a TFoundText } ! function FindInText(const Text, Search: string; FromPos, ToPos: Integer; Fast: Boolean): TFoundText; var ! Found: Integer; S: string; begin ! Result.StartAt := -1; // assume failure ! if Fast then ! Found := BoyerMoore(PChar(AnsiUpperCase(Search)), PChar(AnsiUpperCase(Copy(Text, FromPos + 1, ToPos)))) ! else ! Found := Pos(AnsiUpperCase(Search), AnsiUpperCase(Copy(Text, FromPos + 1, ToPos))); ! if Found > 0 then begin ! Result.StartAt := Found + FromPos - 1; ! Result.EndAt := Length(Search); ! S := Copy(Text, Result.StartAt - 1, Result.EndAt + 2); ! // check for extremes... ! // is find string the same as the whole string? ! if Length(Search) = Length(Text) then ! begin ! Result.isWhole := True; ! S := Text; ! end else begin ! // check for match at beginning or end of string ! if Result.StartAt - 1 < 0 then ! S := Copy(' ' + S, 1, Result.EndAt + 2); ! if Result.StartAt - 1 + Result.EndAt + 2 > Length(Text) then ! S := Copy(S + ' ', Length(Text)- Result.EndAt-1, Result.EndAt + 2); ! Result.isWhole := IsValidWholeWord(S); ! S := Copy(S, 2, Length(S) - 2); end; - Result.isSameCase := (AnsiCompareStr(trim(Search), trim(S)) = 0); end; end; --- 235,283 ---- end; ! { Find text, return a longint } ! function FindInText(const Text, Search: string; FromPos, Len: Integer; Fast, ! WholeWord, MatchCase: Boolean): longint; var ! Found, SearchLen, TextLen: Integer; S: string; begin ! Result := -1; // assume failure ! ! // first character in string is at position 1 ! if FromPos = 0 then ! FromPos := 1; ! ! Found := 1; ! while (Result = -1) and (Found > 0) do begin ! if Fast then ! Found := BoyerMoore(PChar(AnsiUpperCase(Search)), ! PChar(AnsiUpperCase(Copy(Text, FromPos, Len)))) else + Found := Pos(AnsiUpperCase(Search), AnsiUpperCase(Copy(Text, FromPos, Len))); + if Found > 0 then begin ! Result := Found + FromPos - 1; ! SearchLen := Length(Search); ! TextLen := Length(Text); ! FromPos := Result + SearchLen; ! // is match-case required and does it? ! if MatchCase and (AnsiCompareStr(Search, Copy(Text, Result, SearchLen)) <> 0) then ! Result := -1 ! // is whole-word-only required and is it? ! else if WholeWord and (SearchLen < TextLen) then ! begin ! // check for extremes... ! S := Copy(Text, Result - 1, SearchLen + 2); ! // check for match at beginning or end of string ! if Result = 1 then ! S := Copy(' ' + S, 1, SearchLen + 2); ! if Result - 1 + SearchLen + 1 > TextLen then ! S := Copy(S + ' ', Length(S) - SearchLen-2, SearchLen + 2); ! if not IsValidWholeWord(S) then ! result := -1; ! end; end; end; end; *************** *** 290,298 **** { invert and search } ! function FindInTextRev(const Text, Search: string; FromPos, ToPos: Integer; Fast: Boolean): TFoundText; begin ! Result := FindInText(StrRev(Text), StrRev(Search), FromPos, ToPos, Fast); ! if Result.StartAt > -1 then ! Result.StartAt := Length(Text) - Result.StartAt - Result.EndAt; end; --- 285,295 ---- { invert and search } ! function FindInTextRev(const Text, Search: string; FromPos, Len: Integer; ! Fast, WholeWord, MatchCase: Boolean): longint; begin ! Result := FindInText(StrRev(Text), StrRev(Search), FromPos, Len, Fast, ! WholeWord, MatchCase); ! if Result > -1 then ! Result := Length(Text) - (Result - 1) - (Length(Search) - 1); end; *************** *** 302,306 **** FOwner := AOwner; FHelpContext := 0; - FKeepText := False; FShowDialogs := True; FPosition := Point(-1, -1); --- 299,302 ---- *************** *** 341,348 **** var Txt: string; ! FoundPos: TFoundText; ! TmpOptions: TFindOptions; SLen, RLen, TLen: Integer; Terminate: Boolean; begin if not Assigned(FEditControl) then --- 337,344 ---- var Txt: string; ! FoundPos: longint; SLen, RLen, TLen: Integer; Terminate: Boolean; + WholeWord, MatchCase: Boolean; begin if not Assigned(FEditControl) then *************** *** 350,387 **** Terminate := False; UpdateDialogs; ! TmpOptions := FReplaceDialog.Options; Txt := FEditControl.Text; SLen := Length(SearchText); RLen := Length(ReplaceText); TLen := Length(Txt); ! FoundPos := FindInText(Txt, SearchText, EditControl.SelStart + EditControl.SelLength, TLen, True); ! // FoundPos := FindInText(Txt, SearchText, 0, TLen, True); ! if FoundPos.StartAt > -1 then begin DoReplacingAll; FNumberReplaced := 0; ! while FoundPos.StartAt > -1 do begin Inc(FNumberReplaced); ! if (frWholeWord in TmpOptions) and not FoundPos.isWhole then ! begin ! FoundPos := FindInText(Txt, SearchText, FoundPos.StartAt + RLen + 1, TLen + (RLen - SLen), True); ! Continue; ! end; ! if (frMatchCase in TmpOptions) and not FoundPos.isSameCase then ! begin ! FoundPos := FindInText(Txt, SearchText, FoundPos.StartAt + RLen + 1, TLen + (RLen - SLen), True); ! Continue; ! end; ! Delete(Txt, FoundPos.StartAt + 1, SLen); ! Insert(ReplaceText, Txt, FoundPos.StartAt + 1); ! FoundPos := FindInText(Txt, SearchText, FoundPos.StartAt + RLen + 1, TLen + (RLen - SLen), True); ! if FoundPos.StartAt mod 60 = 0 then ! begin ! DoProgress(FoundPos.StartAt, Terminate); ! if Terminate then ! Exit; ! end; end; FEditControl.Text := Txt; --- 346,373 ---- Terminate := False; UpdateDialogs; ! WholeWord := frWholeWord in FOptions; ! MatchCase := frMatchCase in FOptions; Txt := FEditControl.Text; SLen := Length(SearchText); RLen := Length(ReplaceText); TLen := Length(Txt); ! FoundPos := FindInText(Txt, SearchText, EditControl.SelStart + EditControl.SelLength, ! TLen, FFast, WholeWord, MatchCase); ! if FoundPos > -1 then begin DoReplacingAll; FNumberReplaced := 0; ! while FoundPos > -1 do begin Inc(FNumberReplaced); ! ! Delete(Txt, FoundPos, SLen); ! Insert(ReplaceText, Txt, FoundPos); ! FoundPos := FindInText(Txt, SearchText, FoundPos + RLen + 1, TLen + (RLen - SLen), FFast, WholeWord, MatchCase); ! ! DoProgress(FoundPos, Terminate); ! if Terminate then ! Exit; end; FEditControl.Text := Txt; *************** *** 437,440 **** --- 423,427 ---- FFindDialog.FindText := FFindText; FFindDialog.OnFind := DoOnFind; + FFindDialog.Position := FPosition; end; if not Assigned(FReplaceDialog) then *************** *** 445,448 **** --- 432,436 ---- FReplaceDialog.OnFind := DoOnFind; FReplaceDialog.OnReplace := DoOnReplace; + FReplaceDialog.Position := FPosition; end; end; *************** *** 450,525 **** procedure TJvFindReplace.UpdateDialogs; begin ! NeedDialogs; ! FFindDialog.Position := GetPosition; ! {$IFDEF VCL} ! FFindDialog.Top := GetTop; ! FFindDialog.Left := GetLeft; ! {$ENDIF VCL} ! {$IFDEF VisualCLX} ! FFindDialog.Position := Point(GetTop, GetLeft); ! {$ENDIF VisualCLX} ! FFindDialog.Options := FOptions; ! FFindDialog.HelpContext := GetHelpContext; ! FFindDialog.FindText := GetFindText; ! FReplaceDialog.Position := GetPosition; ! {$IFDEF VCL} ! FReplaceDialog.Top := GetTop; ! FReplaceDialog.Left := GetLeft; ! {$ENDIF VCL} ! {$IFDEF VisualCLX} ! FReplaceDialog.Position := Point(GetTop, GetLeft); ! {$ENDIF VisualCLX} ! FReplaceDialog.Options := FOptions; ! FReplaceDialog.HelpContext := GetHelpContext; ! FReplaceDialog.FindText := GetFindText; ! FReplaceDialog.ReplaceText := GetReplaceText; end; procedure TJvFindReplace.DoOnFind(Sender: TObject); var ! FoundPos: TFoundText; ! S: string; Offset: Integer; begin ! if FShowDialogs then ! S := TFindDialog(Sender).FindText ! else ! S := FFindText; ! if FKeepText then begin ! FFindText := TFindDialog(Sender).FindText; ! FReplaceText := TReplaceDialog(Sender).ReplaceText; end; - if (FEditControl.SelStart = 0) and (FEditControl.SelLength < 1) then - Offset := 0 - else - Offset := 1; - if not (frDown in TFindDialog(Sender).Options) then - FoundPos := FindInTextRev(FEditControl.Text, S, Length(FEditControl.Text) - FEditControl.SelStart + Offset, - Length(FEditControl.Text), FFast) - else - FoundPos := FindInText(FEditControl.Text, S, FEditControl.SelStart + Offset, Length(FEditControl.Text), FFast); ! if FoundPos.StartAt > -1 then begin ! if (frWholeWord in TFindDialog(Sender).Options) and not FoundPos.isWhole then ! DoFailed(Sender) ! else ! if (frMatchCase in TFindDialog(Sender).Options) and not FoundPos.isSameCase then ! DoFailed(Sender) ! else ! begin ! FEditControl.SetFocus; ! FEditControl.SelStart := FoundPos.StartAt; ! FEditControl.SelLength := FoundPos.EndAt; ! {$IFDEF VCL} ! SendMessage(FEditControl.Handle, EM_SCROLLCARET, 0, 0); ! {$ENDIF VCL} ! if Assigned(FOnFind) then ! FOnFind(Self); ! end end else --- 438,510 ---- procedure TJvFindReplace.UpdateDialogs; begin ! if not (csDesigning in ComponentState) and not (csLoading in ComponentState) then ! begin ! NeedDialogs; ! FFindDialog.Position := FPosition; ! FFindDialog.Options := FOptions; ! FFindDialog.HelpContext := FHelpContext; ! FFindDialog.FindText := FFindText; ! FReplaceDialog.Position := FPosition; ! FReplaceDialog.Options := FOptions; ! FReplaceDialog.HelpContext := FHelpContext; ! FReplaceDialog.FindText := FFindText; ! FReplaceDialog.ReplaceText := FReplaceText; ! end; ! end; ! ! procedure TJvFindReplace.UpdateProperties(sender: TObject); ! begin ! if Sender is TFindDialog then ! begin ! FPosition := TFindDialog(Sender).Position; ! FOptions := TFindDialog(Sender).Options; ! FHelpContext := TFindDialog(Sender).HelpContext; ! FFindText := TFindDialog(Sender).FindText; ! end; ! if Sender is TReplaceDialog then ! FReplaceText := TReplaceDialog(Sender).ReplaceText; end; procedure TJvFindReplace.DoOnFind(Sender: TObject); var ! FoundPos: longint; Offset: Integer; + WholeWord, MatchCase: Boolean; begin ! /// update the local properties with the current values from the dialog ! /// in case the user has changed the options (or the find/replace text) ! UpdateProperties(Sender); ! WholeWord := frWholeWord in FOptions; ! MatchCase := frMatchCase in FOptions; ! if not (frDown in FOptions) then begin ! Offset := FEditControl.SelStart; ! if Offset = 0 then ! Offset := 1; ! FoundPos := FindInTextRev(FEditControl.Text, FFindText, ! Length(FEditControl.Text) - Offset, Length(FEditControl.Text), FFast, ! WholeWord, MatchCase) ! end else ! begin ! Offset := FEditControl.SelStart + FEditControl.SelLength; ! if Offset = 0 then ! Offset := 1; ! FoundPos := FindInText(FEditControl.Text, FFindText, Offset, ! Length(FEditControl.Text), FFast, WholeWord, MatchCase); end; ! if FoundPos > -1 then begin ! FEditControl.SetFocus; ! FEditControl.SelStart := FoundPos - 1; ! FEditControl.SelLength := Length(FFindText); ! {$IFDEF VCL} ! SendMessage(FEditControl.Handle, EM_SCROLLCARET, 0, 0); ! {$ENDIF VCL} ! if Assigned(FOnFind) then ! FOnFind(Self); end else *************** *** 529,541 **** procedure TJvFindReplace.DoOnReplace(Sender: TObject); begin ! if FEditControl.SelLength < 1 then ! DoOnFind(Sender); ! if FEditControl.SelLength < 1 then ! Exit; ! if frReplaceAll in TFindDialog(Sender).Options then begin - SetFindText(FReplaceDialog.FindText); - SetReplaceText(FReplaceDialog.ReplaceText); ReplaceAll(FFindText, FReplaceText); if Assigned(FOnReplace) then --- 514,521 ---- procedure TJvFindReplace.DoOnReplace(Sender: TObject); begin ! UpdateProperties(Sender); ! if frReplaceAll in FOptions then begin ReplaceAll(FFindText, FReplaceText); if Assigned(FOnReplace) then *************** *** 544,547 **** --- 524,531 ---- else begin + if FEditControl.SelLength < 1 then + DoOnFind(Sender); + if FEditControl.SelLength < 1 then + Exit; ReplaceOne(Sender); if Assigned(FOnReplace) then *************** *** 564,567 **** --- 548,552 ---- if not Assigned(FEditControl) then Error; + UpdateProperties(Sender); UpdateDialogs; if Assigned(FOnClose) then *************** *** 575,578 **** --- 560,564 ---- if not Assigned(FEditControl) then Error; + UpdateProperties(Sender); if Assigned(FOnNotFound) then FOnNotFound(Self); *************** *** 586,596 **** MessageBox( ! {$IFDEF VCL} TFindDialog(Sender).Handle, ! {$ENDIF VCL} ! {$IFDEF VisualCLX} TFindDialog(Sender).Form.Handle, ! {$ENDIF VisualCLX} ! PChar(Format(RsNotFound, [TFindDialog(Sender).FindText])), PChar(FCaption), MB_OK or MB_ICONINFORMATION); end; --- 572,582 ---- MessageBox( ! {$IFDEF VCL} TFindDialog(Sender).Handle, ! {$ENDIF VCL} ! {$IFDEF VisualCLX} TFindDialog(Sender).Form.Handle, ! {$ENDIF VisualCLX} ! PChar(Format(RsNotFound, [FFindText])), PChar(FCaption), MB_OK or MB_ICONINFORMATION); end; *************** *** 604,617 **** procedure TJvFindReplace.DoReplacedAll(Sender: TObject); begin if FShowDialogs then begin MessageBox( ! {$IFDEF VCL} TFindDialog(Sender).Handle, ! {$ENDIF VCL} ! {$IFDEF VisualCLX} TFindDialog(Sender).Form.Handle, ! {$ENDIF VisualCLX} ! PChar(Format(RsXOccurencesReplaced, [FNumberReplaced, TFindDialog(Sender).FindText])), PChar(RsReplaceCaption), MB_OK or MB_ICONINFORMATION); end; --- 590,604 ---- procedure TJvFindReplace.DoReplacedAll(Sender: TObject); begin + UpdateProperties(Sender); if FShowDialogs then begin MessageBox( ! {$IFDEF VCL} TFindDialog(Sender).Handle, ! {$ENDIF VCL} ! {$IFDEF VisualCLX} TFindDialog(Sender).Form.Handle, ! {$ENDIF VisualCLX} ! PChar(Format(RsXOccurencesReplaced, [FNumberReplaced, FFindText])), PChar(RsReplaceCaption), MB_OK or MB_ICONINFORMATION); end; *************** *** 635,639 **** procedure TJvFindReplace.SetDialogTop(Value: Integer); begin ! FTop := Value; UpdateDialogs; end; --- 622,626 ---- procedure TJvFindReplace.SetDialogTop(Value: Integer); begin ! FPosition.Y := Value; UpdateDialogs; end; *************** *** 641,645 **** procedure TJvFindReplace.SetDialogLeft(Value: Integer); begin ! FLeft := Value; UpdateDialogs; end; --- 628,632 ---- procedure TJvFindReplace.SetDialogLeft(Value: Integer); begin ! FPosition.X := Value; UpdateDialogs; end; *************** *** 661,668 **** begin FFindText := Value; ! if Assigned(FFindDialog) then ! FFindDialog.FindText := Value; ! if Assigned(FReplaceDialog) then ! FReplaceDialog.FindText := Value; end; --- 648,652 ---- begin FFindText := Value; ! UpdateDialogs; end; *************** *** 674,685 **** begin NeedDialogs; ! {$IFDEF VCL} FFindDialog.CloseDialog; FReplaceDialog.CloseDialog; ! {$ENDIF VCL} ! {$IFDEF VisualCLX} FFindDialog.Form.Close; FReplaceDialog.Form.Close; ! {$ENDIF VisualCLX} end; end; --- 658,669 ---- begin NeedDialogs; ! {$IFDEF VCL} FFindDialog.CloseDialog; FReplaceDialog.CloseDialog; ! {$ENDIF VCL} ! {$IFDEF VisualCLX} FFindDialog.Form.Close; FReplaceDialog.Form.Close; ! {$ENDIF VisualCLX} end; end; *************** *** 688,693 **** begin FReplaceText := Value; ! if Assigned(FReplaceDialog) then ! FReplaceDialog.ReplaceText := Value; end; --- 672,676 ---- begin FReplaceText := Value; ! UpdateDialogs; end; *************** *** 698,765 **** end; - function TJvFindReplace.GetPosition: TPoint; - begin - if (csDesigning in ComponentState) or not Assigned(FFindDialog) then - Result := FPosition - else - Result := FFindDialog.Position; - end; - function TJvFindReplace.GetTop: Integer; begin ! if (csDesigning in ComponentState) or not Assigned(FFindDialog) then ! Result := FPosition.Y ! else ! {$IFDEF VCL} ! Result := FFindDialog.Top; ! {$ENDIF VCL} ! {$IFDEF VisualCLX} ! Result := FFindDialog.Position.Y; ! {$ENDIF VisualCLX} end; function TJvFindReplace.GetLeft: Integer; begin ! if (csDesigning in ComponentState) or not Assigned(FFindDialog) then ! Result := FPosition.X ! else ! {$IFDEF VCL} ! Result := FFindDialog.Left; ! {$ENDIF VCL} ! {$IFDEF VisualCLX} ! Result := FFindDialog.Position.X; ! {$ENDIF VisualCLX} ! end; ! ! function TJvFindReplace.GetOptions: TFindOptions; ! begin ! if (csDesigning in ComponentState) or not Assigned(FFindDialog) then ! Result := FOptions ! else ! Result := FFindDialog.Options; ! end; ! ! function TJvFindReplace.GetHelpContext: THelpContext; ! begin ! if (csDesigning in ComponentState) or not Assigned(FFindDialog) then ! Result := FHelpContext ! else ! Result := FFindDialog.HelpContext; ! end; ! ! function TJvFindReplace.GetFindText: string; ! begin ! if not FShowDialogs or (csDesigning in ComponentState) or not Assigned(FFindDialog) then ! Result := FFindText ! else ! Result := FFindDialog.FindText; end; ! function TJvFindReplace.GetReplaceText: string; begin ! if not FShowDialogs or (csDesigning in ComponentState) or not Assigned(FReplaceDialog) then ! Result := FReplaceText ! else ! Result := FReplaceDialog.ReplaceText; end; --- 681,698 ---- end; function TJvFindReplace.GetTop: Integer; begin ! Result := FPosition.Y end; function TJvFindReplace.GetLeft: Integer; begin ! Result := FPosition.X end; ! procedure TJvFindReplace.Loaded; begin ! inherited; ! UpdateDialogs; end; |