_frmSearch.pas 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. unit _frmSearch;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5. StdCtrls, ExtCtrls;
  6. type
  7. TfrmSearch = class(TForm)
  8. Label1: TLabel;
  9. cbSearchText: TComboBox;
  10. rgSearchDirection: TRadioGroup;
  11. gbSearchOptions: TGroupBox;
  12. cbSearchCaseSensitive: TCheckBox;
  13. cbSearchWholeWords: TCheckBox;
  14. cbSearchFromCursor: TCheckBox;
  15. cbSearchSelectedOnly: TCheckBox;
  16. btnOK: TButton;
  17. btnCancel: TButton;
  18. cbRegularExpression: TCheckBox;
  19. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  20. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  21. procedure FormShow(Sender: TObject);
  22. private
  23. function GetSearchBackwards: boolean;
  24. function GetSearchCaseSensitive: boolean;
  25. function GetSearchFromCursor: boolean;
  26. function GetSearchInSelection: boolean;
  27. function GetSearchText: string;
  28. function GetSearchTextHistory: string;
  29. function GetSearchWholeWords: boolean;
  30. procedure SetSearchBackwards(Value: boolean);
  31. procedure SetSearchCaseSensitive(Value: boolean);
  32. procedure SetSearchFromCursor(Value: boolean);
  33. procedure SetSearchInSelection(Value: boolean);
  34. procedure SetSearchText(Value: string);
  35. procedure SetSearchTextHistory(Value: string);
  36. procedure SetSearchWholeWords(Value: boolean);
  37. procedure SetSearchRegularExpression(const Value: boolean);
  38. function GetSearchRegularExpression: boolean;
  39. public
  40. property SearchBackwards: boolean read GetSearchBackwards
  41. write SetSearchBackwards;
  42. property SearchCaseSensitive: boolean read GetSearchCaseSensitive
  43. write SetSearchCaseSensitive;
  44. property SearchFromCursor: boolean read GetSearchFromCursor
  45. write SetSearchFromCursor;
  46. property SearchInSelectionOnly: boolean read GetSearchInSelection
  47. write SetSearchInSelection;
  48. property SearchText: string read GetSearchText write SetSearchText;
  49. property SearchTextHistory: string read GetSearchTextHistory
  50. write SetSearchTextHistory;
  51. property SearchWholeWords: boolean read GetSearchWholeWords
  52. write SetSearchWholeWords;
  53. property SearchRegularExpression: boolean read GetSearchRegularExpression
  54. write SetSearchRegularExpression;
  55. end;
  56. var
  57. frmSearch: TfrmSearch;
  58. implementation
  59. {$R *.DFM}
  60. uses _frmMain;
  61. function TfrmSearch.GetSearchBackwards: boolean;
  62. begin
  63. Result := rgSearchDirection.ItemIndex = 1;
  64. end;
  65. function TfrmSearch.GetSearchCaseSensitive: boolean;
  66. begin
  67. Result := cbSearchCaseSensitive.Checked;
  68. end;
  69. function TfrmSearch.GetSearchFromCursor: boolean;
  70. begin
  71. Result := cbSearchFromCursor.Checked;
  72. end;
  73. function TfrmSearch.GetSearchInSelection: boolean;
  74. begin
  75. Result := cbSearchSelectedOnly.Checked;
  76. end;
  77. function TfrmSearch.GetSearchRegularExpression: boolean;
  78. begin
  79. Result := cbRegularExpression.Checked;
  80. end;
  81. function TfrmSearch.GetSearchText: string;
  82. begin
  83. Result := cbSearchText.Text;
  84. end;
  85. function TfrmSearch.GetSearchTextHistory: string;
  86. var
  87. i: integer;
  88. begin
  89. Result := '';
  90. for i := 0 to cbSearchText.Items.Count - 1 do begin
  91. if i >= 10 then
  92. break;
  93. if i > 0 then
  94. Result := Result + #13#10;
  95. Result := Result + cbSearchText.Items[i];
  96. end;
  97. end;
  98. function TfrmSearch.GetSearchWholeWords: boolean;
  99. begin
  100. Result := cbSearchWholeWords.Checked;
  101. end;
  102. procedure TfrmSearch.SetSearchBackwards(Value: boolean);
  103. begin
  104. rgSearchDirection.ItemIndex := Ord(Value);
  105. end;
  106. procedure TfrmSearch.SetSearchCaseSensitive(Value: boolean);
  107. begin
  108. cbSearchCaseSensitive.Checked := Value;
  109. end;
  110. procedure TfrmSearch.SetSearchFromCursor(Value: boolean);
  111. begin
  112. cbSearchFromCursor.Checked := Value;
  113. end;
  114. procedure TfrmSearch.SetSearchInSelection(Value: boolean);
  115. begin
  116. cbSearchSelectedOnly.Checked := Value;
  117. end;
  118. procedure TfrmSearch.SetSearchText(Value: string);
  119. begin
  120. cbSearchText.Text := Value;
  121. end;
  122. procedure TfrmSearch.SetSearchTextHistory(Value: string);
  123. begin
  124. cbSearchText.Items.Text := Value;
  125. end;
  126. procedure TfrmSearch.SetSearchWholeWords(Value: boolean);
  127. begin
  128. cbSearchWholeWords.Checked := Value;
  129. end;
  130. procedure TfrmSearch.SetSearchRegularExpression(
  131. const Value: boolean);
  132. begin
  133. cbRegularExpression.Checked := Value;
  134. end;
  135. { event handlers }
  136. procedure TfrmSearch.FormClose(Sender: TObject; var Action: TCloseAction);
  137. begin
  138. frmMain.MainConfig.WriteInteger('SearchPos', 'Left', Left);
  139. frmMain.MainConfig.WriteInteger('SearchPos', 'Top', Top);
  140. end;
  141. procedure TfrmSearch.FormCloseQuery(Sender: TObject;
  142. var CanClose: Boolean);
  143. var
  144. s: string;
  145. i: integer;
  146. begin
  147. if ModalResult = mrOK then begin
  148. s := cbSearchText.Text;
  149. if s <> '' then begin
  150. i := cbSearchText.Items.IndexOf(s);
  151. if i > -1 then begin
  152. cbSearchText.Items.Delete(i);
  153. cbSearchText.Items.Insert(0, s);
  154. cbSearchText.Text := s;
  155. end else
  156. cbSearchText.Items.Insert(0, s);
  157. end;
  158. end;
  159. end;
  160. procedure TfrmSearch.FormShow(Sender: TObject);
  161. begin
  162. Left := frmMain.MainConfig.ReadInteger('SearchPos', 'Left', Round((Screen.Width - Width) div 2));
  163. if Left >= Screen.Width then
  164. begin
  165. Left := 10;
  166. end;
  167. Top := frmMain.MainConfig.ReadInteger('SearchPos', 'Top', Round((Screen.Height - Height) div 2));
  168. if Top >= Screen.Height then
  169. begin
  170. Top := 10;
  171. end;
  172. cbSearchText.SetFocus;
  173. end;
  174. end.