Componentes.Terceros.jvcl/internal/3.36/1/examples/JvChangeNotify/ChangeNotificationMainFormU.pas
2009-03-04 12:31:55 +00:00

230 lines
6.4 KiB
ObjectPascal

{******************************************************************
JEDI-VCL Demo
Copyright (C) 2002 Project JEDI
Original author:
You may retrieve the latest version of this file at the JEDI-JVCL
home page, located at http://jvcl.sourceforge.net
The contents of this file are used with permission, subject to
the Mozilla Public License Version 1.1 (the "License"); you may
not use this file except in compliance with the License. You may
obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1_1Final.html
Software distributed under the License is distributed on an
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
implied. See the License for the specific language governing
rights and limitations under the License.
******************************************************************}
unit ChangeNotificationMainFormU;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, ComCtrls, ExtCtrls,
JvChangeNotify, JvComponent;
type
TChangeNotificationMainForm = class(TForm)
JvChangeNotify1: TJvChangeNotify;
ListBox2: TListBox;
Label3: TLabel;
ListView1: TListView;
Panel1: TPanel;
btnStart: TSpeedButton;
Label2: TLabel;
btnAdd: TButton;
btnDelete: TButton;
Edit1: TEdit;
udInterval: TUpDown;
btnClear: TButton;
Label4: TLabel;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure btnDeleteClick(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure JvChangeNotify1ChangeNotify(Sender: TObject; Dir: string; Actions: TJvChangeActions);
procedure EditItem(li: TListItem);
procedure DeleteItem(li: TListItem);
procedure ListView1DblClick(Sender: TObject);
private
procedure ResetCaptions(Invert: boolean);
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
end;
var
ChangeNotificationMainForm: TChangeNotificationMainForm;
implementation
uses ChangeNotificationDirDlgU;
{$R *.dfm}
procedure TChangeNotificationMainForm.ResetCaptions(Invert: boolean);
const
aCap: array[boolean] of string = ('TJvChangeNotification demo', 'Checking...');
begin
if Invert then
Caption := aCap[not JvChangeNotify1.Active]
else
Caption := aCap[JvChangeNotify1.Active];
Application.Title := Caption;
end;
procedure TChangeNotificationMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
JvChangeNotify1.Active := false;
end;
procedure TChangeNotificationMainForm.btnDeleteClick(Sender: TObject);
begin
DeleteItem(ListView1.Selected);
end;
function OptionsToStr(Options: TJvChangeActions): string;
begin
Result := '';
if caChangeFileName in Options then
Result := Result + 'Rename Files,';
if caChangeDirName in Options then
Result := Result + 'Rename Folders,';
if caChangeAttributes in Options then
Result := Result + 'Change Attributes,';
if caChangeSize in Options then
Result := Result + 'Change Size,';
if caChangeLastWrite in Options then
Result := Result + 'Change Content,';
if caChangeSecurity in Options then
Result := Result + 'Change Security,';
if Length(Result) > 0 then
begin
SetLength(Result, Length(Result) - 1);
Result := '(' + Result + ')';
end;
end;
procedure TChangeNotificationMainForm.btnAddClick(Sender: TObject);
begin
EditItem(nil);
end;
procedure TChangeNotificationMainForm.btnStartClick(Sender: TObject);
var b: boolean;
begin
if JvChangeNotify1.Notifications.Count = 0 then
begin
ShowMessage('No notifications to monitor!');
btnStart.Down := false;
Exit;
end;
b := btnStart.Down;
btnAdd.Enabled := not b;
btnDelete.Enabled := not b;
ResetCaptions(true);
{ do this *after* setting buttons }
JvChangeNotify1.Active := b;
end;
procedure TChangeNotificationMainForm.btnClearClick(Sender: TObject);
begin
ListBox2.Clear;
ResetCaptions(false);
end;
procedure TChangeNotificationMainForm.JvChangeNotify1ChangeNotify(Sender: TObject; Dir: string;
Actions: TJvChangeActions);
begin
Application.Title := Format('Change in %s (%s)', [Dir, ActionsToString(Actions)]);
ListBox2.Items.Add(Application.Title);
FlashWindow(ChangeNotificationMainForm.Handle, true);
MessageBeep(DWORD(-1));
end;
procedure TChangeNotificationMainForm.WMGetMinMaxINfo(var Msg: TWMGetMinMaxInfo);
begin
with Msg.MinMaxInfo^.ptMinTrackSize do
begin
X := 392;
Y := 295;
end;
Msg.Result := 0;
end;
procedure TChangeNotificationMainForm.EditItem(li: TListItem);
var ADirectory: string;
AOptions: TJvChangeActions;
AIncludeSubDirs: boolean;
begin
if (li = nil) or (li.Data = nil) then
begin
ADirectory := GetCurrentDir;
AIncludeSubDirs := true;
AOptions := [caChangeFileName, caChangeDirName];
end
else
with TJvChangeItem(li.Data) do
begin
ADirectory := Directory;
AIncludeSubDirs := IncludeSubTrees;
AOptions := Actions;
end;
if TChangeNotificationDirDlg.Execute(ADirectory, AOptions, AIncludeSubDirs) then
begin
if li = nil then
begin
li := ListView1.Items.Add;
li.Caption := ADirectory;
if AIncludeSubDirs and (Win32Platform = VER_PLATFORM_WIN32_NT) then
li.SubItems.Add('Yes')
else
li.SubItems.Add('No');
li.SubItems.Add(OptionsToStr(AOptions));
end
else
begin
li.Caption := ADirectory;
if AIncludeSubDirs and (Win32Platform = VER_PLATFORM_WIN32_NT) then
li.SubItems[0] := 'Yes'
else
li.SubItems[0] := 'No';
li.SubItems[1] := OptionsToStr(AOptions);
end;
if li.Data = nil then
li.Data := JvChangeNotify1.Notifications.Add;
with TJvChangeItem(li.Data) do
begin
IncludeSubTrees := AIncludeSubDirs and (Win32Platform = VER_PLATFORM_WIN32_NT);
Directory := ADirectory;
Actions := AOptions;
end;
end;
end;
procedure TChangeNotificationMainForm.DeleteItem(li: TListItem);
begin
if li = nil then
Exit;
if li.Data <> nil then
JvChangeNotify1.Notifications.Delete(li.Index);
li.Delete;
end;
procedure TChangeNotificationMainForm.ListView1DblClick(Sender: TObject);
begin
EditItem(ListView1.Selected);
end;
end.