@@ -11,12 +11,9 @@ TMain = class(TForm)
1111 AddBtn: TButton;
1212 RemBtn: TButton;
1313 CheckBtn: TButton;
14- ListBox: TListBox;
1514 FirewallBtn: TButton;
1615 CloseBtn: TButton;
1716 OpenDialog: TOpenDialog;
18- NameAppLbl: TLabel;
19- AppPathLbl: TLabel;
2017 SearchEdt: TEdit;
2118 StatusBar: TStatusBar;
2219 ImportDialog: TOpenDialog;
@@ -27,6 +24,7 @@ TMain = class(TForm)
2724 ExportBtn: TMenuItem;
2825 HelpItem: TMenuItem;
2926 AboutBtn: TMenuItem;
27+ ListView: TListView;
3028 procedure AddBtnClick (Sender: TObject);
3129 procedure RemBtnClick (Sender: TObject);
3230 procedure FirewallBtnClick (Sender: TObject);
@@ -38,22 +36,22 @@ TMain = class(TForm)
3836 Shift: TShiftState; X, Y: Integer);
3937 procedure SearchEdtChange (Sender: TObject);
4038 procedure FormShow (Sender: TObject);
41- procedure ListBoxKeyUp (Sender: TObject; var Key: Word;
42- Shift: TShiftState);
4339 procedure SearchEdtKeyDown (Sender: TObject; var Key: Word;
4440 Shift: TShiftState);
45- procedure ListBoxKeyDown (Sender: TObject; var Key: Word;
46- Shift: TShiftState);
4741 procedure FormKeyDown (Sender: TObject; var Key: Word;
4842 Shift: TShiftState);
49- procedure ListBoxDblClick (Sender: TObject);
50- procedure ListBoxMouseDown (Sender: TObject; Button: TMouseButton;
51- Shift: TShiftState; X, Y: Integer);
5243 procedure SearchEdtKeyUp (Sender: TObject; var Key: Word;
5344 Shift: TShiftState);
5445 procedure ImportBtnClick (Sender: TObject);
5546 procedure ExportBtnClick (Sender: TObject);
5647 procedure AboutBtnClick (Sender: TObject);
48+ procedure ListViewMouseDown (Sender: TObject; Button: TMouseButton;
49+ Shift: TShiftState; X, Y: Integer);
50+ procedure ListViewKeyUp (Sender: TObject; var Key: Word;
51+ Shift: TShiftState);
52+ procedure ListViewDblClick (Sender: TObject);
53+ procedure ListViewKeyDown (Sender: TObject; var Key: Word;
54+ Shift: TShiftState);
5755 protected
5856 procedure WMDropFiles (var Msg: TMessage); message WM_DropFiles;
5957 private
@@ -187,9 +185,9 @@ procedure TMain.AddBtnClick(Sender: TObject);
187185
188186procedure TMain.RemBtnClick (Sender: TObject);
189187begin
190- if ListBox .ItemIndex <> - 1 then begin
191- StatusBar.SimpleText:=' ' + Format(ID_RULE_SUCCESSFULLY_REMOVED, [CutStr(ExtractFileName(RulePaths.Strings[ListBox .ItemIndex]), 22 )]); // Ïîñëå óäàëåíèÿ íàçâàíèÿ óæå íå áóäåò, ïîýòîìó ïåðåä óäàëåíèåì
192- RemoveAppRules(RuleNames.Strings[ListBox .ItemIndex]);
188+ if ListView .ItemIndex <> - 1 then begin
189+ StatusBar.SimpleText:=' ' + Format(ID_RULE_SUCCESSFULLY_REMOVED, [CutStr(ExtractFileName(RulePaths.Strings[ListView .ItemIndex]), 22 )]); // Ïîñëå óäàëåíèÿ íàçâàíèÿ óæå íå áóäåò, ïîýòîìó ïåðåä óäàëåíèåì
190+ RemoveAppRules(RuleNames.Strings[ListView .ItemIndex]);
193191 end else StatusBar.SimpleText:=' ' + ID_CHOOSE_RULE;
194192end ;
195193
@@ -239,10 +237,11 @@ procedure TMain.LoadRegRules;
239237 Reg : TRegistry;
240238 SubKeyNames: TStringList;
241239 RegName: string;
240+ Item: TListItem;
242241begin
243242 RuleNames.Clear;
244243 RulePaths.Clear;
245- ListBox .Clear;
244+ ListView .Clear;
246245
247246 Rules:=TStringList.Create;
248247 Reg:=TRegistry.Create;
@@ -259,7 +258,9 @@ procedure TMain.LoadRegRules;
259258 RegName:=Copy(RegName, 1 , Pos(' |' , RegName) - 1 );
260259 RegName:=Copy(RegName, 1 , Pos(' _UDP_' , RegName) - 1 );
261260 RuleNames.Add(RegName);
262- ListBox.Items.Add(CutStr(ExtractFileName(RulePaths.Strings[RulePaths.Count - 1 ]), 23 ) + ^I + CutStr(RulePaths.Strings[RulePaths.Count - 1 ], 38 ));
261+ Item:=Main.ListView.Items.Add;
262+ Item.Caption:=ExtractFileName(RulePaths.Strings[RulePaths.Count - 1 ]);
263+ Item.SubItems.Add(RulePaths.Strings[RulePaths.Count - 1 ]);
263264 end ;
264265 end ;
265266 Reg.CloseKey;
@@ -303,9 +304,8 @@ procedure TMain.FormCreate(Sender: TObject);
303304 ID_ABOUT:=Ini.ReadString(' Main' , ' ID_ABOUT' , ' ' );
304305 AboutBtn.Caption:=ID_ABOUT;
305306
306-
307- NameAppLbl.Caption:=Ini.ReadString(' Main' , ' ID_APP_NAME' , ' ' );
308- AppPathLbl.Caption:=Ini.ReadString(' Main' , ' ID_APP_PATH' , ' ' );
307+ ListView.Columns[0 ].Caption:=Ini.ReadString(' Main' , ' ID_APP_NAME' , ' ' );
308+ ListView.Columns[1 ].Caption:=Ini.ReadString(' Main' , ' ID_APP_PATH' , ' ' );
309309
310310 ID_SEARCH:=Ini.ReadString(' Main' , ' ID_SEARCH' , ' ' );
311311 SearchEdt.Text:=ID_SEARCH;
@@ -390,19 +390,19 @@ procedure TMain.CheckBtnClick(Sender: TObject);
390390
391391procedure TMain.FormShow (Sender: TObject);
392392begin
393- ListBox .SetFocus;
393+ ListView .SetFocus;
394394 if CloseDuplicate then Close;
395395end ;
396396
397- procedure TMain.ListBoxKeyUp (Sender: TObject; var Key: Word;
397+ procedure TMain.ListViewKeyUp (Sender: TObject; var Key: Word;
398398 Shift: TShiftState);
399399begin
400- if ListBox .ItemIndex = -1 then Exit;
401- StatusBar.SimpleText:=' ' + CutStr(RulePaths.Strings[ListBox .ItemIndex], 62 );
400+ if ListView .ItemIndex = -1 then Exit;
401+ StatusBar.SimpleText:=' ' + CutStr(RulePaths.Strings[ListView .ItemIndex], 62 );
402402 if Key = VK_DELETE then
403403 RemBtn.Click
404- else if (Key = VK_RETURN) and (FileExists(RulePaths.Strings[ListBox .ItemIndex])) then
405- ShellExecute(0 , ' open' , ' explorer' , PChar(' /select, "' + RulePaths.Strings[ListBox .ItemIndex] + ' "' ), nil , SW_SHOW);
404+ else if (Key = VK_RETURN) and (FileExists(RulePaths.Strings[ListView .ItemIndex])) then
405+ ShellExecute(0 , ' open' , ' explorer' , PChar(' /select, "' + RulePaths.Strings[ListView .ItemIndex] + ' "' ), nil , SW_SHOW);
406406end ;
407407
408408procedure TMain.WMCopyData (var Msg: TWMCopyData);
@@ -415,7 +415,7 @@ procedure TMain.WMCopyData(var Msg: TWMCopyData);
415415 Msg.Result:=Integer(True);
416416end ;
417417
418- procedure TMain.ListBoxKeyDown (Sender: TObject; var Key: Word;
418+ procedure TMain.ListViewKeyDown (Sender: TObject; var Key: Word;
419419 Shift: TShiftState);
420420begin
421421 // Óáèðàåì áàã ñêðûòèÿ êîíòðîëîâ
@@ -431,43 +431,37 @@ procedure TMain.FormKeyDown(Sender: TObject; var Key: Word;
431431 Key:=0 ;
432432end ;
433433
434- procedure TMain.ListBoxDblClick (Sender: TObject);
434+ procedure TMain.ListViewDblClick (Sender: TObject);
435435begin
436- if ListBox .ItemIndex = -1 then Exit;
437- if FileExists(RulePaths.Strings[ListBox .ItemIndex]) then
438- ShellExecute(0 , ' open' , ' explorer' , PChar(' /select, "' + RulePaths.Strings[ListBox .ItemIndex] + ' "' ), nil , SW_SHOW);
436+ if ListView .ItemIndex = -1 then Exit;
437+ if FileExists(RulePaths.Strings[ListView .ItemIndex]) then
438+ ShellExecute(0 , ' open' , ' explorer' , PChar(' /select, "' + RulePaths.Strings[ListView .ItemIndex] + ' "' ), nil , SW_SHOW);
439439end ;
440440
441- procedure TMain.ListBoxMouseDown (Sender: TObject; Button: TMouseButton;
442- Shift: TShiftState; X, Y: Integer);
441+ procedure ScrollToListViewItem (LV: TListview; ItemIndex: Integer);
442+ var
443+ R: TRect;
443444begin
444- // Ñáðàñûâàåì èíäåêñ, åñëè ïîïàäàåì â ïóñòóþ îáëàñòü
445- ListBox.ItemIndex:=ListBox.ItemAtPos(Point(X, Y), true);
446-
447- if ListBox.ItemIndex <> -1 then
448- StatusBar.SimpleText:=' ' + CutStr(RulePaths.Strings[ListBox.ItemIndex], 62 )
449- else
450- StatusBar.SimpleText:=' ' ;
451-
452- if SearchEdt.Text = ' ' then begin
453- SearchEdt.Font.Color:=clGray;
454- SearchEdt.Text:=ID_SEARCH;
455- end ;
445+ R:=LV.Items[ItemIndex].DisplayRect(drBounds);
446+ LV.Scroll(0 , R.Top - LV.ClientHeight div 2 );
456447end ;
457448
458449procedure TMain.SearchEdtChange (Sender: TObject);
459450var
460451 i: integer;
461452begin
462- if ListBox .Count = 0 then Exit;
463- ListBox .ItemIndex:=-1 ;
453+ if ListView.Items .Count = 0 then Exit;
454+ ListView .ItemIndex:=-1 ;
464455 for i:=0 to RuleNames.Count - 1 do
465456 if Pos(AnsiLowerCase(SearchEdt.Text), AnsiLowerCase(RuleNames.Strings[i])) > 0 then begin
466- ListBox.ItemIndex:=i;
457+
458+ ScrollToListViewItem(ListView, i);
459+ // ListView.ItemIndex:=i;
460+ ListView.Items.Item[i].Selected:=true;
467461 Break;
468462 end ;
469- if ListBox .ItemIndex <> -1 then
470- StatusBar.SimpleText:=' ' + CutStr(RulePaths.Strings[ListBox .ItemIndex], 63 )
463+ if ListView .ItemIndex <> -1 then
464+ StatusBar.SimpleText:=' ' + CutStr(RulePaths.Strings[ListView .ItemIndex], 63 )
471465 else
472466 StatusBar.SimpleText:=' ' ;
473467end ;
@@ -533,10 +527,24 @@ procedure TMain.ExportBtnClick(Sender: TObject);
533527
534528procedure TMain.AboutBtnClick (Sender: TObject);
535529begin
536- Application.MessageBox(PChar(Caption + ' 0.7' + #13 #10 +
537- ID_LAST_UPDATE + ' 20.05.2022 ' + #13 #10 +
530+ Application.MessageBox(PChar(Caption + ' 0.7.1 ' + #13 #10 +
531+ ID_LAST_UPDATE + ' 31.03.2024 ' + #13 #10 +
538532 ' https://r57zone.github.io' + #13 #10 +
539533 ' [email protected] ' ), PChar(ID_ABOUT), MB_ICONINFORMATION);
540534end ;
541535
536+ procedure TMain.ListViewMouseDown (Sender: TObject; Button: TMouseButton;
537+ Shift: TShiftState; X, Y: Integer);
538+ begin
539+ if ListView.ItemIndex <> -1 then
540+ StatusBar.SimpleText:=' ' + CutStr(RulePaths.Strings[ListView.ItemIndex], 62 )
541+ else
542+ StatusBar.SimpleText:=' ' ;
543+
544+ if SearchEdt.Text = ' ' then begin
545+ SearchEdt.Font.Color:=clGray;
546+ SearchEdt.Text:=ID_SEARCH;
547+ end ;
548+ end ;
549+
542550end .
0 commit comments