Subversion Repositories oidplus

Compare Revisions

Regard whitespace Rev 231 → Rev 232

/trunk_win95/Main.pas
0,0 → 1,872
unit Main;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, IniFiles, ComCtrls;
 
type
TForm1 = class(TForm)
TreeView1: TTreeView;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Label1: TLabel;
Edit3: TEdit;
Label3: TLabel;
Memo1: TMemo;
Edit4: TEdit;
Label4: TLabel;
CheckBox1: TCheckBox;
ComboBox1: TComboBox;
Label5: TLabel;
Edit5: TEdit;
Label6: TLabel;
Edit6: TEdit;
Label7: TLabel;
ListBox1: TListBox;
Edit7: TEdit;
Button1: TButton;
Button3: TButton;
Button2: TButton;
Button4: TButton;
Edit1: TEdit;
TabSheet3: TTabSheet;
Button5: TButton;
Edit2: TEdit;
TabSheet4: TTabSheet;
Button6: TButton;
Edit8: TEdit;
Button7: TButton;
Button8: TButton;
Edit9: TEdit;
Label2: TLabel;
Edit10: TEdit;
Label8: TLabel;
Edit11: TEdit;
Label9: TLabel;
Edit12: TEdit;
Label10: TLabel;
Edit13: TEdit;
Label11: TLabel;
Button9: TButton;
Edit14: TEdit;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure CheckBox1Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Edit8KeyPress(Sender: TObject; var Key: Char);
procedure Edit11Change(Sender: TObject);
procedure ListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edit7KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure TreeView1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
function ShowOID(oid: string; ini: TIniFile; nod: TTreeNode): integer;
procedure ShowRA(ini: TIniFile; nod: TTreeNode);
function DBPath: string;
function GetAsn1Ids(onlyfirst: boolean): string;
procedure SaveChangesIfRequired;
procedure ShowError(msg: string);
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
uses
SortStrings;
 
resourcestring
TITLE_OID = 'Object Identifiers';
TITLE_RA = 'Registration Authorities';
 
procedure Split(Delimiter: string; Str: string; ListOfStrings: TStrings) ;
var
p: integer;
begin
ListOfStrings.Clear;
p := Pos(Delimiter, Str);
while p > 0 do
begin
ListOfStrings.Add(Copy(Str, 1, p-1));
Delete(Str, 1, p);
p := Pos(Delimiter, Str);
end;
if Str <> '' then ListOfStrings.Add(Str);
end;
 
function TForm1.ShowOID(oid: string; ini: TIniFile; nod: TTreeNode): integer;
var
i: integer;
sectionName: string;
asn1ids: string;
sl: TStringList;
begin
result := 0;
if oid = 'OID:' then
begin
nod := TreeView1.Items.AddChild(nod, TITLE_OID);
end
else
begin
asn1ids := ini.ReadString(oid, 'asn1id', '');
if ini.ReadBool(oid, 'draft', false) then
nod := TreeView1.Items.AddChild(nod, Trim(oid+' '+Copy(asn1ids,1,Pos(',',asn1ids+',')-1))+' [DRAFT]')
else
nod := TreeView1.Items.AddChild(nod, Trim(oid+' '+Copy(asn1ids,1,Pos(',',asn1ids+',')-1)));
end;
sl := TStringList.Create;
for i := 1 to ini.ReadInteger(oid, 'delegates', 0) do
begin
sectionName := ini.ReadString(oid, 'delegate'+IntToStr(i), '');
if sectionName = '' then continue;
sl.Add(sectionName);
Inc(result);
end;
SortSL(sl);
for i := 0 to sl.Count-1 do
begin
sectionName := sl.Strings[i];
(*result := result + *)ShowOid(sectionName, ini, nod);
end;
sl.Free;
if (oid = 'OID:') or (result < 125) then
nod.Expand(false);
end;
 
procedure TForm1.ShowRA(ini: TIniFile; nod: TTreeNode);
var
i: integer;
sectionName, personname: string;
sl: TStringList;
begin
nod := TreeView1.Items.AddChild(nod, TITLE_RA);
sl := TStringList.Create;
for i := 1 to ini.ReadInteger('RA:', 'count', 0) do
begin
sectionName := ini.ReadString('RA:', 'ra'+IntToStr(i), '');
if sectionName = '' then continue;
personname := ini.ReadString(sectionName, 'name', '');
sl.Add(Trim(sectionName + ' ' + personname));
end;
SortSL(sl);
for i := 0 to sl.Count-1 do
begin
sectionName := sl.Strings[i];
TreeView1.Items.AddChild(nod, sectionName);
ComboBox1.Items.Add(Copy(sectionName,1,Pos(' ',sectionName+' ')-1));
end;
sl.Free;
nod.Expand(false);
end;
 
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
ini: TIniFile;
txtFile: string;
begin
SaveChangesIfRequired;
 
if Copy(TreeView1.Selected.Text, 1, 4) = 'OID:' then
begin
PageControl1.ActivePage := TabSheet1;
ini := TIniFile.Create(DBPath+'OID.INI');
try
Edit4.Text := Copy(TreeView1.Selected.Text, 1, Pos(' ',TreeView1.Selected.Text+' ')-1);
ListBox1.Items.Clear;
Split(',', ini.ReadString(Edit4.Text, 'asn1id', ''), ListBox1.Items);
Edit3.Text := ini.ReadString(Edit4.Text, 'description', '');
CheckBox1.Checked := ini.ReadBool(Edit4.Text, 'draft', false);
txtFile := DBPath+ini.ReadString(Edit4.Text, 'information', '');
if FileExists(txtFile) then
Memo1.Lines.LoadFromFile(txtFile)
else
Memo1.Lines.Clear;
Memo1.Modified := false;
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(ini.ReadString(Edit4.Text, 'ra', ''));
Edit5.Text := ini.ReadString(Edit4.Text, 'createdate', '');
Edit6.Text := ini.ReadString(Edit4.Text, 'updatedate', '');
Edit7.Text := '';
finally
ini.Free;
end;
end;
if Copy(TreeView1.Selected.Text, 1, 3) = 'RA:' then
begin
PageControl1.ActivePage := TabSheet2;
ini := TIniFile.Create(DBPath+'RA.INI');
try
Edit9.Text := Copy(TreeView1.Selected.Text, 1, Pos(' ',TreeView1.Selected.Text+' ')-1);
Edit10.Text := ini.ReadString(Edit9.Text, 'createdate', '');
Edit11.Text := ini.ReadString(Edit9.Text, 'name', '');
Edit12.Text := ini.ReadString(Edit9.Text, 'email', '');
Edit13.Text := ini.ReadString(Edit9.Text, 'phone', '');
Edit14.Text := ini.ReadString(Edit9.Text, 'updatedate', '');
finally
ini.Free;
end;
end;
if TreeView1.Selected.Text = TITLE_OID then PageControl1.ActivePage := TabSheet3;
if TreeView1.Selected.Text = TITLE_RA then PageControl1.ActivePage := TabSheet4;
end;
 
procedure TForm1.FormShow(Sender: TObject);
var
nod, raroot: TTreeNode;
ini: TIniFile;
begin
ComboBox1.Clear;
TreeView1.Items.Clear;
nod := TTreeNode.Create(Treeview1.Items);
 
ini := TIniFile.Create(DBPath+'OID.INI');
try
ShowOID('OID:', ini, nod);
finally
ini.Free;
end;
 
ini := TIniFile.Create(DBPath+'RA.INI');
try
ShowRa(ini, nod);
finally
ini.Free;
end;
end;
 
function Asn1IdValid(asn1id: string): boolean;
var
i: integer;
begin
if asn1id = '' then
begin
result := false;
exit;
end;
 
if not (asn1id[1] in ['a'..'z']) then
begin
result := false;
exit;
end;
 
for i := 2 to Length(asn1id) do
begin
if not (asn1id[1] in ['a'..'z', 'A'..'Z', '0'..'9', '-']) then
begin
result := false;
exit;
end;
end;
 
result := true;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
asn1id: string;
i: integer;
begin
asn1id := Edit7.Text;
if asn1id = '' then exit;
for i := 0 to ListBox1.Items.Count-1 do
begin
if ListBox1.Items.Strings[i] = asn1id then ShowError('Item already exists');
end;
if not Asn1IdValid(asn1id) then ShowError('Invalid alphanumeric identifier');
ListBox1.Items.Add(asn1id);
TreeView1.Selected.Text := Trim(Edit4.Text + ' ' + GetAsn1Ids(true));
Edit7.Text := '';
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
if (ListBox1.Items.Count > 0) and ListBox1.Selected[ListBox1.ItemIndex] then
begin
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
TreeView1.Selected.Text := Trim(Edit4.Text + ' ' + GetAsn1Ids(true));
end;
 
function IsPositiveNumber(str: string): boolean;
var
i: integer;
begin
if (str = '') then
begin
result := false;
exit;
end;
 
result := true;
for i := 1 to Length(str) do
begin
if not (str[i] in ['0'..'9']) then
begin
result := false;
exit;
end;
end;
 
if (str[1] = '0') and (str <> '0') then
begin
result := false;
exit;
end;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
ini: TIniFile;
i, di: integer;
oid, parent_oid, new_value: string;
nod: TTreeNode;
candidate: string;
begin
if PageControl1.ActivePage = TabSheet1 then new_value := Edit1.Text;
if PageControl1.ActivePage = TabSheet3 then new_value := Edit2.Text;
 
new_value := Trim(new_value);
if new_value = '' then exit;
 
if not IsPositiveNumber(new_value) then ShowError('Not a valid number');
 
if PageControl1.ActivePage = TabSheet1 then
begin
oid := Edit4.Text + '.' + new_value;
parent_oid := Edit4.Text;
end
else
begin
oid := 'OID:' + new_value;
parent_oid := 'OID:';
end;
 
for i := 0 to TreeView1.Selected.Count-1 do
begin
candidate := Copy(TreeView1.Selected.Item[i].Text, 1, Pos(' ',TreeView1.Selected.Item[i].Text+' ')-1);
if oid = candidate then ShowError('Item already exists');
end;
 
if (parent_oid = 'OID:') and (StrToInt(new_value) > 2) then ShowError('Number must not exceed 2');
if (parent_oid = 'OID:0') and (StrToInt(new_value) > 39) then ShowError('Number must not exceed 39');
if (parent_oid = 'OID:1') and (StrToInt(new_value) > 39) then ShowError('Number must not exceed 39');
 
ini := TIniFile.Create(DBPath+'OID.INI');
try
nod := TreeView1.Items.AddChild(TreeView1.Selected, oid);
ComboBox1.Text := ini.ReadString(parent_oid, 'ra', '');
 
di := ini.ReadInteger(parent_oid, 'delegates', 0);
ini.WriteInteger(parent_oid, 'delegates', di+1);
ini.WriteString(parent_oid, 'delegate'+IntToStr(di+1), oid);
 
ini.WriteString(oid, 'createdate', DateToStr(date));
ini.WriteString(oid, 'ra', ComboBox1.Text);
 
if PageControl1.ActivePage = TabSheet1 then Edit1.Text := '';
if PageControl1.ActivePage = TabSheet3 then Edit2.Text := '';
 
TreeView1.Selected := nod;
 
ini.UpdateFile;
finally
ini.Free;
end;
 
ShowMessage('Created: ' + oid);
end;
 
procedure TForm1.Button7Click(Sender: TObject);
var
ini: TIniFile;
di: integer;
nod: TTreeNode;
sectionName, new_value, candidate: string;
i: integer;
begin
ini := TIniFile.Create(DBPath+'RA.INI');
try
new_value := Edit8.Text;
new_value := Trim(new_value);
if new_value = '' then exit;
 
sectionName := 'RA:'+new_value;
 
for i := 0 to TreeView1.Selected.Count-1 do
begin
candidate := TreeView1.Selected.Item[i].Text;
if sectionName = candidate then ShowError('Item already exists');
end;
 
di := ini.ReadInteger('RA:', 'count', 0);
ini.WriteInteger('RA:', 'count', di+1);
ini.WriteString('RA:', 'ra'+IntToStr(di+1), sectionName);
 
nod := TreeView1.Items.AddChild(TreeView1.Selected, sectionName);
 
ini.WriteString(sectionName, 'createdate', DateToStr(date));
 
Edit8.Text := '';
 
TreeView1.Selected := nod;
 
ini.WriteString(sectionName, 'createdate', DateToStr(date));
 
ini.UpdateFile;
finally
ini.Free;
end;
 
ComboBox1.Items.Add(sectionName);
 
ShowMessage('Created: ' + sectionName);
end;
 
procedure TForm1.Button6Click(Sender: TObject);
var
ini: TIniFile;
nod: TTreeNode;
parent_oid, this_oid: string;
i: integer;
sl: TStringList;
begin
if MessageDlg('Are you sure?', mtConfirmation, mbYesNoCancel, 0) <> idYes then exit;
 
ini := TIniFile.Create(DBPath+'OID.INI');
try
this_oid := Edit4.Text;
if TreeView1.Selected.Parent.Text = TITLE_OID then
parent_oid := 'OID:'
else
parent_oid := Copy(TreeView1.Selected.Parent.Text, 1, Pos(' ', TreeView1.Selected.Parent.Text+' ')-1);
 
nod := TreeView1.Selected;
TreeView1.Selected := nod.Parent;
TreeView1.Items.Delete(nod);
 
ini.EraseSection(this_oid);
 
sl := TStringList.Create;
ini.ReadSections(sl);
for i := 0 to sl.Count-1 do
begin
if Copy(sl.Strings[i], 1, Length(this_oid)+1) = this_oid+'.' then
begin
ini.EraseSection(sl.Strings[i]);
end;
end;
sl.Free;
 
for i := 1 to ini.ReadInteger(parent_oid, 'delegates', 0) do
begin
if ini.ReadString(parent_oid, 'delegate'+IntToStr(i), '') = this_oid then
begin
ini.WriteString(parent_oid, 'delegate'+IntToStr(i), '');
end;
end;
 
ini.UpdateFile;
finally
ini.Free;
end;
end;
 
procedure TForm1.Button8Click(Sender: TObject);
var
ini: TIniFile;
nod: TTreeNode;
parent_ra, this_ra: string;
i: integer;
begin
if MessageDlg('Are you sure?', mtConfirmation, mbYesNoCancel, 0) <> idYes then exit;
 
ini := TIniFile.Create(DBPath+'RA.INI');
try
this_ra := Copy(Treeview1.Selected.Text, 1, Pos(' ',Treeview1.Selected.Text+' ')-1);
if TreeView1.Selected.Parent.Text = TITLE_RA then
parent_ra := 'RA:'
else
parent_ra := Copy(TreeView1.Selected.Parent.Text, 1, Pos(' ', TreeView1.Selected.Parent.Text+' ')-1);
 
nod := TreeView1.Selected;
TreeView1.Selected := nod.Parent;
TreeView1.Items.Delete(nod);
 
ini.EraseSection(this_ra);
 
for i := 1 to ini.ReadInteger(parent_ra, 'count', 0) do
begin
if ini.ReadString(parent_ra, 'ra'+IntToStr(i), '') = this_ra then
begin
ini.WriteString(parent_ra, 'ra'+IntToStr(i), '');
end;
end;
 
ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(this_ra));
 
ini.UpdateFile;
finally
ini.Free;
end;
end;
 
function RandomStr(len: integer): string;
var
i: integer;
begin
result := '';
for i := 1 to len do
begin
result := result + Chr(ord('A') + Random(26));
end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
ini: TIniFile;
txtFile, asn1s: string;
modified: boolean;
begin
// Attention: Do not rely on TreeView1.Selected.Text, because Button2.Click
// will be called in TreeView1OnChange()!
 
ini := TIniFile.Create(DBPath+'OID.INI');
try
modified := false;
 
if ini.ReadString(Edit4.Text, 'ra', '') <> ComboBox1.Text then
begin
modified := true;
ini.WriteString(Edit4.Text, 'ra', ComboBox1.Text);
end;
 
if ini.ReadString(Edit4.Text, 'description', '') <> Edit3.Text then
begin
modified := true;
ini.WriteString(Edit4.Text, 'description', Edit3.Text);
end;
 
if ini.ReadBool(Edit4.Text, 'draft', false) <> CheckBox1.Checked then
begin
modified := true;
ini.WriteBool(Edit4.Text, 'draft', CheckBox1.Checked);
end;
 
if Memo1.Modified then
begin
modified := true;
if Trim(Memo1.Lines.Text) = '' then
begin
txtFile := ini.ReadString(Edit4.Text, 'information', '');
if FileExists(DBPath+txtFile) then
begin
DeleteFile(DBPath+txtFile);
end;
if txtFile <> '' then
begin
ini.WriteString(Edit4.Text, 'information', '')
end;
end
else
begin
txtFile := ini.ReadString(Edit4.Text, 'information', '');
if txtFile = '' then
begin
repeat
txtFile := RandomStr(8) + '.TXT';
until not FileExists(DBPath+txtFile);
ini.WriteString(Edit4.Text, 'information', txtFile);
end;
 
Memo1.Lines.SaveToFile(DBPath+txtFile);
Memo1.Modified := false;
end;
end;
 
asn1s := GetAsn1Ids(false);
if ini.ReadString(Edit4.Text, 'asn1id', '') <> asn1s then
begin
modified := true;
ini.WriteString(Edit4.Text, 'asn1id', asn1s);
end;
 
if modified then
begin
ini.WriteString(Edit4.Text, 'updatedate', DateToStr(Date));
ini.Updatefile;
end;
finally
ini.Free;
end;
end;
 
function TForm1.GetAsn1Ids(onlyfirst: boolean): string;
var
i: integer;
begin
result := '';
for i := 0 to ListBox1.Items.Count-1 do
begin
if result = '' then
result := ListBox1.Items.Strings[i]
else if not onlyfirst then
result := result + ',' + ListBox1.Items.Strings[i];
end;
end;
 
function DirectoryExists(const Directory: string; FollowLink: Boolean = True): Boolean; // Source: Delphi 10.3.3
var
Code: Cardinal;
Handle: THandle;
LastError: Cardinal;
const
faSymLink = $00000400; // Available on POSIX and Vista and above
INVALID_FILE_ATTRIBUTES = DWORD($FFFFFFFF);
begin
Result := False;
Code := GetFileAttributes(PChar(Directory));
 
if Code <> INVALID_FILE_ATTRIBUTES then
begin
if faSymLink and Code = 0 then
Result := faDirectory and Code <> 0
else
begin
if FollowLink then
begin
Handle := CreateFile(PChar(Directory), GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if Handle <> INVALID_HANDLE_VALUE then
begin
CloseHandle(Handle);
Result := faDirectory and Code <> 0;
end;
end
else if faDirectory and Code <> 0 then
Result := True
else
begin
Handle := CreateFile(PChar(Directory), GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if Handle <> INVALID_HANDLE_VALUE then
begin
CloseHandle(Handle);
Result := False;
end
else
Result := True;
end;
end;
end
else
begin
LastError := GetLastError;
Result := (LastError <> ERROR_FILE_NOT_FOUND) and
(LastError <> ERROR_PATH_NOT_FOUND) and
(LastError <> ERROR_BAD_PATHNAME) and
(LastError <> ERROR_INVALID_NAME) and
(LastError <> ERROR_BAD_NETPATH) and
(LastError <> ERROR_NOT_READY) and
(LastError <> ERROR_BAD_NET_NAME);
end;
end;
 
function TForm1.DBPath: string;
var
ini: TIniFile;
begin
ini := TIniFile.Create('.\OIDPLUS.INI');
try
if not ini.ValueExists('SETTINGS', 'DATA') then
begin
result := 'DB\';
ini.WriteString('SETTINGS', 'DATA', result);
ini.UpdateFile;
end
else
begin
result := ini.ReadString('SETTINGS', 'DATA', 'DB\');
end;
if not DirectoryExists(result) then MkDir(result);
if not DirectoryExists(result) then
begin
ShowError('Cannot create database directory '+result);
end;
finally
ini.Free;
end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.ActivePage := TabSheet3;
Randomize;
end;
 
procedure TForm1.SaveChangesIfRequired;
begin
if PageControl1.ActivePage = TabSheet1 then Button2.Click; // Save changes
if PageControl1.ActivePage = TabSheet2 then Button9.Click; // Save changes
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
SaveChangesIfRequired;
CanClose := true;
end;
 
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
TreeView1.Selected.Text := Trim(Edit4.Text+' '+GetAsn1Ids(true))+' [DRAFT]'
else
TreeView1.Selected.Text := Trim(Edit4.Text+' '+GetAsn1Ids(true));
end;
 
procedure TForm1.ShowError(msg: string);
begin
MessageDlg(msg, mtError, [mbOk], 0);
Abort;
end;
 
procedure TForm1.Button9Click(Sender: TObject);
var
ini: TIniFile;
txtFile, asn1s: string;
modified: boolean;
begin
// Attention: Do not rely on TreeView1.Selected.Text, because Button9.Click
// will be called in TreeView1OnChange()!
 
ini := TIniFile.Create(DBPath+'RA.INI');
try
modified := false;
if ini.ReadString(Edit9.Text, 'name', '') <> Edit11.Text then
begin
modified := true;
ini.WriteString(Edit9.Text, 'name', Edit11.Text);
end;
if ini.ReadString(Edit9.Text, 'email', '') <> Edit12.Text then
begin
modified := true;
ini.WriteString(Edit9.Text, 'email', Edit12.Text);
end;
if ini.ReadString(Edit9.Text, 'phone', '') <> Edit13.Text then
begin
modified := true;
ini.WriteString(Edit9.Text, 'phone', Edit13.Text);
end;
if modified then
begin
ini.WriteString(Edit9.Text, 'updatedate', DateToStr(Date));
ini.Updatefile;
end;
finally
ini.Free;
end;
end;
 
procedure TForm1.Edit8KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Button7.Click;
Key := #0;
Exit;
end;
if Key = #8(*backspace*) then exit;
if Key in ['a'..'z'] then Key := UpCase(Key);
if not (Key in ['A'..'Z', '-']) then
begin
Beep;
Key := #0;
end;
end;
 
procedure TForm1.Edit11Change(Sender: TObject);
begin
TreeView1.Selected.Text := Trim(Edit9.Text + ' ' + Edit11.Text);
end;
 
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = 46(*DEL*) then
begin
Button3.Click;
Key := 0;
end;
end;
 
procedure TForm1.Edit7KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Button1.Click;
Key := #0;
end;
end;
 
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Button5.Click;
Key := #0;
end;
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Button4.Click;
Key := #0;
end;
end;
 
procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 46(*DEL*) then
begin
if Copy(TreeView1.Selected.Text, 1, 4) = 'OID:' then
begin
Button6.Click;
end
else if Copy(TreeView1.Selected.Text, 1, 3) = 'RA:' then
begin
Button8.Click;
end
else
begin
Beep;
end;
 
Key := 0;
end;
end;
 
end.