Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit uMain;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, Buttons, iniFiles, Grids, ComCtrls, DB, ADODB, DBGrids,
- DBCtrls, FileCtrl, CheckLst, Registry, XPMan, ShellAPI, KEEncryption,
- ExtCtrls, KECommon, uSplash, uPermissions, StrUtils;
- type
- TfrmMain = class(TForm)
- Pages: TPageControl;
- tabLocations: TTabSheet;
- tabComputers: TTabSheet;
- tabServers: TTabSheet;
- tabUsers: TTabSheet;
- cmdNewLocation: TBitBtn;
- cmdEditLocation: TBitBtn;
- cmdDeleteLocation: TBitBtn;
- cmdDeleteComputer: TBitBtn;
- cmdEditComputer: TBitBtn;
- cmdNewComputer: TBitBtn;
- cmdDeleteUser: TBitBtn;
- cmdEditUser: TBitBtn;
- cmdNewUser: TBitBtn;
- tabDatabases: TTabSheet;
- DB: TADOConnection;
- QLocations: TADOQuery;
- DBGrid1: TDBGrid;
- DSLocations: TDataSource;
- DBGrid2: TDBGrid;
- DBGrid5: TDBGrid;
- QComputers: TADOQuery;
- DSComputers: TDataSource;
- QServers: TADOQuery;
- DSServers: TDataSource;
- QSYSDatabases: TADOQuery;
- DSSYSDatabases: TDataSource;
- QUsers: TADOQuery;
- DSUsers: TDataSource;
- DBMaster: TADOConnection;
- cboComputerLocation: TComboBox;
- Label2: TLabel;
- QTemp: TADOQuery;
- cboCompOrder: TComboBox;
- Label3: TLabel;
- optComputerA: TRadioButton;
- optComputerZ: TRadioButton;
- optLocationZ: TRadioButton;
- optLocationA: TRadioButton;
- cboLocationOrder: TComboBox;
- Label4: TLabel;
- optUserZ: TRadioButton;
- optUserA: TRadioButton;
- cboUserOrder: TComboBox;
- Label7: TLabel;
- QDatabases: TADOQuery;
- DSDatabases: TDataSource;
- Label21: TLabel;
- cboCompStatus: TComboBox;
- lblWarning: TLabel;
- lblCompTotal: TLabel;
- lblLocTotal: TLabel;
- lblUserTotal: TLabel;
- cmdRefreshLocations: TBitBtn;
- cmdRefreshComputers: TBitBtn;
- cmdRefreshUsers: TBitBtn;
- tabTools: TTabSheet;
- ADOTest: TADOConnection;
- cmdUserPriv: TBitBtn;
- lstToolMenu: TListBox;
- XP: TXPManifest;
- cmdCompRemote: TBitBtn;
- cmdNewTool: TBitBtn;
- cmdEditTool: TBitBtn;
- cmdDeleteTool: TBitBtn;
- cmdOpenTool: TBitBtn;
- Panel1: TPanel;
- Label12: TLabel;
- DBGrid4: TDBGrid;
- lblDBTotal: TLabel;
- cboDatabaseServer: TComboBox;
- Label1: TLabel;
- Splitter1: TSplitter;
- Panel2: TPanel;
- Label10: TLabel;
- cboDBStatus: TComboBox;
- cboDBType: TComboBox;
- Label11: TLabel;
- Label6: TLabel;
- cboDBOrder: TComboBox;
- Label8: TLabel;
- optDBA: TRadioButton;
- optDBZ: TRadioButton;
- DBGrid6: TDBGrid;
- lblRegDBTotal: TLabel;
- cmdVerifyDB: TBitBtn;
- cmdRefreshDatabases: TBitBtn;
- cmdEditDB: TBitBtn;
- cmdNewDB: TBitBtn;
- cmdRemoveDB: TBitBtn;
- Panel3: TPanel;
- DBGrid3: TDBGrid;
- lblServTotal: TLabel;
- cmdVerifyServer: TBitBtn;
- cmdRefreshServers: TBitBtn;
- cmdDeleteServer: TBitBtn;
- cmdEditServer: TBitBtn;
- cmdNewServer: TBitBtn;
- cboServerOrder: TComboBox;
- Label5: TLabel;
- optServerA: TRadioButton;
- optServerZ: TRadioButton;
- cboSQLServerStatus: TComboBox;
- Label22: TLabel;
- cboServerLocation: TComboBox;
- Label9: TLabel;
- Panel4: TPanel;
- Label13: TLabel;
- lblAvailServCount: TLabel;
- Splitter2: TSplitter;
- cmdAvailServ: TBitBtn;
- cmdAvailDB: TBitBtn;
- lstAvailServ: TStringGrid;
- cmdRefreshAvailServ: TBitBtn;
- tabAudit: TTabSheet;
- lstAudit: TStringGrid;
- cmdViewAudit: TBitBtn;
- cmdRefreshAudit: TBitBtn;
- Label14: TLabel;
- cboAuditTable: TComboBox;
- Label15: TLabel;
- cboAuditType: TComboBox;
- tabSettings: TTabSheet;
- SettingsPages: TPageControl;
- tabSettingsVariables: TTabSheet;
- tabSettingsLists: TTabSheet;
- tabSettingsSources: TTabSheet;
- lstVariables: TListBox;
- Label16: TLabel;
- txtVariableName: TEdit;
- Label17: TLabel;
- Label18: TLabel;
- txtVariableValue: TEdit;
- Label19: TLabel;
- Label20: TLabel;
- cmdAddVariable: TBitBtn;
- cmdEditVariable: TBitBtn;
- cmdDeleteVariable: TBitBtn;
- cmdAddDB: TBitBtn;
- cmdPermissions: TBitBtn;
- TabSheet1: TTabSheet;
- StatusBar1: TStatusBar;
- txtServiceLog: TMemo;
- Splitter3: TSplitter;
- pServiceSettings: TPanel;
- Label23: TLabel;
- chkEnableService: TCheckBox;
- pService: TPanel;
- chkServiceVerifyComputers: TCheckBox;
- chkServiceVerifyServers: TCheckBox;
- chkServiceVerifyDatabases: TCheckBox;
- chkServiceVerifySources: TCheckBox;
- cmdRefreshServiceLog: TBitBtn;
- TabSheet2: TTabSheet;
- pUpdates: TPanel;
- lstUpdates: TStringGrid;
- Label24: TLabel;
- Splitter4: TSplitter;
- pUpdateFiles: TPanel;
- Label25: TLabel;
- lstUpdateFiles: TStringGrid;
- cmdNewUpdate: TBitBtn;
- cmdEditUpdate: TBitBtn;
- pUpdateDetails: TPanel;
- chkUpdateActive: TCheckBox;
- pUpdateFileDetails: TPanel;
- Label26: TLabel;
- lblUpdateID: TLabel;
- dtUpdateReleaseDate: TDateTimePicker;
- Label27: TLabel;
- txtUpdatePriority: TEdit;
- Label28: TLabel;
- txtUpdateFileCaption: TEdit;
- Label29: TLabel;
- cmdNewUpdateFile: TBitBtn;
- cmdEditUpdateFile: TBitBtn;
- cmdDeleteUpdateFile: TBitBtn;
- chkUpdateFileActive: TCheckBox;
- txtUpdateFileSourcePath: TEdit;
- Label30: TLabel;
- txtUpdateFileDestPath: TEdit;
- Label31: TLabel;
- cmdUpdateFileBrowseSourcePath: TBitBtn;
- cmdUpdateFileBrowseDestPath: TBitBtn;
- txtUpdateFileFilename: TEdit;
- Label32: TLabel;
- cmdUpdateFileBrowseFilename: TBitBtn;
- Panel5: TPanel;
- cmdCancelUpdateFile: TBitBtn;
- cmdSaveUpdateFile: TBitBtn;
- Panel6: TPanel;
- cmdSaveUpdate: TBitBtn;
- cmdCancelUpdate: TBitBtn;
- Label33: TLabel;
- txtUpdateFilePriority: TEdit;
- cmdReplicateUpdate: TBitBtn;
- Panel7: TPanel;
- cmdClose: TBitBtn;
- procedure cmdNewComputerClick(Sender: TObject);
- procedure cmdEditComputerClick(Sender: TObject);
- procedure cmdCloseClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure cboDatabaseServerClick(Sender: TObject);
- procedure cboComputerLocationClick(Sender: TObject);
- procedure DBGrid2DblClick(Sender: TObject);
- procedure cmdEditLocationClick(Sender: TObject);
- procedure cmdNewLocationClick(Sender: TObject);
- procedure DBGrid1DblClick(Sender: TObject);
- procedure DBGrid2TitleClick(Column: TColumn);
- procedure DBGrid4DblClick(Sender: TObject);
- procedure cmdAddDBClick(Sender: TObject);
- procedure DBGrid6DblClick(Sender: TObject);
- procedure cboLocationOrderClick(Sender: TObject);
- procedure cboServerOrderClick(Sender: TObject);
- procedure cmdDeleteComputerClick(Sender: TObject);
- procedure cboDBStatusClick(Sender: TObject);
- procedure cmdNewDBClick(Sender: TObject);
- procedure cmdDeleteDBClick(Sender: TObject);
- procedure cmdDeleteServerClick(Sender: TObject);
- procedure cmdNewServerClick(Sender: TObject);
- procedure cmdEditServerClick(Sender: TObject);
- procedure cboCompStatusChange(Sender: TObject);
- procedure cboSQLServerStatusClick(Sender: TObject);
- procedure cmdNewUserClick(Sender: TObject);
- procedure cmdEditUserClick(Sender: TObject);
- procedure cboCompStatusClick(Sender: TObject);
- procedure cmdRefreshLocationsClick(Sender: TObject);
- procedure cmdRefreshComputersClick(Sender: TObject);
- procedure cmdRefreshServersClick(Sender: TObject);
- procedure cmdRefreshDatabasesClick(Sender: TObject);
- procedure cmdRefreshUsersClick(Sender: TObject);
- procedure cboUserOrderClick(Sender: TObject);
- procedure cmdDeleteUserClick(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure cmdVerifyDBClick(Sender: TObject);
- procedure cmdDeleteLocationClick(Sender: TObject);
- procedure cmdUserPrivClick(Sender: TObject);
- procedure PagesChange(Sender: TObject);
- procedure lstToolMenuDblClick(Sender: TObject);
- procedure cmdCompRemoteClick(Sender: TObject);
- procedure cmdVerifyServerClick(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure cmdDeleteToolClick(Sender: TObject);
- procedure cmdNewToolClick(Sender: TObject);
- procedure cmdEditToolClick(Sender: TObject);
- procedure cmdOpenToolClick(Sender: TObject);
- procedure Panel1Resize(Sender: TObject);
- procedure Panel4Resize(Sender: TObject);
- procedure Panel2Resize(Sender: TObject);
- procedure Panel3Resize(Sender: TObject);
- procedure cmdAvailDBClick(Sender: TObject);
- procedure cmdAvailServClick(Sender: TObject);
- procedure cmdRefreshAvailServClick(Sender: TObject);
- procedure cmdRefreshAuditClick(Sender: TObject);
- procedure cmdViewAuditClick(Sender: TObject);
- procedure cboAuditTableClick(Sender: TObject);
- procedure cboAuditTypeClick(Sender: TObject);
- procedure lstVariablesClick(Sender: TObject);
- procedure cmdAddVariableClick(Sender: TObject);
- procedure cmdEditVariableClick(Sender: TObject);
- procedure cmdPermissionsClick(Sender: TObject);
- procedure chkEnableServiceClick(Sender: TObject);
- procedure cmdRefreshServiceLogClick(Sender: TObject);
- procedure lstUpdatesClick(Sender: TObject);
- procedure cmdNewUpdateClick(Sender: TObject);
- procedure cmdEditUpdateClick(Sender: TObject);
- procedure cmdCancelUpdateClick(Sender: TObject);
- procedure cmdSaveUpdateClick(Sender: TObject);
- procedure cmdNewUpdateFileClick(Sender: TObject);
- procedure cmdCancelUpdateFileClick(Sender: TObject);
- procedure lstUpdateFilesClick(Sender: TObject);
- procedure cmdSaveUpdateFileClick(Sender: TObject);
- procedure cmdEditUpdateFileClick(Sender: TObject);
- procedure chkServiceVerifyComputersClick(Sender: TObject);
- procedure chkServiceVerifyServersClick(Sender: TObject);
- procedure chkServiceVerifyDatabasesClick(Sender: TObject);
- procedure chkServiceVerifySourcesClick(Sender: TObject);
- private
- { Private declarations }
- oldOrd: string;
- public
- { Public declarations }
- SessionID: Integer; //Current session id
- CurrentUser: Integer; //Currently logged in user's id
- DComputers: TStringList; //Virtual list of registered computers
- CurConnection: String; //Connection string of local database
- DoLoad: Bool; //Specifies whether or not program should load
- CurCompID: Integer; //Current computer's ID
- Spl: TfrmSplash; //Splash Screen
- NewDBType: Bool; //Specifies that new db type has been created
- VariableEditState: String; //Determines state of edit for a variable
- EditUpdate: Integer; //Specifies what update id is being edited
- EditUpdateState: String; //Specifies whether update is new or edit
- EditUpdateFile: Integer; //Specifies what update file id is being edited
- EditUpdateFileState: String; //Specifies whether update file is new or edit
- procedure LoadComputers; //Loads all registered computers into DComputers
- procedure RefreshComputerLocations;
- procedure RefreshServerLocations;
- procedure RefreshDatabaseServers;
- procedure RefreshDatabaseStatuses;
- procedure RefreshDatabaseTypes;
- procedure RefreshLists; //Performs the above 5 procedures at once
- procedure RefreshLocations;
- procedure RefreshComputers;
- procedure RefreshServers;
- procedure RefreshDatabases;
- procedure RefreshUsers;
- procedure RefreshAudit;
- procedure RefreshTools;
- procedure RefreshVariables;
- procedure RefreshServiceLog;
- procedure RefreshServiceSettings;
- procedure SaveServiceSettings;
- procedure RefreshUpdates;
- procedure RefreshUpdate(UpdateID: Integer);
- procedure RefreshUpdateFiles(UpdateID: Integer);
- procedure RefreshUpdateFile(FileID: Integer);
- procedure EnableUpdateEdit;
- procedure DisableUpdateEdit;
- procedure EnableUpdateFileEdit;
- procedure DisableUpdateFileEdit;
- procedure SelectUpdate(UpdateID: Integer);
- procedure SelectUpdateFile(FileID: Integer);
- procedure ClearUpdateFile;
- procedure SaveOptions;
- procedure LoadOptions;
- procedure ListAvailableSQLServers(Names : TStrings);
- procedure GetServerList;
- procedure SetPriv;
- procedure SaveAudit(TableName: String; RecordID: Integer; State: String);
- end;
- var
- frmMain: TfrmMain;
- function PromptIP(IPAddress: TIPAddress): TIPAddress;
- implementation
- uses uComputer, uLocation, uDatabase, uServer, uUser, uLogin,
- uUpdate, uPriv, uConnection, MainUnit, uTool, ActionUnit, RemDeskUnit,
- OptionsUnit, AboutUnit, AdoInt, OleDB, ActiveX, ComObj, uAuditDetail,
- uEditIP;
- {$R *.dfm}
- procedure TfrmMain.cmdNewComputerClick(Sender: TObject);
- begin
- frmComputer.EditState:= 'New';
- frmComputer.ShowModal;
- RefreshComputers;
- end;
- procedure TfrmMain.cmdEditComputerClick(Sender: TObject);
- begin
- if not QComputers.IsEmpty then begin
- frmComputer.EditState:= 'Edit';
- frmComputer.EditComp:= QComputers.FieldByName('ID').AsInteger;
- frmComputer.ShowModal;
- RefreshComputers;
- end;
- end;
- procedure TfrmMain.cmdCancelUpdateClick(Sender: TObject);
- begin
- DisableUpdateEdit;
- SelectUpdate(EditUpdate);
- lstUpdatesClick(Sender);
- end;
- procedure TfrmMain.cmdCloseClick(Sender: TObject);
- begin
- Close;
- end;
- procedure TfrmMain.FormCreate(Sender: TObject);
- var
- R: TRegistry;
- C: TfrmConnection;
- CName: String;
- IsValid: Bool;
- P: String;
- D: TEncType;
- DidConnect: Bool;
- X: Integer;
- Con: TfrmConnection;
- begin
- Spl:= TfrmSplash.Create(nil);
- Self.Hide;
- Spl.Show;
- Spl.PostStat('Loading Program...', 10);
- Application.ProcessMessages;
- DoLoad:= True; //Presume all is ok from beginning
- lblAvailServCount.Caption:= ''; //Clear contents for number of available servers
- pServiceSettings.Align:= alClient;
- pUpdateFiles.Align:= alClient;
- Pages.Align:= alClient;
- lblUpdateID.Caption:= '';
- if DB.Connected then DB.Connected:= False; //Disconnect if connected
- CurrentConnection:= TConn.Create; //Create local connection object
- Spl.PostStat('Finding Connection Information...', 20);
- R:= TRegistry.Create; //Open registry
- try
- R.RootKey:= HKEY_LOCAL_MACHINE; //Open registry root
- if R.KeyExists('software\7Lands\Rugm\Local\Connection') then begin //Make sure registry key exists
- R.Access:= KEY_READ; //Set registry access
- R.OpenKey('software\7Lands\Rugm\Local\Connection', True); //Open registry key
- CurrentConnection.Server:= R.ReadString('Server'); //and set connection info
- CurrentConnection.Database:= R.ReadString('Database');
- CurrentConnection.Login:= R.ReadString('Login');
- CurrentConnection.Password:= R.ReadString('Pass');
- CurrentConnection.Provider:= R.ReadString('Provider');
- CurrentConnection.PersistSecurityInfo:= R.ReadBool('Persist');
- R.CloseKey; //Close registry key
- end else begin //Connection info was not found, prompt for it
- //Prompt for Connection
- ShowMessage('No local database connection information found.'+#13+
- 'Please enter the required connection details...');
- C:= TfrmConnection.Create(frmMain); //Create connection form
- try
- C.ShowModal; //Open connection form and prompt for connection details
- CurrentConnection.Server:= C.txtServer.Text;
- CurrentConnection.Database:= C.txtDatabase.Text;
- CurrentConnection.Login:= C.txtLogin.Text;
- CurrentConnection.Password:= C.txtPass.Text;
- if C.ModalResult = mrCancel then Close; //Close if canceled
- finally
- C.Free;
- end;
- end;
- finally
- R.Free;
- end;
- Spl.PostStat('Connecting to Database...', 30);
- CurConnection:= CurrentConnection.ConnectionString; //Build local connection string
- DB.ConnectionString:= CurrentConnection.ConnectionString; //Assign connection string to database component\
- //try to connect with givin information
- DidConnect:= True;
- for X := 1 to 4 do begin
- try
- if DidConnect = False then begin
- Con:= TfrmConnection.Create(nil);
- try
- Con.txtServer.Text:= CurrentConnection.Server;
- Con.txtDatabase.Text:= CurrentConnection.Database;
- Con.txtLogin.Text:= CurrentConnection.Login;
- Con.txtPass.Text:= CurrentConnection.Password;
- Con.ShowModal;
- if Con.ModalResult <> mrCancel then begin //Modal result doesn't seem to return as expected
- CurrentConnection.Server:= Con.txtServer.Text;
- CurrentConnection.Database:= Con.txtDatabase.Text;
- CurrentConnection.Login:= Con.txtLogin.Text;
- CurrentConnection.Password:= Con.txtPass.Text;
- end else begin
- DidConnect:= False;
- Break;
- end;
- finally
- Con.Free;
- end;
- end;
- DidConnect:= True;
- DB.Connected:= True;
- except
- on e: exception do begin
- DidConnect:= False;
- end;
- end;
- end;
- if not DidConnect then begin
- DoLoad:= False;
- ShowMessage('Closing application for failure to connect to database.');
- Close;
- end else begin
- Spl.PostStat('Identifying This Computer...', 40);
- //Check Computer Validity
- CurCompID:= CompOnKE; //Get computer ID from database
- if CurCompID = -1 then begin //Check if ID is valid
- DoLoad:= False; //ID is not valid, computer is not registered
- Q.SQL.Text:= 'Select * from LoginHist where id = 0'; //Record the failure in database
- Q.Open;
- Q.Append;
- Q['UserID']:= -1;
- Q['LDT']:= Now;
- Q['Login']:= '';
- Q['Pass']:= '';
- Q['Result']:= 'Computer Not Registered';
- Q['CompName']:= GetCompName;
- Q['CompIP']:= GetIPAddress;
- Q['CompID']:= -1;
- Q.Post;
- Q.Close;
- Close;
- end;
- //Code from here to the end of create procedure needs to be
- //moved elsewhere for after login
- oldOrd:= '';
- if DoLoad then begin
- //DLocations:= TStringList.Create;
- DComputers:= TStringList.Create; //Create virtual computer list
- Spl.PostStat('Loading System Variables...', 45);
- RefreshVariables; {
- Spl.PostStat('Loading Computers...', 50);
- LoadComputers; } //Load registered computers into DComputers
- Spl.PostStat('Loading Filters...', 50);
- RefreshLists; //Refreshes all necessary virtual lists
- Spl.PostStat('Loading Options...', 60);
- LoadOptions;
- Spl.PostStat('Refreshing Tools...', 70);
- RefreshTools;
- Spl.PostStat('Refreshing Service Settings...', 80);
- RefreshServiceSettings;
- Spl.PostStat('Starting Program...', 90);
- if Panel4.Visible = True then //Prepare available server panel
- cmdAvailServ.Caption:= '<'
- else
- cmdAvailServ.Caption:= '>';
- if Panel1.Visible = True then //Prepare available database panel
- cmdAvailDB.Caption:= '<'
- else
- cmdAvailDB.Caption:= '>';
- //Refresh list of current page
- case Pages.ActivePageIndex of
- 0: RefreshLocations;
- 1: RefreshComputers;
- 2: RefreshServers;
- 3: RefreshDatabases;
- 4: RefreshUsers;
- 5: RefreshAudit;
- 8: RefreshUpdates;
- end;
- end;
- end;
- end;
- // Loads all registered computers into DComputers list with objComp objects
- procedure TfrmMain.LoadComputers;
- var
- objComp: TComputer;
- X: Integer;
- begin
- for X:= 0 to DComputers.Count - 1 do
- DComputers.Objects[X].Free;
- DComputers.Clear;
- QTemp.SQL.Text:= 'Select * from Computers';
- QTemp.SQL.Append('where Deleted <> 1');
- QTemp.Open;
- QTemp.First;
- while not QTemp.Eof do begin
- objComp:= TComputer.Create;
- objComp.ID:= QTemp['ID'];
- objComp.CompName:= QTemp['CompName'];
- objComp.Caption:= QTemp['Caption'];
- objComp.Description:= QTemp['Description'];
- objComp.LocationID:= QTemp['LocationID'];
- objComp.IPAddress:= QTemp['IPAddress'];
- objComp.Active:= QTemp['Active'];
- DComputers.AddObject(objComp.CompName, objComp);
- QTemp.Next;
- end;
- QTemp.Close;
- end;
- procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
- var
- X: Integer;
- R: TRegistry;
- begin
- if DoLoad then begin
- SaveOptions;
- if DB.Connected then DB.Connected:= False;
- for X := 0 to DComputers.Count - 1 do
- if assigned(DComputers.Objects[X]) then DComputers.Objects[X].Free;
- DComputers.Free;
- for X:= 0 to cboDatabaseServer.Items.Count - 1 do
- cboDatabaseServer.Items.Objects[X].Free;
- for X:= 0 to cboComputerLocation.Items.Count - 1 do
- cboComputerLocation.Items.Objects[X].Free;
- for X:= 0 to cboServerLocation.Items.Count - 1 do
- cboServerLocation.Items.Objects[X].Free;
- for X:= 0 to lstToolMenu.Items.Count - 1 do
- lstToolMenu.Items.Objects[X].Free;
- R:= TRegistry.Create;
- try
- R.RootKey:= HKEY_LOCAL_MACHINE;
- R.Access:= KEY_WRITE;
- R.OpenKey('software\7Lands\Rugm\Local\Connection', True);
- R.WriteString('Server', CurrentConnection.Server);
- R.WriteString('Database', CurrentConnection.Database);
- R.WriteString('Login', CurrentConnection.Login);
- R.WriteString('Pass', CurrentConnection.Password);
- R.WriteString('Provider', CurrentConnection.Provider);
- R.WriteBool('Persist', CurrentConnection.PersistSecurityInfo);
- R.CloseKey;
- finally
- R.Free;
- end;
- end;
- if assigned(Self.Spl) then Self.Spl.Free;
- end;
- procedure TfrmMain.RefreshDatabaseStatuses;
- var
- X: Integer;
- V: TValue;
- begin
- //cboDBStatus
- for X:= 0 to cboDBStatus.Items.Count - 1 do
- cboDBStatus.Items.Objects[X].Free;
- V:= TValue.Create;
- V.ID:= -1;
- V.Flt:= 2;
- V.Caption:= 'All Status';
- cboDBStatus.Items.AddObject(V.Caption, V);
- QTemp.SQL.Text:= 'Select * from SYS where FLT = 2';
- QTemp.SQL.Append('and deleted <> 1');
- QTemp.Open;
- QTemp.First;
- While Not QTemp.Eof do begin
- V:= TValue.Create;
- V.ID:= QTemp.FieldByName('ID').AsInteger;
- V.Flt:= QTemp.FieldByName('FLT').AsInteger;
- V.Caption:= QTemp.FieldByName('Val').AsString;
- cboDBStatus.Items.AddObject(V.Caption, V);
- QTemp.Next;
- end;
- QTemp.Close;
- cboDBStatus.ItemIndex:= 0;
- end;
- procedure TfrmMain.RefreshDatabaseTypes;
- var
- X, C: Integer;
- V: TValue;
- begin
- //If something's already selected, temporarily save what's selected to be re-selected
- C:= -1;
- if cboDBType.Items.Count > 0 then begin
- V:= TValue(cboDBType.Items.Objects[cboDBType.ItemIndex]);
- C:= V.ID;
- end;
- for X:= 0 to cboDBType.Items.Count - 1 do
- cboDBType.items.Objects[X].Free;
- V:= TValue.Create;
- V.ID:= -1;
- V.Flt:= 1;
- V.Caption:= 'All Types';
- cboDBType.Items.AddObject(V.Caption, V);
- QTemp.SQL.Text:= 'Select * from SYS where FLT = 1';
- QTemp.SQL.Append('and deleted <> 1');
- QTemp.Open;
- QTemp.First;
- While Not QTemp.Eof do begin
- V:= TValue.Create;
- V.ID:= QTemp.FieldByName('ID').AsInteger;
- V.Flt:= QTemp.FieldByName('FLT').AsInteger;
- V.Caption:= QTemp.FieldByName('Val').AsString;
- cboDBType.Items.AddObject(V.Caption, V);
- QTemp.Next;
- end;
- QTemp.Close;
- //If something was previously selected, re-select it
- if C = -1 then
- cboDBType.ItemIndex:= 0
- else begin
- for X := 0 to cboDBType.Items.Count - 1 do begin
- V:= TValue(cboDBType.Items.Objects[X]);
- if V.ID = C then cboDBType.ItemIndex:= X;
- end;
- end;
- end;
- procedure TfrmMain.RefreshLists;
- var
- X: Integer;
- V: TValue;
- begin
- RefreshComputerLocations;
- RefreshServerLocations;
- RefreshDatabaseServers;
- RefreshDatabaseStatuses;
- RefreshDatabaseTypes;
- end;
- procedure TfrmMain.cboDatabaseServerClick(Sender: TObject);
- begin
- if QDatabases.Active then QDatabases.Close;
- RefreshDatabases;
- end;
- procedure TfrmMain.cboComputerLocationClick(Sender: TObject);
- begin
- RefreshComputers;
- end;
- procedure TfrmMain.RefreshLocations;
- begin
- QLocations.Close;
- QLocations.SQL.Text:= 'select L.ID, L.Caption as Location, '+
- 'C.Caption as Server , L.Description, L.Address1, L.Address2,'+
- 'L.City, L.State, L.Zip, L.Active '+
- 'from Locations L '+
- 'left join Computers C on L.PrimaryServerID = C.ID '+
- 'where L.deleted <> 1';
- if cboLocationOrder.ItemIndex > 0 then begin
- QLocations.SQL.Text:= QLocations.SQL.Text + ' Order By ';
- Case cboLocationOrder.ItemIndex of
- 1: begin //Location
- QLocations.SQL.Append('L.Caption');
- end;
- 2: begin //Server
- QLocations.SQL.Append('C.Caption');
- end;
- 3: begin //Description
- QLocations.SQL.Append('L.Description');
- end;
- end;
- if optLocationZ.Checked then
- QLocations.SQL.Append(' Desc');
- End;
- QLocations.Open;
- lblLocTotal.Caption:= IntToStr(QLocations.RecordCount) + ' Location';
- if QLocations.RecordCount <> 1 then
- lblLocTotal.Caption:= lblLocTotal.Caption + 's';
- end;
- procedure TfrmMain.RefreshComputers;
- var
- objLocation: TLocation;
- X: Integer;
- IPS: TStringList;
- SameIP, SameName: Bool;
- begin
- objLocation:= TLocation(cboComputerLocation.Items.Objects
- [cboComputerLocation.ItemIndex]);
- QComputers.Close;
- QComputers.SQL.Text:= 'select C.ID, C.CompName,C.Caption, '+
- 'L.Caption as Location, C.IPAddress as IP, C.Description, '+
- 'C.Active, C.RMPNum '+
- ' from computers C '+
- 'left join Locations L on C.LocationID = L.ID where c.ID > -100';
- QComputers.SQL.Append('and C.deleted <> 1');
- QComputers.SQL.Text:= QComputers.SQL.Text;
- if cboComputerLocation.ItemIndex > 0 then begin
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' and C.LocationID = '+ IntToStr(objLocation.ID);
- end;
- case cboCompStatus.ItemIndex of
- 1: begin
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' and c.Active = ''Y'' ';
- end;
- 2: begin
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' and c.Active <> ''Y'' ';
- end;
- end;
- case cboCompOrder.ItemIndex of
- 1: begin //Caption
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' order by C.Caption';
- end;
- 2: begin //Location
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' order by L.Caption';
- end;
- 3: begin //IP Address
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' order by C.IPAddress';
- end;
- 4: begin //Description
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' order by C.Description';
- end;
- 5: begin //Comp Name
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' order by C.CompName';
- end;
- 6: begin //Status
- QComputers.SQL.Text:= QComputers.SQL.Text +
- ' order by C.Active';
- end;
- end;
- if cboCompOrder.ItemIndex > 0 then begin
- if optComputerZ.Checked then
- QComputers.SQL.Text:= QComputers.SQL.Text + ' Desc';
- end;
- QComputers.Open;
- lblCompTotal.Caption:= IntToStr(QComputers.RecordCount) + ' Computer';
- if QComputers.RecordCount <> 1 then
- lblCompTotal.Caption:= lblCompTotal.Caption + 's';
- IPS:= TStringList.Create;
- QComputers.First;
- SameIP:= False;
- QTemp.SQL.Text:= 'Select ID, CompName, IPAddress as IP from Computers';
- QTemp.SQL.Append('where deleted <> 1');
- QTemp.Open;
- QTemp.First;
- While Not QTemp.Eof do begin
- if (QTemp.FieldByName('IP').AsString <> '') and
- (QTemp.FieldByName('IP').AsString <> Null) then
- begin
- IPS.Append(QTemp.FieldByName('IP').AsString);
- for X:= 0 to IPS.Count - 2 do begin
- if IPS[X] = QTemp.FieldByName('IP').AsString then
- SameIP:= True;
- end;
- end;
- QTemp.Next;
- end;
- QTemp.First;
- for X:= 0 to IPS.Count - 1 do
- IPS.Objects[X].Free;
- IPS.Clear;
- SameName:= False;
- While Not QTemp.Eof do begin
- if (QTemp.FieldByName('CompName').AsString <> '') and
- (QTemp.FieldByName('CompName').AsString <> Null) then
- begin
- IPS.Append(QTemp.FieldByName('CompName').AsString);
- for X:= 0 to IPS.Count - 2 do begin
- if IPS[X] = QTemp.FieldByName('CompName').AsString then
- SameName:= True;
- end;
- end;
- QTemp.Next;
- end;
- QTemp.Close;
- if SameIP or SameName then begin
- lblWarning.Caption:= 'Multiple Computers with Same ';
- if SameName and SameIP then
- lblWarning.Caption:= lblWarning.Caption + 'Computer Name and IP Address'
- else if SameIP then
- lblWarning.Caption:= lblWarning.Caption + 'IP Address'
- else if SameName then
- lblWarning.Caption:= lblWarning.Caption + 'Computer Name';
- lblWarning.Caption:= lblWarning.Caption + '.';
- lblWarning.Visible:= True;
- end else begin
- lblWarning.Visible:= False;
- end;
- end;
- procedure TfrmMain.RefreshServers;
- var
- L: TLocation;
- begin
- L:= TLocation(cboServerLocation.Items.Objects[cboServerLocation.ItemIndex]);
- if QServers.Active then
- QServers.Close;
- QServers.SQL.Text:= 'select S.ID, S.Caption, S.SQLName, C.Caption as Computer,'+
- ' L.Caption as Location, C.IPAddress, C.LocationID, S.Active, S.Description,'+
- ' P.Val as Provider, S.Login, S.Pass, V.Val as Version from SQLServers S '+
- 'left Join Computers C on S.CompID = C.ID '+
- 'left Join Locations L on C.LocationID = L.ID '+
- 'left Join SYS V on S.VersionID = V.ID '+
- 'left Join SYS P on S.ProviderID = P.ID '+
- ' where s.id > -100 and s.deleted <> 1 ';
- if cboServerLocation.ItemIndex > 0 then
- QServers.SQL.Text:= QServers.SQL.Text +
- ' and C.LocationID = '+ IntToStr(L.ID);
- if cboSQLServerStatus.ItemIndex > 0 then begin
- if cboSQLServerStatus.ItemIndex = 1 then
- QServers.SQL.Text:= QServers.SQL.Text +
- ' and S.active = ''Y''';
- if cboSQLServerStatus.ItemIndex = 2 then
- QServers.SQL.Text:= QServers.SQL.Text +
- ' and S.active <> ''Y''';
- end;
- if cboServerOrder.ItemIndex > 0 then begin
- QServers.SQL.Text:= QServers.SQL.Text +
- ' Order by ';
- Case cboServerOrder.ItemIndex of
- 1: begin
- QServers.SQL.Text:= QServers.SQL.Text + 'S.Caption';
- end;
- 2: begin
- QServers.SQL.Text:= QServers.SQL.Text + 'S.SQLName';
- end;
- 3: begin
- QServers.SQL.Text:= QServers.SQL.Text + 'C.Caption';
- end;
- 4: begin
- QServers.SQL.Text:= QServers.SQL.Text + 'L.Caption';
- end;
- 5: begin
- QServers.SQL.Text:= QServers.SQL.Text + 'C.IPAddress';
- end;
- 6: begin
- QServers.SQL.Text:= QServers.SQL.Text + 'S.Provider';
- end;
- end;
- if optServerZ.Checked then
- QServers.SQL.Text:= QServers.SQL.Text + ' Desc';
- end;
- QServers.Open;
- lblServTotal.Caption:= IntToStr(QServers.RecordCount) + ' Server';
- if QServers.RecordCount <> 1 then
- lblServTotal.Caption:= lblServTotal.Caption + 's';
- //GetServerList;
- end;
- procedure TfrmMain.RefreshDatabases;
- var
- objServer: TServer;
- X: Integer;
- TStr: String;
- Stat: TValue;
- DBType: TValue;
- begin
- lblDBTotal.Caption:= '';
- objServer:= TServer.Create;
- tabDatabases.Enabled:= False;
- Try
- objServer:= TServer(cboDatabaseServer.Items.Objects[
- cboDatabaseServer.ItemIndex]);
- if DBMaster.Connected then DBMaster.Connected:= False;
- if objServer.ID > -1 then begin
- DBMaster.ConnectionString:= BuildConnectionString(
- objServer.SQLName,
- 'Master',
- objServer.Login, objServer.Pass, objServer.Provider, False);
- DBMaster.Connected:= True;
- end;
- QDatabases.SQL.Text:= 'Select DBName from Databases where ServerID = '+
- IntToStr(objServer.ID);
- QDatabases.SQL.Append('and deleted <> 1');
- QDatabases.Open;
- QDatabases.First;
- X:= 0;
- TStr:= '''';
- While Not QDatabases.Eof do begin
- if X > 0 then
- TStr:= TStr + ''', ''';
- TStr:= TStr + QDatabases.FieldByName('DBName').AsString;
- X:= X + 1;
- QDatabases.Next;
- end;
- TStr:= TStr + '''';
- QDatabases.Close;
- if QSysDatabases.Active then QSYSDatabases.Close;
- if objServer.ID > -1 then begin
- //MessageDlg(TStr, mtWarning, [mbOK], 0);
- QSYSDatabases.SQL.Text:= 'select Name from sysDatabases where name not in (''master'', ''tempdb'', ''model'', ''ReportServer'', ''ReportServerTempDB'', ''msdb'', ''Northwind'', ''Pubs'') and '+
- 'name not in ('+ TStr +') order by Name';
- //MessageDlg(QSysDatabases.SQL.Text, mtWarning, [mbOK], 0);
- QSYSDatabases.Open;
- lblDBTotal.Caption:= IntToStr(QSYSDatabases.RecordCount) + ' Available Database';
- if QSYSDatabases.RecordCount <> 1 then
- lblDBTotal.Caption:= lblDBTotal.Caption + 's';
- end;
- //end;
- except
- on e: exception do begin
- MessageDlg('Failed to connect to "'+
- objServer.SQLName+'"'+#13+#13+
- e.Message, mtWarning, [mbOK], 0);
- end;
- end;
- //QSYSDatabases.Open;
- QDatabases.Close;
- Stat:= TValue(cboDBStatus.Items.Objects[cboDBStatus.ItemIndex]);
- DBType:= TValue(cboDBType.Items.Objects[cboDBType.ItemIndex]);
- QDatabases.SQL.Text:= 'Select D.ID, S.SQLName, D.DBName, '+
- 'D.Caption, Y.Val as Type, SY.Val as Status, D.Active, D.DBType, '+
- 'Y.IsRMP as RMPro, SS.Val as InSwitch, D.Login, D.Pass '+
- 'from Databases D '+
- ' Left Join SQLServers S on S.ID = D.ServerID '+
- ' Left Join SYS Y on Y.ID = D.DBType'+
- ' Left Join SYS SY on SY.ID = D.Active'+
- ' Left Join SYS SS on SS.ID = D.InSwitch';
- QDatabases.SQL.Append('Where d.deleted <> 1');
- if cboDatabaseServer.ItemIndex > 0 then
- QDatabases.SQL.Text:= QDatabases.SQL.Text +
- ' and ServerID = '+ IntToStr(objServer.ID)
- else
- QDatabases.SQL.Text:= QDatabases.SQL.Text +
- ' and ServerID > -1 ';
- if cboDBStatus.ItemIndex > 0 then
- QDatabases.SQL.Text:= QDatabases.SQL.Text +
- ' and D.active = '+ IntToStr(Stat.ID);
- if cboDBType.ItemIndex > 0 then
- QDatabases.SQL.Text:= QDatabases.SQL.Text +
- ' and D.DBType = '+ IntToStr(DBType.ID);
- if cboDBOrder.ItemIndex > 0 then begin
- QDatabases.SQL.Text:= QDatabases.SQL.Text + ' Order By ';
- Case cboDBOrder.ItemIndex of
- 1: begin
- QDatabases.SQL.Text:= QDatabases.SQL.Text + 'D.Caption';
- end;
- 2: begin
- QDatabases.SQL.Text:= QDatabases.SQL.Text + 'S.SQLName';
- end;
- 3: begin
- QDatabases.SQL.Text:= QDatabases.SQL.Text + 'D.DBName';
- end;
- 4: begin
- QDatabases.SQL.Text:= QDatabases.SQL.Text + 'Y.Val';
- end;
- 5: begin
- QDatabases.SQL.Text:= QDatabases.SQL.Text + 'SY.Val';
- end;
- end;
- if optDBZ.Checked then
- QDatabases.SQL.Text:= QDatabases.SQL.Text + ' Desc';
- end;
- QDatabases.Open;
- lblRegDBTotal.Caption:= IntToStr(QDatabases.RecordCount) + ' Registered Databases';
- tabDatabases.Enabled:= True;
- end;
- procedure TfrmMain.RefreshUsers;
- begin
- if QUsers.Active then QUsers.Close;
- QUsers.SQL.Text:= 'Select * from users where deleted <> 1';
- if cboUserOrder.ItemIndex > 0 then begin
- QUsers.SQL.Append('Order By ');
- case cboUserOrder.ItemIndex of
- 1: begin //First Name
- QUsers.SQL.Append('FName');
- end;
- 2: begin //Middle Name
- QUsers.SQL.Append('MName');
- end;
- 3: begin //Last Name
- QUsers.SQL.Append('LName');
- end;
- 4: begin //Login Name
- QUsers.SQL.Append('Login');
- end;
- 5: begin //Active
- QUsers.SQL.Append('Active');
- end;
- end;
- end;
- QUsers.Open;
- lblUserTotal.Caption:= IntToStr(QUsers.RecordCount) + ' User';
- if QUsers.RecordCount <> 1 then
- lblUserTotal.Caption:= lblUserTotal.Caption + 's';
- end;
- procedure TfrmMain.DBGrid2DblClick(Sender: TObject);
- begin
- if GetPriv(CurrentUser, pvComputers) = 1 then
- cmdEditComputerClick(self);
- end;
- procedure TfrmMain.cmdEditLocationClick(Sender: TObject);
- begin
- if not QLocations.IsEmpty then begin
- frmLocation.EditState:= 'Edit';
- frmLocation.EditLoc:= QLocations.FieldByName('ID').AsInteger;
- frmLocation.ShowModal;
- RefreshLocations;
- RefreshComputerLocations;
- RefreshServerLocations;
- end;
- end;
- procedure TfrmMain.cmdNewLocationClick(Sender: TObject);
- begin
- frmLocation.EditState:= 'New';
- frmLocation.ShowModal;
- RefreshLocations;
- RefreshComputerLocations;
- RefreshServerLocations;
- end;
- procedure TfrmMain.DBGrid1DblClick(Sender: TObject);
- begin
- if GetPriv(CurrentUser, pvLocations) = 1 then
- cmdEditLocationClick(self);
- end;
- procedure TfrmMain.DBGrid2TitleClick(Column: TColumn);
- var ord, desc: string;
- begin
- ord:= Column.FieldName;
- if oldOrd <> ord then desc:= ''
- else desc:= ' desc';
- //q + ord +
- //id dbGrid2.Tag < -1 then
- end;
- procedure TfrmMain.DBGrid4DblClick(Sender: TObject);
- begin
- if GetPriv(CurrentUser, pvDatabases) = 1 then
- cmdAddDBClick(Self);
- end;
- procedure TfrmMain.cmdAddDBClick(Sender: TObject);
- var
- S: TServer;
- begin
- if QSysDatabases.Active then begin
- if not QSysDatabases.IsEmpty then begin
- //Add SYS Database to Local List
- frmDatabase.EditState:= 'New';
- S:= TServer(cboDatabaseServer.Items.Objects[cboDatabaseServer.ItemIndex]);
- frmDatabase.ServerID:= S.ID;
- frmDatabase.DBName:= QSysDatabases.FieldByName('Name').AsString;
- frmDatabase.DBID:= -1;
- frmDatabase.CallState:= 'Pre';
- frmDatabase.ShowModal;
- frmMain.RefreshDatabases;
- end;
- end;
- end;
- procedure TfrmMain.cmdAddVariableClick(Sender: TObject);
- var
- Q: TADOQuery;
- begin
- //Enable adding new system variable
- if cmdAddVariable.Caption = 'Add' then begin
- cmdAddVariable.Caption:= 'Save';
- cmdEditVariable.Caption:= 'Cancel';
- lstVariables.Enabled:= False;
- cmdEditVariable.Enabled:= True;
- cmdAddVariable.Enabled:= True;
- cmdDeleteVariable.Enabled:= False;
- txtVariableName.Enabled:= True;
- txtVariableValue.Enabled:= True;
- txtVariableName.Clear;
- txtVariableValue.Clear;
- end else if cmdAddVariable.Caption = 'Save' then begin
- try
- if txtVariableName.Text <> '' then begin
- if txtVariableValue.Text <> '' then begin
- if Pos(' ', txtVariableName.Text) = 0 then begin
- if LeftStr(txtVariableName.Text, 1) <> '%' then
- txtVariableName.Text:= '%' + txtVariableName.Text;
- if RightStr(txtVariableName.Text, 1) <> '%' then
- txtVariableName.Text:= txtVariableName.Text + '%';
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= frmMain.DB;
- Q.SQL.Text:= 'select * from variables where name = '''+txtVariableName.Text+'''';
- Q.Open;
- if Q.IsEmpty then begin
- Q.Append;
- VariableEditState:= 'New';
- end else begin
- Q.Edit;
- VariableEditState:= 'Edit';
- end;
- Q['Name']:= txtVariableName.Text;
- Q['Value']:= txtVariableValue.Text;
- Q['System']:= 0;
- Q['Category']:= 0;
- Q.Post;
- txtVariableName.Enabled:= False;
- txtVariableValue.Enabled:= False;
- cmdAddVariable.Caption:= 'Add';
- cmdEditVariable.Caption:= 'Edit';
- cmdEditVariable.Enabled:= False;
- lstVariables.Enabled:= True;
- Q.Close;
- RefreshVariables;
- finally
- if Q.Active then Q.Close;
- Q.Free;
- end;
- end else begin
- raise Exception.Create('Variable cannot contain spaces');
- end;
- end else begin
- raise Exception.Create('Variable must have a value.');
- end;
- end else begin
- raise Exception.Create('Variable must have a name.');
- end;
- except
- on e: exception do begin
- ShowMessage('Cannot save variable because of the following reason(s):'+#10+#10+E.Message);
- end;
- end;
- end;
- end;
- procedure TfrmMain.DBGrid6DblClick(Sender: TObject);
- var
- S: TServer;
- begin
- if GetPriv(CurrentUser, pvDatabases) = 1 then begin
- frmDatabase.EditState:= 'Edit';
- frmDatabase.DBID:= QDatabases.FieldByName('ID').AsInteger;
- S:= TServer(cboDatabaseServer.Items.Objects[cboDatabaseServer.ItemIndex]);
- frmDatabase.ServerID:= S.ID;
- frmDatabase.CallState:= 'Made';
- NewDBType:= False;
- frmDatabase.ShowModal;
- if NewDBType then begin
- Self.RefreshDatabaseTypes;
- end;
- RefreshDatabases;
- end;
- end;
- procedure TfrmMain.cboLocationOrderClick(Sender: TObject);
- begin
- RefreshLocations;
- end;
- procedure TfrmMain.cboServerOrderClick(Sender: TObject);
- begin
- RefreshServers;
- end;
- procedure TfrmMain.SaveOptions;
- var
- CompLoc: TLocation;
- ServLoc: TLocation;
- DBServ: TServer;
- DBType: TValue;
- R: TRegistry;
- begin
- try
- R:= TRegistry.Create;
- R.RootKey:= HKEY_LOCAL_MACHINE;
- R.Access:= KEY_WRITE;
- R.OpenKey('software\7Lands\Rugm\Local\Display', True);
- try
- R.WriteInteger('LocationsOrder', cboLocationOrder.ItemIndex);
- if optLocationZ.Checked then
- R.WriteString('LocationsAD', 'D')
- else
- R.WriteString('LocationsAD', 'A');
- CompLoc:= TLocation(cboComputerLocation.Items.Objects[
- cboComputerLocation.ItemIndex]);
- R.WriteInteger('ComputersOrder', cboCompOrder.ItemIndex);
- R.WriteInteger('ComputersLocation', CompLoc.ID);
- R.WriteInteger('ComputersStatus', cboCompStatus.ItemIndex);
- if optComputerZ.Checked then
- R.WriteString('ComputersAD', 'D')
- else
- R.WriteString('ComputersAD', 'A');
- ServLoc:= TLocation(cboServerLocation.Items.Objects[
- cboServerLocation.ItemIndex]);
- R.WriteInteger('ServersOrder', cboServerOrder.ItemIndex);
- R.WriteInteger('ServersLocation', ServLoc.ID);
- R.WriteInteger('ServersActive', cboSQLServerStatus.ItemIndex);
- if optServerZ.Checked then
- R.WriteString('ServersAD', 'D')
- else
- R.WriteString('ServersAD', 'A');
- R.WriteInteger('ServersAvailWidth', Panel4.Width);
- if Panel4.Visible = True then
- R.WriteString('ServersAvailVis', 'Y')
- else
- R.WriteString('ServersAvailVis', 'N');
- DBServ:= TServer(cboDatabaseServer.Items.Objects[
- cboDatabaseServer.ItemIndex]);
- DBType:= TValue(cboDBType.Items.Objects[cboDBType.ItemIndex]);
- R.WriteInteger('DatabasesOrder', cboDBOrder.ItemIndex);
- R.WriteInteger('DatabasesServer', DBServ.ID);
- R.WriteInteger('DatabasesStatus', cboDBStatus.ItemIndex);
- R.WriteInteger('DatabasesType', DBType.ID);
- if optDBZ.Checked then
- R.WriteString('DatabasesAD', 'D')
- else
- R.WriteString('DatabasesAD', 'A');
- R.WriteInteger('DatabasesAvailWidth', Panel1.Width);
- if Panel1.Visible = True then
- R.WriteString('DatabasesAvailVis', 'Y')
- else
- R.WriteString('DatabasesAvailVis', 'N');
- R.WriteInteger('UsersOrder', cboUserOrder.ItemIndex);
- if optUserZ.Checked then
- R.WriteString('UsersAD', 'D')
- else
- R.WriteString('UsersAD', 'A');
- R.WriteInteger('WindowWidth', frmMain.Width);
- R.WriteInteger('WindowHeight', frmMain.Height);
- R.WriteInteger('WindowTop', frmMain.Top);
- R.WriteInteger('WindowLeft', frmMain.Left);
- R.WriteInteger('WindowTab', Pages.TabIndex);
- finally
- R.CloseKey;
- R.Free;
- end;
- except
- on e: exception do begin
- end;
- end;
- end;
- procedure TfrmMain.LoadOptions;
- var
- R: TRegistry;
- CompLoc: TLocation;
- ServLoc: TLocation;
- DBType: TValue;
- X: Integer;
- DoLoad: Boolean;
- begin
- R:= TRegistry.Create;
- try
- R.RootKey:= HKEY_LOCAL_MACHINE;
- DoLoad:= True;
- R.Access:= KEY_READ;
- if Not R.KeyExists('software\7Lands\Rugm\Local\Display') then begin
- DoLoad:= False;
- //Set Default Values
- frmMain.Width:= 750;
- frmMain.Height:= 550;
- frmMain.Left:= Round((screen.Width / 2) - (frmMain.Width / 2));
- frmMain.Top:= Round((screen.Height / 2) - (frmMain.Height / 2));
- Pages.ActivePage:= tabLocations;
- //tabLocations.Show;
- cboLocationOrder.ItemIndex:= 1;
- optLocationA.Checked:= True;
- cboComputerLocation.ItemIndex:= 0;
- cboCompStatus.ItemIndex:= 0;
- cboCompOrder.ItemIndex:= 1;
- optComputerA.Checked:= True;
- cboServerLocation.ItemIndex:= 0;
- cboSQLServerStatus.ItemIndex:= 0;
- cboServerOrder.ItemIndex:= 1;
- optServerA.Checked:= True;
- cboDatabaseServer.ItemIndex:= 0;
- cboDBStatus.ItemIndex:= 0;
- cboDBType.ItemIndex:= 0;
- cboDBOrder.ItemIndex:= 1;
- optDBA.Checked:= True;
- cboUserOrder.ItemIndex:= 1;
- optUserA.Checked:= True;
- end;
- except
- on e: exception do begin end;
- end;
- R.Free;
- if DoLoad = True then begin
- try
- R:= TRegistry.Create;
- R.RootKey:= HKEY_LOCAL_MACHINE;
- R.Access:= KEY_READ;
- R.OpenKey('software\7Lands\Rugm\Local\Display', True);
- try
- cboLocationOrder.ItemIndex:= R.ReadInteger('LocationsOrder');
- if R.ReadString('LocationsAD') = 'A' then
- optLocationA.Checked:= True
- else
- optLocationZ.Checked:= True;
- //RefreshLocations;
- for X:= 0 to cboComputerLocation.Items.Count - 1 do begin
- CompLoc:= TLocation(cboComputerLocation.Items.Objects[X]);
- if CompLoc.ID = R.ReadInteger('ComputersLocation') then
- cboComputerLocation.ItemIndex:= X;
- end;
- if cboComputerLocation.ItemIndex < 0 then
- cboComputerLocation.ItemIndex:= 0;
- cboCompOrder.ItemIndex:= R.ReadInteger('ComputersOrder');
- cboCompStatus.ItemIndex:= R.ReadInteger('ComputersStatus');
- if R.ReadString('ComputersAD') = 'A' then
- optComputerA.Checked:= True
- else
- optComputerZ.Checked:= True;
- //RefreshComputers;
- for X:= 0 to cboServerLocation.Items.Count - 1 do begin
- ServLoc:= TLocation(cboServerLocation.Items.Objects[X]);
- if ServLoc.ID = R.ReadInteger('ServersLocation') then
- cboServerLocation.ItemIndex:= X;
- end;
- if cboServerLocation.ItemIndex < 0 then
- cboServerLocation.ItemIndex:= 0;
- cboServerOrder.ItemIndex:= R.ReadInteger('ServersOrder');
- cboSQLServerStatus.ItemIndex:= R.ReadInteger('ServersActive');
- if R.ReadString('ServersAD') = 'A' then
- optServerA.Checked:= True
- else
- optServerZ.Checked:= True;
- Panel4.Width:= R.ReadInteger('ServersAvailWidth');
- if R.ReadString('ServersAvailVis') = 'N' then
- Panel4.Visible:= False
- else
- Panel4.Visible:= True;
- //RefreshServers;
- {
- for X:= 0 to cboDatabaseServer.Items.Count - 1 do begin
- DBServ:= TServer(cboDatabaseServer.Items.Objects[X]);
- if DBServ.ID = R.ReadInteger('DatabasesServer') then
- cboDatabaseServer.ItemIndex:= X;
- end;
- if cboDatabaseServer.ItemIndex < 0 then }
- cboDatabaseServer.ItemIndex:= 0;
- for X:= 0 to cboDBType.Items.Count - 1 do begin
- DBType:= TValue(cboDBType.Items.Objects[X]);
- if DBType.ID = R.ReadInteger('DatabasesType') then
- cboDBType.ItemIndex:= X;
- end;
- if cboDBType.ItemIndex < 0 then
- cboDBType.ItemIndex:= 0;
- cboDBOrder.ItemIndex:= R.ReadInteger('DatabasesOrder');
- cboDBStatus.ItemIndex:= R.ReadInteger('DatabasesStatus');
- if R.ReadString('DatabasesAD') = 'A' then
- optDBA.Checked:= True
- else
- optDBZ.Checked:= True;
- Panel1.Width:= R.ReadInteger('DatabasesAvailWidth');
- if R.ReadString('DatabasesAvailVis') = 'N' then
- Panel1.Visible:= False
- else
- Panel1.Visible:= True;
- //RefreshDatabases;
- cboUserOrder.ItemIndex:= R.ReadInteger('UsersOrder');
- if R.ReadString('UsersAD') = 'A' then
- optUserA.Checked:= True
- else
- optUserZ.Checked:= True;
- frmMain.Width:= R.ReadInteger('WindowWidth');
- frmMain.Height:= R.ReadInteger('WindowHeight');
- frmMain.Top:= R.ReadInteger('WindowTop');
- frmMain.Left:= R.ReadInteger('WindowLeft');
- Pages.TabIndex:= R.ReadInteger('WindowTab');
- finally
- R.CloseKey;
- R.Free;
- end;
- except
- on e: exception do begin
- end;
- end;
- end;
- end;
- procedure TfrmMain.cmdDeleteComputerClick(Sender: TObject);
- var
- IsUsed: Bool;
- TID: Integer;
- begin
- IsUsed:= False;
- QTemp.SQL.Text:= 'Select * from SQLServers where CompID = '+
- IntToStr(QComputers.FieldByName('ID').AsInteger);
- QTemp.SQL.Append('and deleted <> 1');
- QTemp.Open;
- if not QTemp.IsEmpty then IsUsed:= True;
- QTemp.Close;
- QTemp.SQL.Text:= 'Select * from Users where PrimaryComp = '+
- IntToStr(QComputers.FieldByName('ID').AsInteger);
- QTemp.SQL.Append('and deleted <> 1');
- QTemp.Open;
- if not QTemp.IsEmpty then IsUsed:= True;
- QTemp.Close;
- if IsUsed then
- MessageDlg('Cannot delete computer because it is being used.',
- mtError, [mbOK], 0)
- else begin
- if MessageDlg('Are you sure you wish to delete computer "'+
- QComputers.FieldByName('CompName').AsString +
- '"?', mtWarning, [mbYes, mbNo], 0) = mrYes then
- begin
- TID:= QComputers.FieldByName('ID').AsInteger;
- SaveAudit('Computers', TID, 'D');
- QTemp.SQL.Text:= 'update Computers set Deleted = 1 where ID = '+
- QComputers.FieldByName('ID').AsString;
- QTemp.ExecSQL;
- QTemp.Close;
- RefreshComputers;
- end;
- end;
- end;
- procedure TfrmMain.cboDBStatusClick(Sender: TObject);
- begin
- RefreshDatabases;
- end;
- procedure TfrmMain.cmdNewDBClick(Sender: TObject);
- var
- S: TServer;
- begin
- frmDatabase.EditState:= 'New';
- S:= TServer(cboDatabaseServer.Items.Objects[cboDatabaseServer.ItemIndex]);
- frmDatabase.ServerID:= S.ID;
- frmDatabase.CallState:= 'New';
- frmDatabase.ShowModal;
- RefreshDatabases;
- end;
- procedure TfrmMain.cmdDeleteDBClick(Sender: TObject);
- begin
- if MessageDlg('Are you sure you wish to unregister database "'+
- QDatabases.FieldByName('Caption').AsString +
- '"?', mtWarning, [mbYes, mbNo], 0) =
- mrYes then
- begin
- QTemp.SQL.Text:= 'update Databases set deleted = 1 where id = '+
- IntToStr(QDatabases.FieldByName('ID').AsInteger);
- QTemp.ExecSQL;
- QTemp.Close;
- RefreshDatabases;
- end;
- end;
- procedure TfrmMain.cmdDeleteServerClick(Sender: TObject);
- var
- IsUsed: Bool;
- begin
- QTemp.SQL.Text:= 'Select * from databases where serverid = '+
- IntToStr(QServers.FieldByName('ID').AsInteger);
- QTemp.SQL.Append('and deleted <> 1');
- QTemp.Open;
- if QTemp.IsEmpty then IsUsed:= False else IsUsed:= True;
- QTemp.Close;
- if not IsUsed then begin
- if MessageDlg('Are you sure you wish to remove SQL Server "'+
- QServers.FieldByName('Caption').AsString +
- '"?', mtWarning, [mbYes, mbNo], 0) =
- mrYes then
- begin
- QTemp.SQL.Text:= 'update SQLServers set deleted = 1 where id = '+
- IntToStr(QServers.FieldByName('ID').AsInteger);
- QTemp.ExecSQL;
- QTemp.Close;
- RefreshServers;
- RefreshDatabaseServers;
- end;
- end else begin
- ShowMessage('Cannot delete server because it is being used.');
- end;
- end;
- procedure TfrmMain.cmdNewServerClick(Sender: TObject);
- begin
- frmServer.EditState:= 'New';
- frmServer.ShowModal;
- RefreshServers;
- RefreshDatabaseServers;
- end;
- procedure TfrmMain.cmdEditServerClick(Sender: TObject);
- begin
- if GetPriv(CurrentUser, pvSQLServers) = 1 then begin
- frmServer.EditState:= 'Edit';
- frmServer.ServerID:= QServers.FieldByName('ID').AsInteger;
- frmServer.ShowModal;
- RefreshServers;
- RefreshDatabaseServers;
- end;
- end;
- procedure TfrmMain.cboCompStatusChange(Sender: TObject);
- begin
- RefreshComputers;
- end;
- procedure TfrmMain.cboSQLServerStatusClick(Sender: TObject);
- begin
- RefreshServers;
- end;
- procedure TfrmMain.cmdNewUpdateClick(Sender: TObject);
- var
- Q: TADOQuery;
- begin
- EditUpdate:= 0;
- EditUpdateState:= 'New';
- chkUpdateActive.Checked:= False;
- dtUpdateReleaseDate.DateTime:= Now;
- lblUpdateID.Caption:= 'New';
- lstUpdateFiles.RowCount:= 2;
- lstUpdateFiles.Rows[1].Clear;
- ClearUpdateFile;
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= Self.DB;
- Q.SQL.Text:= 'select * from updates where id = 0';
- Q.Open;
- Q.Append;
- Q['ReleaseDT']:= dtUpdateReleaseDate.DateTime;
- if chkUpdateActive.Checked then
- Q['Active']:= 1
- else
- Q['Active']:= 0;
- Q['UserID']:= Self.CurrentUser;
- Q['Priority']:= StrToIntDef(txtUpdatePriority.Text, 1);
- Q['UseFTP']:= 0;
- Q.Post;
- EditUpdate:= Q.FieldByName('ID').AsInteger;
- finally
- Q.Free;
- end;
- EnableUpdateEdit;
- cmdCancelUpdate.Enabled:= False;
- end;
- procedure TfrmMain.cmdNewUpdateFileClick(Sender: TObject);
- begin
- EditUpdateFile:= 0;
- EditUpdateFileState:= 'New';
- ClearUpdateFile;
- EnableUpdateFileEdit;
- end;
- procedure TfrmMain.cmdNewUserClick(Sender: TObject);
- begin
- frmUser.EditState:= 'New';
- frmUser.ShowModal;
- RefreshUsers;
- end;
- procedure TfrmMain.cmdEditUpdateClick(Sender: TObject);
- begin
- EditUpdate:= StrToIntDef(lstUpdates.Cells[0,lstUpdates.Row],0);
- if EditUpdate > 0 then begin
- EnableUpdateEdit;
- EditUpdateState:= 'Edit';
- end;
- end;
- procedure TfrmMain.cmdEditUpdateFileClick(Sender: TObject);
- begin
- EditUpdateFile:= StrToIntDef(lstUpdateFiles.Cells[0,lstUpdateFiles.Row],0);
- if EditUpdateFile > 0 then begin
- EnableUpdateFileEdit;
- EditUpdateFileState:= 'Edit';
- end;
- end;
- procedure TfrmMain.cmdEditUserClick(Sender: TObject);
- begin
- if GetPriv(CurrentUser, pvUsers) = 1 then begin
- frmUser.EditState:= 'Edit';
- frmUser.CurUser:= QUsers.FieldByName('ID').AsInteger;
- frmUser.ShowModal;
- RefreshUsers;
- end;
- end;
- procedure TfrmMain.cmdEditVariableClick(Sender: TObject);
- begin
- if cmdEditVariable.Caption = 'Edit' then begin
- if lstVariables.ItemIndex >= 0 then begin
- txtVariableName.Enabled:= True;
- txtVariableValue.Enabled:= True;
- lstVariables.Enabled:= False;
- cmdAddVariable.Caption:= 'Save';
- cmdEditVariable.Caption:= 'Cancel';
- cmdEditVariable.Enabled:= True;
- cmdDeleteVariable.Enabled:= False;
- VariableEditState:= 'Edit';
- end;
- end else if cmdEditVariable.Caption = 'Cancel' then begin
- lstVariables.Enabled:= True;
- txtVariableName.Enabled:= False;
- txtVariableValue.Enabled:= False;
- cmdAddVariable.Caption:= 'Add';
- cmdEditVariable.Caption:= 'Edit';
- cmdEditVariable.Enabled:= False;
- RefreshVariables;
- end;
- end;
- procedure TfrmMain.cboCompStatusClick(Sender: TObject);
- begin
- RefreshComputers;
- end;
- procedure TfrmMain.cmdRefreshLocationsClick(Sender: TObject);
- begin
- RefreshLocations;
- end;
- procedure TfrmMain.cmdRefreshComputersClick(Sender: TObject);
- begin
- RefreshComputers;
- end;
- procedure TfrmMain.cmdRefreshServersClick(Sender: TObject);
- begin
- RefreshServers;
- end;
- procedure TfrmMain.cmdRefreshServiceLogClick(Sender: TObject);
- begin
- if MessageDlg('This process may be extremely long. Continue?', mtWarning, [mbYes, mbNo], 0) = mrYes then
- Self.RefreshServiceLog;
- end;
- procedure TfrmMain.cmdRefreshDatabasesClick(Sender: TObject);
- begin
- RefreshDatabases;
- end;
- procedure TfrmMain.cmdRefreshUsersClick(Sender: TObject);
- begin
- RefreshUsers;
- end;
- procedure TfrmMain.cmdSaveUpdateClick(Sender: TObject);
- var
- Q: TADOQuery;
- begin
- try
- //Check Validity
- if StrToIntDef(txtUpdatePriority.Text, -1) < 0 then
- txtUpdatePriority.Text:= '1';
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= Self.DB;
- Q.SQL.Text:= 'select * from updates where id = '+IntToStr(EditUpdate);
- Q.Open;
- if Q.IsEmpty then Q.Append else Q.Edit;
- Q['ReleaseDT']:= dtUpdateReleaseDate.DateTime;
- if chkUpdateActive.Checked then
- Q['Active']:= 1
- else
- Q['Active']:= 0;
- Q['UserID']:= Self.CurrentUser;
- Q['Priority']:= StrToIntDef(txtUpdatePriority.Text, 1);
- Q['UseFTP']:= 0;
- Q.Post;
- Q.Close;
- finally
- Q.Free;
- end;
- RefreshUpdates;
- SelectUpdate(EditUpdate);
- DisableUpdateEdit;
- except
- on e: exception do begin
- ShowMessage('Cannot save update: '+E.Message);
- if assigned(Q) then Q.Free;
- end;
- end;
- end;
- procedure TfrmMain.cboUserOrderClick(Sender: TObject);
- begin
- RefreshUsers;
- end;
- procedure TfrmMain.chkEnableServiceClick(Sender: TObject);
- begin
- if chkEnableService.Checked then
- pService.Visible:= True
- else
- pService.Visible:= False;
- SaveServiceSettings;
- RefreshServiceSettings;
- end;
- procedure TfrmMain.chkServiceVerifyComputersClick(Sender: TObject);
- begin
- SaveServiceSettings;
- RefreshServiceSettings;
- end;
- procedure TfrmMain.chkServiceVerifyDatabasesClick(Sender: TObject);
- begin
- SaveServiceSettings;
- RefreshServiceSettings;
- end;
- procedure TfrmMain.chkServiceVerifyServersClick(Sender: TObject);
- begin
- SaveServiceSettings;
- RefreshServiceSettings;
- end;
- procedure TfrmMain.chkServiceVerifySourcesClick(Sender: TObject);
- begin
- SaveServiceSettings;
- RefreshServiceSettings;
- end;
- procedure TfrmMain.cmdDeleteUserClick(Sender: TObject);
- begin
- if MessageDlg('Are you sure you wish to delete user "'+
- QUsers.FieldByName('FName').AsString + ' ' +
- QUsers.FieldByName('LName').AsString + '"?', mtWarning, [mbYes, mbNo], 0)=
- mrYes then
- begin
- QTemp.SQL.Text:= 'update Users set deleted = 1 where id = '+
- IntToStr(QUsers.FieldByName('ID').AsInteger);
- QTemp.ExecSQL;
- QTemp.Close;
- RefreshUsers;
- end;
- end;
- procedure TfrmMain.FormShow(Sender: TObject);
- begin
- //Hide;
- if frmLogin.ModalResult = mrCancel then
- Close;
- SetPriv;
- end;
- procedure TfrmMain.cmdVerifyDBClick(Sender: TObject);
- var
- S: TServer;
- begin
- //Verify Selected Database
- S:= TServer(cboDatabaseServer.Items.Objects[
- cboDatabaseServer.ItemIndex]);
- ADOTest.ConnectionString:= BuildConnectionString(
- QDatabases.FieldByName('SQLName').AsString,
- QDatabases.FieldByName('DBName').AsString,
- QDatabases.FieldByName('Login').AsString,
- QDatabases.FieldByName('Pass').AsString,
- s.Provider, False);
- try
- ADOTest.Connected:= True;
- ADOTest.Connected:= False;
- except
- on e: exception do begin
- ShowMessage('Failed to connect to Database "'+
- QDatabases.FieldByName('SQLName').AsString + '\'+
- QDatabases.FieldByName('DBName').AsString + '"');
- exit;
- end;
- end;
- ShowMessage('Successfully connected to Database "'+
- QDatabases.FieldByName('SQLName').AsString + '\'+
- QDatabases.FieldByName('DBName').AsString + '"');
- end;
- procedure TfrmMain.cmdDeleteLocationClick(Sender: TObject);
- var
- IsUsed: Bool;
- begin
- if MessageDlg('Are you sure you wish to delete selected location '+ #10 +
- '"' + QLocations.FieldByName('Location').AsString + '"?', mtWarning, [mbYes, mbNo], 0)
- = mrYes then
- begin
- IsUsed:= False;
- QTemp.ConnectionString:= CurConnection;
- QTemp.SQL.Text:= 'Select id from computers where locationid = '+
- IntToStr(QLocations.FieldByName('ID').AsInteger);
- QTemp.SQL.Append('and deleted <> 1');
- QTemp.Open;
- if not QTemp.IsEmpty then IsUsed:= True;
- QTemp.Close;
- if IsUsed then
- MessageDlg('Cannot delete location because it is being used.',
- mtError, [mbOK], 0)
- else begin
- QTemp.SQL.Text:= 'update locations set deleted = 1 where id = '+
- IntToStr(QLocations.FieldByName('ID').AsInteger);
- QTemp.ExecSQL;
- QTemp.Close;
- end;
- RefreshLocations;
- RefreshComputerLocations;
- RefreshServerLocations;
- end;
- end;
- procedure TfrmMain.cmdUserPrivClick(Sender: TObject);
- begin
- if GetPriv(CurrentUser,pvUserPriv) <= 2 then begin
- frmUserPriv.CurUser:= QUsers.FieldByName('ID').AsInteger;
- frmUserPriv.ShowModal;
- end else begin
- ShowMessage('You do not have privileges to this feature.');
- end;
- end;
- procedure TfrmMain.SetPriv;
- begin
- case GetPriv(CurrentUser, pvLocations) of
- 1: begin
- TabLocations.Visible:= True; //All privileges for locations
- cmdDeleteLocation.Visible:= True;
- cmdEditLocation.Visible:= True;
- cmdNewLocation.Visible:= True;
- end;
- 2: begin
- TabLocations.Visible:= True; //View only privileges for locations
- cmdDeleteLocation.Visible:= False;
- cmdEditLocation.Visible:= False;
- cmdNewLocation.Visible:= False;
- end;
- 3: begin
- TabLocations.Visible:= False; //No privileges for locations
- end;
- end;
- if GetPriv(CurrentUser, pvComputers) = 3 then
- TabComputers.Visible:= False
- else if GetPriv(CurrentUser, pvComputers) = 2 then begin
- TabComputers.Visible:= True;
- cmdNewComputer.Visible:= False;
- cmdEditComputer.Visible:= False;
- cmdDeleteComputer.Visible:= False;
- end else if GetPriv(CurrentUser, pvComputers) = 1 then begin
- TabComputers.Visible:= True;
- cmdNewComputer.Visible:= True;
- cmdEditComputer.Visible:= True;
- cmdDeleteComputer.Visible:= True;
- end;
- if GetPriv(CurrentUser, pvSQLServers) = 3 then
- TabServers.Visible:= False else TabServers.Visible:= True;
- if GetPriv(CurrentUser, pvDatabases) = 3 then
- TabDatabases.Visible:= False else TabDatabases.Visible:= True;
- if GetPriv(CurrentUser, pvUsers) = 3 then
- TabUsers.Visible:= False else TabUsers.Visible:= True;
- if GetPriv(CurrentUser, pvUsers) = 2 then begin
- cmdEditUser.Visible:= False;
- cmdNewUser.Visible:= False;
- cmdDeleteUser.Visible:= False;
- end else begin
- cmdEditUser.Visible:= True;
- cmdNewUser.Visible:= True;
- cmdDeleteUser.Visible:= True;
- end;
- if GetPriv(CurrentUser, pvUserPriv) = 3 then
- cmdUserPriv.Visible:= False else cmdUserPriv.Visible:= True;
- end;
- procedure TfrmMain.PagesChange(Sender: TObject);
- begin
- case Pages.ActivePageIndex of
- 0: begin //Locations
- case GetPriv(CurrentUser, pvLocations) of
- 1: begin
- TabLocations.Visible:= True; //All privileges for locations
- cmdDeleteLocation.Visible:= True;
- cmdEditLocation.Visible:= True;
- cmdNewLocation.Visible:= True;
- RefreshLocations;
- end;
- 2: begin
- TabLocations.Visible:= True; //View only privileges for locations
- cmdDeleteLocation.Visible:= False;
- cmdEditLocation.Visible:= False;
- cmdNewLocation.Visible:= False;
- RefreshLocations;
- ShowMessage('You have view only privileges for locations');
- end;
- 3: begin
- TabLocations.Visible:= False; //No privileges for locations
- ShowMessage('You do not have privileges for locations');
- end;
- end;
- end;
- 1: begin //Computers
- case GetPriv(CurrentUser, pvComputers) of
- 1: begin
- TabComputers.Visible:= True;
- cmdNewComputer.Visible:= True;
- cmdEditComputer.Visible:= True;
- cmdDeleteComputer.Visible:= True;
- RefreshComputers;
- end;
- 2: begin
- TabComputers.Visible:= True;
- cmdNewComputer.Visible:= False;
- cmdEditComputer.Visible:= False;
- cmdDeleteComputer.Visible:= False;
- RefreshComputers;
- ShowMessage('You have view only privileges for computers');
- end;
- 3: begin
- TabComputers.Visible:= False;
- ShowMessage('You do not have privileges for computers');
- end;
- end;
- end;
- 2: begin //SQL Servers
- case GetPriv(CurrentUser, pvSQLServers) of
- 1: begin
- TabServers.Visible:= True;
- cmdNewServer.Visible:= True;
- cmdEditServer.Visible:= True;
- cmdDeleteServer.Visible:= True;
- cmdRefreshAvailServ.Visible:= True;
- lstAvailServ.Visible:= True;
- DBGrid3.Visible:= True;
- RefreshServers;
- end;
- 2: begin
- TabServers.Visible:= True;
- cmdNewServer.Visible:= False;
- cmdEditServer.Visible:= False;
- cmdDeleteServer.Visible:= False;
- cmdRefreshAvailServ.Visible:= True;
- lstAvailServ.Visible:= True;
- DBGrid3.Visible:= True;
- RefreshServers;
- ShowMessage('You have view only privileges for servers');
- end;
- 3: begin
- TabServers.Visible:= False;
- ShowMessage('You do not have privileges for servers');
- end;
- end;
- end;
- 3: begin //Databases
- case GetPriv(CurrentUser, pvDatabases) of
- 1: begin
- TabDatabases.Visible:= True;
- cmdNewDB.Visible:= True;
- cmdEditDB.Visible:= True;
- cmdRefreshDatabases.Visible:= True;
- cmdVerifyDB.Visible:= True;
- cmdRemoveDB.Visible:= True;
- cmdAddDB.Visible:= True;
- DBGrid6.Visible:= True;
- DBGrid4.Visible:= True;
- RefreshDatabases;
- end;
- 2: begin
- TabDatabases.Visible:= True;
- cmdNewDB.Visible:= False;
- cmdEditDB.Visible:= False;
- cmdRefreshDatabases.Visible:= True;
- cmdVerifyDB.Visible:= True;
- cmdRemoveDB.Visible:= False;
- cmdAddDB.Visible:= False;
- DBGrid6.Visible:= True;
- DBGrid4.Visible:= True;
- RefreshDatabases;
- ShowMessage('You have read only privileges for databases');
- end;
- 3: begin
- TabDatabases.Visible:= False;
- ShowMessage('You do not have privileges for databases');
- end;
- end;
- end;
- 4: begin //Users
- case GetPriv(CurrentUser, pvUsers) of
- 1: begin
- TabUsers.Visible:= True;
- cmdNewUser.Visible:= True;
- cmdEditUser.Visible:= True;
- cmdDeleteUser.Visible:= True;
- cmdRefreshUsers.Visible:= True;
- DBGrid5.Visible:= True;
- RefreshUsers;
- end;
- 2: begin
- TabUsers.Visible:= True;
- cmdNewUser.Visible:= False;
- cmdEditUser.Visible:= False;
- cmdDeleteUser.Visible:= False;
- cmdRefreshUsers.Visible:= True;
- DBGrid5.Visible:= True;
- RefreshUsers;
- ShowMessage('You have view only privileges for users');
- end;
- 3: begin
- TabUsers.Visible:= False;
- ShowMessage('You do not have privileges for users');
- end;
- end;
- end;
- 5: begin //Audit
- case GetPriv(CurrentUser, pvAudit) of
- 1: begin //Full Access
- TabAudit.Visible:= True;
- lstAudit.Visible:= True;
- RefreshAudit;
- end;
- 2: begin //View Only Access
- TabAudit.Visible:= True;
- lstAudit.Visible:= True;
- RefreshAudit;
- ShowMessage('You have view only privileges for audit');
- end;
- 3: begin //No Access
- TabAudit.Visible:= False;
- lstAudit.Visible:= False;
- ShowMessage('You do not have privileges for audit');
- end;
- end;
- end;
- 6: begin //Tools
- end;
- 7: begin //Settings
- end;
- 8: begin //Updates
- RefreshUpdates;
- end;
- end;
- SetPriv;
- end;
- procedure TfrmMain.RefreshComputerLocations;
- var
- X: Integer;
- objLoc: TLocation;
- SetLoc: Integer;
- begin
- if cboComputerLocation.Items.Count > 0 then begin
- objLoc:= TLocation(cboComputerLocation.Items.Objects[cboComputerLocation.ItemIndex]);
- SetLoc:= objLoc.ID;
- end;
- for X:= 0 to cboComputerLocation.Items.Count - 1 do
- cboComputerLocation.Items.Objects[X].Free;
- cboComputerLocation.Clear;
- objLoc:= TLocation.Create;
- objLoc.ID:= -1;
- objLoc.Caption:= 'All Locations';
- cboComputerLocation.Items.AddObject('All Locations', objLoc);
- QTemp.SQL.Text:= 'Select * from Locations where deleted <> 1';
- QTemp.Open;
- QTemp.First;
- While Not QTemp.Eof do begin
- objLoc:= TLocation.Create;
- objLoc.ID:= QTemp.FieldByName('ID').AsInteger;
- objLoc.Caption:= QTemp.FieldByName('Caption').AsString;
- objLoc.Server:= QTemp.FieldByName('PrimaryServerID').AsInteger;
- objLoc.Description:= QTemp.FieldByName('Description').AsString;
- cboComputerLocation.Items.AddObject(objLoc.Caption, objLoc);
- QTemp.Next;
- end;
- QTemp.Close;
- cboComputerLocation.ItemIndex:= 0;
- for X:= 0 to cboComputerLocation.Items.Count - 1 do begin
- objLoc:= TLocation(cboComputerLocation.Items.Objects[X]);
- if objLoc.ID = SetLoc then cboComputerLocation.ItemIndex:= X;
- end;
- end;
- procedure TfrmMain.RefreshServerLocations;
- var
- X: Integer;
- objLoc: TLocation;
- SetLoc: Integer;
- begin
- if cboServerLocation.Items.Count > 0 then begin
- objLoc:= TLocation(cboServerLocation.Items.Objects[cboServerLocation.ItemIndex]);
- SetLoc:= objLoc.ID;
- end;
- for X:= 0 to cboServerLocation.Items.Count - 1 do
- cboServerLocation.Items.Objects[X].Free;
- cboServerLocation.Clear;
- objLoc:= TLocation.Create;
- objLoc.ID:= -1;
- cboServerLocation.Items.AddObject('All Locations', objLoc);
- QTemp.SQL.Text:= 'Select * from Locations where deleted <> 1';
- QTemp.Open;
- QTemp.First;
- While Not QTemp.Eof do begin
- objLoc:= TLocation.Create;
- objLoc.ID:= QTemp.FieldByName('ID').AsInteger;
- objLoc.Caption:= QTemp.FieldByName('Caption').AsString;
- objLoc.Server:= QTemp.FieldByName('PrimaryServerID').AsInteger;
- objLoc.Description:= QTemp.FieldByName('Description').AsString;
- cboServerLocation.Items.AddObject(objLoc.Caption, objLoc);
- QTemp.Next;
- end;
- QTemp.Close;
- cboServerLocation.ItemIndex:= 0;
- for X:= 0 to cboServerLocation.Items.Count - 1 do begin
- objLoc:= TLocation(cboServerLocation.Items.Objects[X]);
- if objLoc.ID = SetLoc then cboServerLocation.ItemIndex:= X;
- end;
- //RefreshServers;
- end;
- procedure TfrmMain.RefreshDatabaseServers;
- var
- X: Integer;
- S: TServer;
- SetSvr: Integer;
- begin
- if cboDatabaseServer.Items.Count > 0 then begin
- S:= TServer(cboDatabaseServer.Items.Objects[cboDatabaseServer.ItemIndex]);
- SetSvr:= S.ID;
- end;
- for X:= 0 to cboDatabaseServer.Items.Count - 1 do
- cboDatabaseServer.Items.Objects[X].Free;
- cboDatabaseServer.Clear;
- S:= TServer.Create;
- S.ID:= -1;
- S.Caption:= '(All Servers)';
- cboDatabaseServer.Items.AddObject(S.Caption, S);
- QTemp.SQL.Text:= 'Select * from SQLServers where deleted <> 1';
- QTemp.Open;
- QTemp.First;
- While Not QTemp.Eof do begin
- S:= TServer.Create;
- S.ID:= QTemp.FieldByName('ID').AsInteger;
- S.Caption:= QTemp.FieldByName('Caption').AsString;
- S.Description:= QTemp.FieldByName('Description').AsString;
- S.CompID:= QTemp.FieldByName('CompID').AsInteger;
- S.SQLName:= QTemp.FieldByName('SQLName').AsString;
- S.Login:= QTemp.FieldByName('Login').AsString;
- S.Pass:= QTemp.FieldByName('Pass').AsString;
- S.Provider:= QTemp.FieldByName('Provider').AsString;
- cboDatabaseServer.Items.AddObject(S.Caption, S);
- QTemp.Next;
- end;
- QTemp.Close;
- cboDatabaseServer.ItemIndex:= 0;
- for X:= 0 to cboDatabaseServer.Items.Count - 1 do begin
- S:= TServer(cboDatabaseServer.Items.Objects[X]);
- if S.ID = SetSvr then cboDatabaseServer.ItemIndex:= X;
- end;
- end;
- procedure TfrmMain.lstToolMenuDblClick(Sender: TObject);
- var
- fUpdate: TfrmUpdate;
- P: String;
- R: TRegistry;
- T: TTool;
- begin
- R:= TRegistry.Create;
- try
- R.RootKey:= HKEY_LOCAL_MACHINE;
- R.Access:= KEY_WRITE;
- R.OpenKey('Software\7Lands\Rugm\Setup', False);
- if not R.ValueExists('AppPath') then
- R.WriteString('AppPath', 'C:\RugManagerPro');
- P:= R.ReadString('AppPath');
- R.CloseKey;
- finally
- R.Free;
- end;
- if lstToolMenu.ItemIndex > -1 then begin
- T:= TTool(lstToolMenu.Items.Objects[lstToolMenu.ItemIndex]);
- if T.Target = 'T_UPDATE' then begin
- //RMPro Update
- if GetPriv(CurrentUser, pvLoginUpdate) = 1 then begin
- fUpdate:= TfrmUpdate.Create(self);
- try
- fUpdate.ShowModal;
- finally
- fUpdate.Free;
- end;
- end else begin
- ShowMessage('You are not allowed to access RMPro Update.');
- end;
- end else begin
- //Regular Exe
- if FileExists(T.Target) then
- shellExecute(Handle,'open',PChar(T.Target),
- nil,nil,SW_SHOWNORMAL)
- else
- ShowMessage('Could not find '+ T.Caption + '.');
- end;
- end;
- end;
- procedure TfrmMain.lstUpdateFilesClick(Sender: TObject);
- begin
- ClearUpdateFile;
- EditUpdateFile:= StrToIntDef(lstUpdateFiles.Cells[0,lstUpdateFiles.Row], 0);
- RefreshUpdateFile(EditUpdateFile);
- end;
- procedure TfrmMain.lstUpdatesClick(Sender: TObject);
- begin
- EditUpdate:= StrToIntDef(lstUpdates.Cells[0,lstUpdates.Row], 0);
- RefreshUpdate(EditUpdate);
- end;
- procedure TfrmMain.lstVariablesClick(Sender: TObject);
- var
- V: TValue;
- begin
- if lstVariables.Items.Count > 0 then begin
- if lstVariables.ItemIndex >= 0 then begin
- cmdAddVariable.Enabled:= True;
- cmdEditVariable.Enabled:= True;
- cmdDeleteVariable.Enabled:= True;
- V:= TValue(lstVariables.Items.Objects[lstVariables.ItemIndex]);
- txtVariableName.Text:= V.Caption;
- txtVariableValue.Text:= V.Abbr;
- end else begin
- cmdAddVariable.Enabled:= True;
- cmdEditVariable.Enabled:= False;
- cmdDeleteVariable.Enabled:= False;
- end;
- end else begin
- cmdAddVariable.Enabled:= True;
- cmdEditVariable.Enabled:= False;
- cmdDeleteVariable.Enabled:= False;
- end;
- end;
- procedure TfrmMain.cmdCompRemoteClick(Sender: TObject);
- begin
- if GetPriv(CurrentUser, pvLoginRemote) = 1 then begin
- if not QComputers.IsEmpty then begin
- frmAction:= TfrmAction.Create(self);
- frmRemDesk:= TfrmRemDesk.Create(self);
- frmOptions:= TfrmOptions.Create(self);
- frmAbout:= TfrmAbout.Create(self);
- frmRemote:= TfrmRemote.Create(self);
- frmRemote.CurServer:= QComputers.FieldByName('IP').AsString;
- frmRemote.ShowModal;
- frmRemote.Free;
- frmAction.Free;
- frmRemDesk.Free;
- frmOptions.Free;
- frmAbout.Free;
- end;
- end else begin
- ShowMessage('You are now allowed to view computers remotely.');
- end;
- end;
- procedure TfrmMain.cmdVerifyServerClick(Sender: TObject);
- var
- C: TConn;
- begin
- if not QServers.IsEmpty then begin
- C:= TConn.Create;
- try
- C.Server:= QServers.FieldByName('SQLName').AsString;
- C.Database:= 'Master';
- C.Login:= QServers.FieldByName('Login').AsString;
- C.Password:= QServers.FieldByName('Pass').AsString;
- C.Provider:= QServers.FieldByName('Provider').AsString;
- ADOTest.ConnectionString:= BuildConnectionString(C);
- try
- ADOTest.Connected:= True;
- ADOTest.Connected:= False;
- except
- on e: exception do begin
- ShowMessage('Failed to connect to Server '+C.Server);
- exit;
- end;
- end;
- ShowMessage('Successfully connected to Server '+C.Server);
- finally
- C.Free;
- end;
- end;
- end;
- procedure TfrmMain.RefreshTools;
- var
- T: TTool;
- X: Integer;
- DoAdd: Bool;
- begin
- for X:= 0 to lstToolMenu.Items.Count - 1 do
- lstToolMenu.Items.Objects[X].Free;
- lstToolMenu.Clear;
- QTemp.SQL.Text:= 'Select * from Tools where Active = 16 '+
- ' and CompID = '+ IntToStr(CurCompID) + ' and deleted <> 1 order by sort';
- QTemp.Open;
- QTemp.First;
- While Not QTemp.Eof do begin
- DoAdd:= True;
- if QTemp.FieldByName('Target').AsString <> 'T_UPDATE' then begin
- if not FileExists(QTemp.FieldByName('Target').AsString) then
- DoAdd:= False;
- end;
- //DoAdd:= True; //TEMP
- if DoAdd then begin
- T:= TTool.Create;
- T.ID:= QTemp.FieldByName('ID').AsInteger;
- T.Caption:= QTemp.FieldByName('Caption').AsString;
- T.Target:= QTemp.FieldByName('Target').AsString;
- lstToolMenu.Items.AddObject(T.Caption, T);
- end;
- QTemp.Next;
- end;
- QTemp.Close;
- end;
- procedure TfrmMain.cmdPermissionsClick(Sender: TObject);
- var
- F: TfrmPermissions;
- begin
- F:= TfrmPermissions.Create(Self);
- try
- F.ADOConnection:= DB;
- F.RefreshPermissions(DB);
- F.ShowModal;
- finally
- F.Free;
- end;
- end;
- procedure TfrmMain.cmdSaveUpdateFileClick(Sender: TObject);
- var
- Q: TADOQuery;
- begin
- try
- //Check Validity
- if StrToIntDef(txtUpdateFilePriority.Text, -1) < 0 then
- txtUpdateFilePriority.Text:= '1';
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= Self.DB;
- Q.SQL.Text:= 'select * from updatefiles where id = '+IntToStr(EditUpdateFile);
- Q.Open;
- if Q.IsEmpty then Q.Append else Q.Edit;
- if chkUpdateFileActive.Checked then
- Q['Active']:= 1
- else
- Q['Active']:= 0;
- Q['Caption']:= txtUpdateFileCaption.Text;
- Q['SourcePath']:= txtUpdateFileSourcePath.Text;
- Q['DestPath']:= txtUpdateFileDestPath.Text;
- Q['Filename']:= txtUpdateFileFilename.Text;
- Q['Priority']:= StrToIntDef(txtUpdateFilePriority.Text, 1);
- Q.Post;
- Q.Close;
- finally
- Q.Free;
- end;
- RefreshUpdateFiles(EditUpdate);
- SelectUpdateFile(EditUpdateFile);
- except
- on e: exception do begin
- ShowMessage('Cannot save update file: '+E.Message);
- if assigned(Q) then Q.Free;
- end;
- end;
- end;
- procedure TfrmMain.cmdCancelUpdateFileClick(Sender: TObject);
- begin
- DisableUpdateFileEdit;
- SelectUpdateFile(EditUpdateFile);
- lstUpdateFilesClick(Sender);
- end;
- procedure TfrmMain.Button1Click(Sender: TObject); {
- var
- L, R: TStringList;
- T: TTool;
- X, Y: Integer; }
- begin {
- L:= TStringList.Create;
- R:= TStringList.Create;
- QTemp.SQL.Text:= 'Select ID from computers';
- QTemp.Open;
- QTemp.First;
- while not QTemp.Eof do begin
- L.Append(IntToStr(QTemp.FieldByName('ID').AsInteger));
- QTemp.Next;
- end;
- QTemp.Close;
- QTemp.SQL.Text:= 'Select * from tools where compid = 13 order by sort';
- QTemp.Open;
- QTemp.First;
- while not QTemp.Eof do begin
- T:= TTool.Create;
- T.ID:= QTemp.FieldByName('ID').AsInteger;
- T.Caption:= QTemp.FieldByName('Caption').AsString;
- T.Target:= QTemp.FieldByName('Target').AsString;
- T.Sort:= QTemp.FieldByName('Sort').AsInteger;
- R.AddObject(T.Caption, T);
- QTemp.Next;
- end;
- QTemp.Close;
- for X:= 0 to L.Count - 1 do begin
- for Y:= 0 to R.Count - 1 do begin
- T:= TTool(R.Objects[Y]);
- QTemp.SQL.Text:= 'Select * from Tools';
- QTemp.Open;
- QTemp.Insert;
- QTemp['Caption']:= T.Caption;
- QTemp['Target']:= T.Target;
- QTemp['Sort']:= T.Sort;
- QTemp['Active']:= 16;
- QTemp['CompID']:= StrToInt(L[X]);
- QTemp.Post;
- QTemp.Close;
- end;
- end; }
- end;
- procedure TfrmMain.cmdDeleteToolClick(Sender: TObject);
- var
- T: TTool;
- begin
- if lstToolMenu.ItemIndex > -1 then begin
- if MessageDlg('Are you sure you wish to delete the selected tool '+
- '"' + lstToolMenu.Items[lstToolMenu.ItemIndex] + '"?', mtWarning,
- [mbYes, mbNo], 0) = mrYes then
- begin
- T:= TTool(lstToolMenu.Items.Objects[lstToolMenu.ItemIndex]);
- QTemp.SQL.Text:= 'update tools set deleted = 1 where id = '+ IntToStr(T.ID);
- QTemp.ExecSQL;
- if QTemp.Active then QTemp.Close;
- end;
- end;
- RefreshTools;
- end;
- procedure TfrmMain.cmdNewToolClick(Sender: TObject);
- begin
- frmTool.EditState:= 'New';
- frmTool.ShowModal;
- RefreshTools;
- end;
- procedure TfrmMain.cmdEditToolClick(Sender: TObject);
- var
- T: TTool;
- begin
- T:= TTool(lstToolMenu.Items.Objects[lstToolMenu.ItemIndex]);
- frmTool.EditState:= 'Edit';
- frmTool.ToolID:= T.ID;
- frmTool.ShowModal;
- RefreshTools;
- end;
- procedure TfrmMain.cmdOpenToolClick(Sender: TObject);
- begin
- lstToolMenuDblClick(self);
- end;
- procedure TfrmMain.SaveAudit
- (TableName: String; RecordID: Integer; State: String);
- var
- QAudit: TADOQuery;
- QLog: TADOQuery;
- QTemp: TADOQuery;
- begin
- QAudit:= TADOQuery.Create(self);
- QLog:= TADOQuery.Create(self);
- QTemp:= TADOQuery.Create(self);
- QAudit.ConnectionString:= BuildConnectionString(CurrentConnection);
- QLog.ConnectionString:= BuildConnectionString(CurrentConnection);
- QTemp.ConnectionString:= BuildConnectionString(CurrentConnection);
- QAudit.SQL.Text:= 'Select * from '+ TableName + '_Audit';
- QAudit.Open;
- QAudit.Insert;
- if State = 'A' then begin
- QLog.SQL.Text:= 'select id from audit_log';
- QLog.SQL.Append('where sessionid = '+ IntToStr(SessionID));
- QLog.SQL.Append('order by id desc');
- QLog.Open;
- QLog.First;
- QAudit['LogID']:= QLog.FieldByName('ID').AsInteger;
- QLog.Close;
- end else begin
- QLog.SQL.Text:= 'select * from audit_log';
- QLog.Open;
- QLog.Insert;
- QLog['RecordID']:= RecordID;
- QLog['LogDT']:= Now;
- //QLog['UserID']:= CurrentUser;
- QLog['SessionID']:= SessionID;
- QLog['TableName']:= TableName;
- if State = 'D' then
- QLog['Action']:= 'Deleted';
- if State = 'I' then
- QLog['Action']:= 'Inserted';
- if State = 'B' then
- QLog['Action']:= 'Modified';
- QLog.Post;
- QLog.Close;
- QLog.SQL.Text:= 'select id from audit_log order by id desc';
- QLog.Open;
- QLog.First;
- QAudit['LogID']:= QLog.FieldByName('ID').AsInteger;
- QLog.Close;
- end;
- QAudit['LogState']:= State;
- QAudit['Deleted']:= 0;
- QTemp.SQL.Text:= 'select * from '+ TableName + ' where ID = '+
- IntToStr(RecordID);
- QTemp.Open;
- QTemp.First;
- if TableName = 'Computers' then begin
- QAudit['CompName']:= QTemp.FieldByName('CompName').AsString;
- QAudit['Caption']:= QTemp.FieldByName('Caption').AsString;
- QAudit['Description']:= QTemp.FieldByName('Description').AsString;
- QAudit['LocationID']:= QTemp.FieldByName('LocationID').AsInteger;
- QAudit['IPAddress']:= QTemp.FieldByName('IPAddress').AsString;
- QAudit['Active']:= QTemp.FieldByName('Active').AsString;
- QAudit['RMPNum']:= QTemp.FieldByName('RMPNum').AsString;
- end;
- if TableName = 'Databases' then begin
- QAudit['ServerID']:= QTemp.FieldByName('ServerID').AsInteger;
- QAudit['DBName']:= QTemp.FieldByName('DBName').AsString;
- QAudit['Login']:= QTemp.FieldByName('Login').AsString;
- QAudit['Pass']:= QTemp.FieldByName('Pass').AsString;
- QAudit['DBType']:= QTemp.FieldByName('DBType').AsInteger;
- QAudit['Active']:= QTemp.FieldByName('Active').AsInteger;
- QAudit['Caption']:= QTemp.FieldByName('Caption').AsString;
- QAudit['Description']:= QTemp.FieldByName('Description').AsString;
- QAudit['InSwitch']:= QTemp.FieldByName('InSwitch').AsInteger;
- end;
- if TableName = 'Locations' then begin
- QAudit['Caption']:= QTemp.FieldByName('Caption').AsString;
- QAudit['Description']:= QTemp.FieldByName('Description').AsString;
- QAudit['PrimaryServerID']:= QTemp.FieldByName('PrimaryServerID').AsInteger;
- QAudit['Active']:= QTemp.FieldByName('Active').AsString;
- QAudit['Address1']:= QTemp.FieldByName('Address1').AsString;
- QAudit['Address2']:= QTemp.FieldByName('Address2').AsString;
- QAudit['City']:= QTemp.FieldByName('City').AsString;
- QAudit['State']:= QTemp.FieldByName('State').AsString;
- QAudit['Zip']:= QTemp.FieldByName('Zip').AsString;
- QAudit['Country']:= QTemp.FieldByName('Country').AsString;
- end;
- if TableName = 'Notes' then begin
- end;
- if TableName = 'PrivSet' then begin
- end;
- if TableName = 'SQLLogins' then begin
- //QAudit['']:= QTemp.FieldByName('')
- end;
- if TableName = 'SQLServers' then begin
- QAudit['Caption']:= QTemp.FieldByName('Caption').AsString;
- QAudit['Description']:= QTemp.FieldByName('Description').AsString;
- QAudit['CompID']:= QTemp.FieldByName('CompID').AsInteger;
- QAudit['SQLName']:= QTemp.FieldByName('SQLName').AsString;
- QAudit['Login']:= QTemp.FieldByName('Login').AsString;
- QAudit['Pass']:= QTemp.FieldByName('Pass').AsString;
- QAudit['Active']:= QTemp.FieldByName('Active').AsString;
- QAudit['Provider']:= QTemp.FieldByName('Provider').AsString;
- QAudit['VersionID']:= QTemp.FieldByName('VersionID').AsInteger;
- QAudit['ProviderID']:= QTemp.FieldByName('ProviderID').AsInteger;
- end;
- if TableName = 'Users' then begin
- end;
- QTemp.Close;
- QAudit.Post;
- QAudit.Close;
- QAudit.Free;
- QLog.Free;
- QTemp.Free;
- end;
- procedure TfrmMain.Panel1Resize(Sender: TObject);
- begin
- DBGrid4.Columns[0].Width:= DBGrid4.Width - 30;
- end;
- procedure TfrmMain.Panel4Resize(Sender: TObject);
- begin
- lstAvailServ.ColWidths[0]:= lstAvailServ.Width - 30;
- end;
- procedure TfrmMain.Panel2Resize(Sender: TObject);
- begin
- cmdAvailDB.Top:= Round((Panel2.Height / 2) - (cmdAvailDB.Height / 2));
- end;
- procedure TfrmMain.Panel3Resize(Sender: TObject);
- begin
- cmdAvailServ.Top:= Round((Panel3.Height / 2) - (cmdAvailServ.Height / 2));
- end;
- procedure TfrmMain.cmdAvailDBClick(Sender: TObject);
- begin
- if Panel1.Visible = True then begin
- Panel1.Visible:= False;
- cmdAvailDB.Caption:= '>';
- end else begin
- Panel1.Visible:= True;
- cmdAvailDB.Caption:= '<';
- end;
- end;
- procedure TfrmMain.cmdAvailServClick(Sender: TObject);
- begin
- if Panel4.Visible = True then begin
- Panel4.Visible:= False;
- cmdAvailServ.Caption:= '>';
- end else begin
- Panel4.Visible:= True;
- cmdAvailServ.Caption:= '<';
- end;
- end;
- procedure TfrmMain.ListAvailableSQLServers(Names : TStrings);
- var
- RSCon: ADORecordsetConstruction;
- Rowset: IRowset;
- SourcesRowset: ISourcesRowset;
- SourcesRecordset: _Recordset;
- SourcesName, SourcesType: TField;
- function PtCreateADOObject(const ClassID: TGUID): IUnknown;
- var
- Status: HResult;
- FPUControlWord: Word;
- begin
- asm
- FNSTCW FPUControlWord
- end;
- Status := CoCreateInstance(
- CLASS_Recordset,
- nil,
- CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,
- IUnknown,
- Result);
- asm
- FNCLEX
- FLDCW FPUControlWord
- end;
- OleCheck(Status);
- end;
- begin
- SourcesRecordset := PtCreateADOObject(CLASS_Recordset) as _Recordset;
- RSCon := SourcesRecordset as ADORecordsetConstruction;
- SourcesRowset := CreateComObject(ProgIDToClassID('SQLOLEDB Enumerator')) as ISourcesRowset;
- OleCheck(SourcesRowset.GetSourcesRowset(nil, IRowset, 0, nil, IUnknown(Rowset)));
- RSCon.Rowset := RowSet;
- with TADODataSet.Create(nil) do
- try
- Recordset := SourcesRecordset;
- SourcesName := FieldByName('SOURCES_NAME'); { do not localize }
- SourcesType := FieldByName('SOURCES_TYPE'); { do not localize }
- Names.BeginUpdate;
- try
- while not EOF do
- begin
- if (SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE) and (SourcesName.AsString <> '') then
- Names.Add(SourcesName.AsString);
- Next;
- end;
- finally
- Names.EndUpdate;
- end;
- finally
- Free;
- end;
- end;
- procedure TfrmMain.cmdRefreshAvailServClick(Sender: TObject);
- begin
- GetServerList;
- end;
- //Identifies available servers not registered in database
- //Lists unregistered servers in lstAvailServ in SQL Servers tab
- procedure TfrmMain.GetServerList;
- var
- X, Y: Integer;
- AT: TADOQuery;
- Exists: Bool;
- C: Integer;
- L: TStringList;
- begin
- C:= 0;
- AT:= TADOQuery.Create(self);
- L:= TStringList.Create;
- try
- AT.Connection:= DB;
- AT.SQL.Text:= 'select SQLName from sqlservers where deleted <> 1';
- AT.Open;
- lstAvailServ.RowCount:= 2;
- lstAvailServ.Rows[1].Clear;
- ListAvailableSQLServers(L);
- for X:= 0 to L.Count - 1 do begin
- Exists:= False;
- AT.First;
- While not AT.Eof do begin
- if UpperCase(L[X]) =
- UpperCase(AT.FieldByName('SQLName').AsString)
- then Exists:= True;
- AT.Next;
- end;
- if Exists = False then begin
- if C > 0 then
- lstAvailServ.RowCount:= lstAvailServ.RowCount + 1;
- lstAvailServ.Cells[0,C+1]:= L[X];
- C:= C + 1;
- end;
- end;
- AT.Close;
- finally
- if assigned(AT) then AT.Free;
- if assigned(L) then L.Free;
- end;
- end;
- procedure TfrmMain.RefreshAudit;
- var
- F: TGridFieldList;
- X, R, RID: Integer;
- T: String;
- begin
- QTemp.SQL.Text:= 'select L.ID, L.LogDT, L.TableName, L.Action, U.NName, L.RecordID';
- QTemp.SQL.Append('from Audit_Log L');
- QTemp.SQL.Append('join LoginHist H on H.id = l.sessionid');
- QTemp.SQL.Append('join users u on u.id = h.UserID');
- QTemp.SQL.Append('where (RolledBack is null or RolledBack = '''') ');
- if cboAuditTable.ItemIndex > 0 then begin
- case cboAuditTable.ItemIndex of
- 1: QTemp.SQL.Append('and L.TableName = ''Computers''');
- 2: QTemp.SQL.Append('and L.TableName = ''Databases''');
- 3: QTemp.SQL.Append('and L.TableName = ''Locations''');
- 4: QTemp.SQL.Append('and L.TableName = ''Notes''');
- 5: QTemp.SQL.Append('and L.TableName = ''SQLLogins''');
- 6: QTemp.SQL.Append('and L.TableName = ''SQLServers''');
- 7: QTemp.SQL.Append('and L.TableName = ''Tools''');
- 8: QTemp.SQL.Append('and L.TableName = ''Users''');
- end;
- end;
- if cboAuditType.ItemIndex > 0 then begin
- case cboAuditType.ItemIndex of
- 1: QTemp.SQL.Append('and L.Action = ''Inserted''');
- 2: QTemp.SQL.Append('and L.Action = ''Modified''');
- 3: QTemp.SQL.Append('and L.Action = ''Deleted''');
- end;
- end;
- QTemp.Open;
- F:= TGridFieldList.Create;
- F.AddField('ID', 'ID', '', ffText, 0 ); //0
- F.AddField('RecordID', 'Record ID', '', ffText, 0 ); //1
- F.AddField('LogDT', 'Log Time', '', ffDateTime, 120 ); //2
- F.AddField('NName', 'User', '', ffText, 100 ); //3
- F.AddField('Action', 'Action', '', ffText, 65 ); //4
- F.AddField('TableName', 'Changed', '', ffText, 100 ); //5
- //Added Column //6
- QueryToStringGrid(QTemp, F, lstAudit, True);
- F.Free;
- QTemp.Close;
- lstAudit.ColCount:= 7;
- lstAudit.ColWidths[lstAudit.ColCount - 1]:= 200;
- lstAudit.Cells[lstAudit.ColCount - 1, 0]:= 'Record';
- for X:= 1 to lstAudit.RowCount do begin
- R:= StrToIntDef(lstAudit.Cells[0,X], -1);
- T:= lstAudit.Cells[5,X];
- RID:= StrToIntDef(lstAudit.Cells[1,X], -1);
- if (RID > 0) and (T <> '') then begin
- QTemp.SQL.Text:= 'select Caption from '+T+'_Audit where LogID = '+IntToStr(R);
- QTemp.SQL.Append('and LogState <> ''B''');
- QTemp.Open;
- lstAudit.Cells[6,X]:= QTemp.FieldByName('Caption').AsString;
- QTemp.Close;
- end;
- end;
- end;
- procedure TfrmMain.cmdRefreshAuditClick(Sender: TObject);
- begin
- RefreshAudit;
- end;
- procedure TfrmMain.cmdViewAuditClick(Sender: TObject);
- var
- AD: TfrmAuditDetail;
- begin
- AD:= TfrmAuditDetail.Create(self);
- AD.AuditID:= StrToIntDef(lstAudit.Cells[0,lstAudit.Row], -1);
- if AD.AuditID > 0 then begin
- AD.Clear;
- AD.RefreshDetail;
- AD.ShowModal;
- RefreshAudit;
- end;
- AD.Free;
- end;
- procedure TfrmMain.cboAuditTableClick(Sender: TObject);
- begin
- RefreshAudit;
- end;
- procedure TfrmMain.cboAuditTypeClick(Sender: TObject);
- begin
- RefreshAudit;
- end;
- function PromptIP(IPAddress: TIPAddress): TIPAddress;
- var
- F: TfrmEditIP;
- begin
- F:= TfrmEditIP.Create(frmMain);
- Result:= TIPAddress(IPAddress);
- F.ShowModal;
- if F.ModalResult = mrOK then begin
- Result:= F.IP;
- end else begin
- Result:= TIPAddress(IPAddress);
- end;
- F.Free;
- end;
- procedure TfrmMain.RefreshVariables;
- var
- Q: TADOQuery;
- X: Integer;
- V: TValue;
- begin
- for X := 0 to lstVariables.Items.Count - 1 do
- lstVariables.Items.Objects[X].Free;
- lstVariables.Clear;
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= DB;
- Q.SQL.Text:= 'select * from variables order by name';
- Q.Open;
- if not Q.IsEmpty then begin
- Q.First;
- while not Q.Eof do begin
- V:= TValue.Create;
- V.ID:= Q.FieldByName('ID').AsInteger;
- V.Caption:= Q.FieldByName('Name').AsString;
- V.Abbr:= Q.FieldByName('Value').AsString;
- V.Flt:= Q.FieldByName('Category').AsInteger;
- lstVariables.Items.AddObject(V.Caption+': '+V.Abbr, V);
- Q.Next;
- end;
- end;
- Q.Close;
- finally
- if Q.Active then Q.Close;
- Q.Free;
- end;
- txtVariableName.Enabled:= False;
- txtVariableValue.Enabled:= False;
- cmdAddVariable.Caption:= 'Add';
- cmdEditVariable.Caption:= 'Edit';
- cmdAddVariable.Enabled:= True;
- if lstVariables.Items.Count > 0 then begin
- cmdEditVariable.Enabled:= True;
- cmdDeleteVariable.Enabled:= True;
- end else begin
- cmdEditVariable.Enabled:= False;
- cmdDeleteVariable.Enabled:= False;
- end;
- end;
- procedure TfrmMain.RefreshServiceLog;
- var
- Q: TADOQuery;
- begin
- txtServiceLog.Clear;
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= DB;
- Q.SQL.Text:= 'select * from servicelog where deleted <> 1 order by dt desc';
- Q.Open;
- if not Q.IsEmpty then begin
- Q.First;
- while not Q.Eof do begin
- txtServiceLog.Lines.Append(FormatDateTime('m/d/yy h:n:s.zzz ampm',Q.FieldByName('DT').AsDateTime)+' - '+
- Q.FieldByName('CompName').AsString+' - '+Q.FieldByName('Category').AsString+' : ');
- txtServiceLog.Lines.Append(' '+Q.FieldByName('Description').AsString);
- txtServiceLog.SelStart:= Length(txtServiceLog.Text) - 1;
- txtServiceLog.SelLength:= 1;
- txtServiceLog.SelStart:= Length(txtServiceLog.Text);
- Q.Next;
- end;
- end;
- Q.Close;
- finally
- Q.Free;
- end;
- end;
- procedure TfrmMain.RefreshServiceSettings;
- var
- Q: TADOQuery;
- X: Integer;
- begin
- txtServiceLog.Clear;
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= DB;
- Q.SQL.Text:= 'select * from settings where setting in '+
- '(''DoRunService'',''DoCheckSources'',''DoCheckDatabases'',''DoCheckServers'',''DoCheckComputers'')';
- Q.Open;
- Q.First;
- while not Q.Eof do begin
- if Q.FieldByName('Setting').AsString = 'DoRunService' then begin
- if Q.FieldByName('Value').AsString = 'Y' then
- chkEnableService.Checked:= True
- else
- chkEnableService.Checked:= False;
- end;
- if Q.FieldByName('Setting').AsString = 'DoCheckSources' then begin
- if Q.FieldByName('Value').AsString = 'Y' then
- chkServiceVerifySources.Checked:= True
- else
- chkServiceVerifySources.Checked:= False;
- end;
- if Q.FieldByName('Setting').AsString = 'DoCheckDatabases' then begin
- if Q.FieldByName('Value').AsString = 'Y' then
- chkServiceVerifyDatabases.Checked:= True
- else
- chkServiceVerifyDatabases.Checked:= False;
- end;
- if Q.FieldByName('Setting').AsString = 'DoCheckServers' then begin
- if Q.FieldByName('Value').AsString = 'Y' then
- chkServiceVerifyServers.Checked:= True
- else
- chkServiceVerifyServers.Checked:= False;
- end;
- if Q.FieldByName('Setting').AsString = 'DoCheckComputers' then begin
- if Q.FieldByName('Value').AsString = 'Y' then
- chkServiceVerifyComputers.Checked:= True
- else
- chkServiceVerifyComputers.Checked:= False;
- end;
- Q.Next;
- end;
- Q.Close;
- finally
- Q.Free;
- end;
- end;
- procedure TfrmMain.SaveServiceSettings;
- var
- Q: TADOQuery;
- begin
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= Self.DB;
- Q.SQL.Text:= 'select * from settings where setting in '+
- '(''DoRunService'',''DoCheckSources'',''DoCheckDatabases'',''DoCheckServers'',''DoCheckComputers'')';
- Q.Open;
- Q.First;
- while not Q.Eof do begin
- if Q.FieldByName('Setting').AsString = 'DoRunService' then begin
- Q.Edit;
- if Self.chkEnableService.Checked then
- Q['Value']:= 'Y'
- else
- Q['Value']:= 'N';
- Q.Post;
- end;
- if Q.FieldByName('Setting').AsString = 'DoCheckSources' then begin
- Q.Edit;
- if Self.chkServiceVerifySources.Checked then
- Q['Value']:= 'Y'
- else
- Q['Value']:= 'N';
- Q.Post;
- end;
- if Q.FieldByName('Setting').AsString = 'DoCheckDatabases' then begin
- Q.Edit;
- if Self.chkServiceVerifyDatabases.Checked then
- Q['Value']:= 'Y'
- else
- Q['Value']:= 'N';
- Q.Post;
- end;
- if Q.FieldByName('Setting').AsString = 'DoCheckServers' then begin
- Q.Edit;
- if Self.chkServiceVerifyServers.Checked then
- Q['Value']:= 'Y'
- else
- Q['Value']:= 'N';
- Q.Post;
- end;
- if Q.FieldByName('Setting').AsString = 'DoCheckComputers' then begin
- Q.Edit;
- if Self.chkServiceVerifyComputers.Checked then
- Q['Value']:= 'Y'
- else
- Q['Value']:= 'N';
- Q.Post;
- end;
- Q.Next;
- end;
- Q.Close;
- finally
- if Q.Active then
- Q.Close;
- Q.Free;
- end;
- end;
- procedure TfrmMain.RefreshUpdates;
- var
- Q: TADOQuery;
- F: TGridFieldList;
- X: Integer;
- begin
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= Self.DB;
- Q.SQL.Text:= 'select u.*, s.NName as UN, ''Yes'' as Enabled from updates u';
- Q.SQL.Append('left join users s on s.id = u.UserID');
- Q.SQL.Append('where u.active = 1');
- Q.SQL.Append('Union All');
- Q.SQL.Append('select u.*, s.NName as UN, ''No'' as Enabled from updates u');
- Q.SQL.Append('left join users s on s.id = u.userid');
- Q.SQL.Append('where u.active = 0');
- Q.Open;
- Q.First;
- F:= TGridFieldList.Create;
- try
- F.AddField('ID', 'ID', '', ffText, 40);
- F.AddField('ReleaseDT', 'Date', '', ffDate, 70);
- F.AddField('UN', 'User', '', ffText, 120);
- F.AddField('Enabled', 'Active', '', ffText, 50);
- QueryToStringGrid(Q, F, lstUpdates, True);
- finally
- F.Free;
- end;
- Q.Close;
- finally
- Q.Free;
- end;
- SelectUpdate(EditUpdate);
- lstUpdatesClick(Self);
- end;
- procedure TfrmMain.RefreshUpdate(UpdateID: Integer);
- var
- Q: TADOQuery;
- begin
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= Self.DB;
- Q.SQL.Text:= 'select * from updates where ID = '+IntToStr(UpdateID);
- Q.Open;
- if not Q.IsEmpty then begin
- Q.First;
- if Q.FieldByName('Active').AsInteger = 1 then
- chkUpdateActive.Checked:= True
- else
- chkUpdateActive.Checked:= False;
- dtUpdateReleaseDate.DateTime:= Q.FieldByName('ReleaseDT').AsDateTime;
- lblUpdateID.Caption:= Q.FieldByName('ID').AsString;
- RefreshUpdateFiles(UpdateID);
- end else begin
- //None exists
- end;
- Q.Close;
- finally
- Q.Free;
- end;
- end;
- procedure TfrmMain.RefreshUpdateFiles(UpdateID: Integer);
- var
- Q: TADOQuery;
- F: TGridFieldList;
- begin
- Q:= TADOQuery.Create(nil);
- try
- Q.Connection:= Self.DB;
- Q.SQL.Text:= 'select * from UpdateFiles where UpdateID = '+IntToStr(UpdateID);
- Q.Open;
- F:= TGridFieldList.Create;
- try
- F.AddField('ID', 'ID', '', ffText, 40);
- F.AddField('Caption', 'Caption', '', ffText, 100);
- F.AddField('Filename', 'File Name', '', ffText, 100);
- F.AddField('SourcePath', 'Source Path', '', ffText, 200);
- F.AddField('DestPath', 'Destination Path', '', ffText, 200);
- QueryToStringGrid(Q, F, lstUpdateFiles, True);
- finally
- F.Free;
- end;
- Q.Close;
- finally
- Q.Free;
- end;
- SelectUpdateFile(EditUpdateFile);
- lstUpdateFilesClick(Self);
- end;
- procedure TfrmMain.RefreshUpdateFile(FileID: Integer);
- var
- Q: TADOQuery;
- begin
- Q:= TADOQuery.Create(nil);
- try
- txtUpdateFileCaption.Clear;
- txtUpdateFileSourcePath.Clear;
- txtUpdateFileDestPath.Clear;
- txtUpdateFileFilename.Clear;
- txtUpdateFilePriority.Clear;
- Q.Connection:= Self.DB;
- Q.SQL.Text:= 'select * from UpdateFiles where ID = '+IntToStr(FileID);
- Q.Open;
- if not Q.IsEmpty then begin
- if Q.FieldByName('Active').AsInteger = 1 then
- chkUpdateFileActive.Checked:= True
- else
- chkUpdateFileActive.Checked:= False;
- txtUpdateFileCaption.Text:= Q.FieldByName('Caption').AsString;
- txtUpdateFileSourcePath.Text:= Q.FieldByName('SourcePath').AsString;
- txtUpdateFileDestPath.Text:= Q.FieldByName('DestPath').AsString;
- txtUpdateFileFilename.Text:= Q.FieldByName('Filename').AsString;
- txtUpdateFilePriority.Text:= IntToStr(Q.FieldByName('Priority').AsInteger);
- end;
- Q.Close;
- finally
- Q.Free;
- end;
- end;
- procedure TfrmMain.EnableUpdateEdit;
- begin
- pUpdateDetails.Enabled:= True;
- lstUpdates.Enabled:= False;
- cmdNewUpdate.Enabled:= False;
- cmdEditUpdate.Enabled:= False;
- cmdReplicateUpdate.Enabled:= False;
- cmdNewUpdateFile.Enabled:= True;
- cmdEditUpdateFile.Enabled:= True;
- cmdDeleteUpdateFile.Enabled:= True;
- end;
- procedure TfrmMain.DisableUpdateEdit;
- begin
- pUpdateDetails.Enabled:= False;
- lstUpdates.Enabled:= True;
- cmdNewUpdate.Enabled:= True;
- cmdEditUpdate.Enabled:= True;
- cmdReplicateUpdate.Enabled:= True;
- cmdNewUpdateFile.Enabled:= False;
- cmdEditUpdateFile.Enabled:= False;
- cmdDeleteUpdateFile.Enabled:= False;
- end;
- procedure TfrmMain.EnableUpdateFileEdit;
- begin
- pUpdates.Enabled:= False;
- cmdNewUpdateFile.Enabled:= False;
- cmdEditUpdateFile.Enabled:= False;
- cmdDeleteUpdateFile.Enabled:= False;
- lstUpdateFiles.Enabled:= False;
- pUpdateFileDetails.Enabled:= True;
- end;
- procedure TfrmMain.DisableUpdateFileEdit;
- begin
- pUpdates.Enabled:= True;
- cmdNewUpdateFile.Enabled:= True;
- cmdEditUpdateFile.Enabled:= True;
- cmdDeleteUpdateFile.Enabled:= True;
- lstUpdateFiles.Enabled:= True;
- pUpdateFileDetails.Enabled:= False;
- end;
- procedure TfrmMain.SelectUpdate(UpdateID: Integer);
- var
- X: Integer;
- begin
- if UpdateID = 0 then
- lstUpdates.Row:= 1
- else begin
- for X := 1 to lstUpdates.RowCount do begin
- if lstUpdates.Cells[0,X] = IntToStr(UpdateID) then begin
- lstUpdates.Row:= X;
- break;
- end;
- end;
- end;
- end;
- procedure TfrmMain.SelectUpdateFile(FileID: Integer);
- begin
- end;
- procedure TfrmMain.ClearUpdateFile;
- begin
- txtUpdateFileCaption.Clear;
- txtUpdateFileSourcePath.Clear;
- txtUpdateFileDestPath.Clear;
- txtUpdateFileFilename.Clear;
- txtUpdateFilePriority.Clear;
- chkUpdateFileActive.Checked:= True;
- end;
- //Finding size of taskbar
- function FindTaskbarHeight: Integer;
- var
- TBHandle: HWND;
- TBRect: TRect;
- begin
- TBHandle := FindWindow('Shell_TrayWnd', '');
- if TBHandle = 0 then Result := 0 else
- begin
- GetWindowRect(TBHandle, TBRect);
- Result := TBRect.Bottom - TBRect.Top;
- end;
- end;
- //Width of clock area
- //TBRect.Left
- //not width
- //Screen.Width - TBRect.Left
- //x,y TBRect.Top TBRect.Left
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement