2605 lines
94 KiB
ObjectPascal
2605 lines
94 KiB
ObjectPascal
{
|
|
********************************************************************************
|
|
|
|
YaPeTaVi - Yet another Periodic Table Viewer
|
|
Copyright (C) 1997-2000, 2009-2012 Geoffray Levasseur <geoffray.levasseurbrandin@numericable.fr>.
|
|
All rights reserved.
|
|
http://www.geoffray-levasseur.org/
|
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
Foundation; either version 3 of the License, or (at your option) any later
|
|
version.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
********************************************************************************
|
|
|
|
Description:
|
|
Periodic table (main) form unit
|
|
|
|
}
|
|
unit frmTable;
|
|
|
|
{$mode objfpc}{$H+}
|
|
interface
|
|
|
|
uses
|
|
SysUtils, Classes, Graphics, TACustomSeries, TASeries, Controls, Forms,
|
|
Dialogs, ExtCtrls, StdCtrls, LResources, ComCtrls, Spin, Menus,
|
|
CheckLst, Buttons, IniPropStorage, TAGraph, TATools, uConst, IniFiles,
|
|
//project classes
|
|
uElemListClass, uElecDistClass;
|
|
|
|
type
|
|
|
|
{ TTableForm }
|
|
|
|
TTableForm = class(TForm)
|
|
btnAddState: TBitBtn;
|
|
btnSaveFilterSet: TBitBtn;
|
|
btnOpenFilterSet: TBitBtn;
|
|
btnAddFilterSet: TBitBtn;
|
|
btnClearFilterSet: TBitBtn;
|
|
btnAddFilter: TBitBtn;
|
|
btnChangeFilter: TBitBtn;
|
|
btnRemoveFilter: TBitBtn;
|
|
btnWikipedia: TBitBtn;
|
|
btnAdd: TButton;
|
|
btnFullRange: TButton;
|
|
cbListApplyFilter: TCheckBox;
|
|
cbShowUnknown: TCheckBox;
|
|
cbStateShowUnknown: TCheckBox;
|
|
cbxSort: TComboBox;
|
|
cbxState: TComboBox;
|
|
Chart: TChart;
|
|
cbTableApplyFilters: TCheckBox;
|
|
cbxLayout: TComboBox;
|
|
cbxXAxis: TComboBox;
|
|
cbxYAxis: TComboBox;
|
|
cbDrawLines: TCheckBox;
|
|
cbChartApplyFilters: TCheckBox;
|
|
cbChartUnknowVal: TCheckBox;
|
|
ChartToolset: TChartToolset;
|
|
cbxInvertSortOrder: TCheckBox;
|
|
clbRange: TCheckListBox;
|
|
cbxChartLabels: TComboBox;
|
|
cbFilterKind: TComboBox;
|
|
edRange: TEdit;
|
|
gbState: TGroupBox;
|
|
GroupBox10: TGroupBox;
|
|
GroupBox11: TGroupBox;
|
|
GroupBox3: TGroupBox;
|
|
imgAtom: TImage;
|
|
imgAtom1: TImage;
|
|
IniPropStorage: TIniPropStorage;
|
|
Label16: TLabel;
|
|
Label17: TLabel;
|
|
lbExpandedElecConf: TLabel;
|
|
lbNoPic: TLabel;
|
|
lbSecondIonisationEnergy: TLabel;
|
|
lbThirdIonisationEnergy: TLabel;
|
|
lbCASNumber: TLabel;
|
|
Label22: TLabel;
|
|
Label23: TLabel;
|
|
Label32: TLabel;
|
|
Label33: TLabel;
|
|
Label42: TLabel;
|
|
lbPAtNum1: TLabel;
|
|
lbPMass1: TLabel;
|
|
lbPName1: TLabel;
|
|
lvFilters: TListView;
|
|
MenuItem5: TMenuItem;
|
|
mmUse: TMemo;
|
|
mmAspect: TMemo;
|
|
MenuItem3: TMenuItem;
|
|
MenuItem4: TMenuItem;
|
|
mnuHeapStatus: TMenuItem;
|
|
mnuShowFilterList: TMenuItem;
|
|
mnuDiscoverer: TMenuItem;
|
|
mnuOpenConsole: TMenuItem;
|
|
dlgOpen: TOpenDialog;
|
|
pnCn: TPanel;
|
|
pnSelected: TPanel;
|
|
rbStateCelcius: TRadioButton;
|
|
rbStateKelvin: TRadioButton;
|
|
dlgSave: TSaveDialog;
|
|
sedFilterMax: TFloatSpinEdit;
|
|
sedFilterMin: TFloatSpinEdit;
|
|
sedStateTemp: TFloatSpinEdit;
|
|
sedXStart: TFloatSpinEdit;
|
|
sedYStart: TFloatSpinEdit;
|
|
sedXEnd: TFloatSpinEdit;
|
|
sedYEnd: TFloatSpinEdit;
|
|
Label38: TLabel;
|
|
Label39: TLabel;
|
|
Label40: TLabel;
|
|
Label41: TLabel;
|
|
mnuFullZoom: TMenuItem;
|
|
pmChart: TPopupMenu;
|
|
MainMenu: TMainMenu;
|
|
MenuItem1: TMenuItem;
|
|
MenuItem2: TMenuItem;
|
|
mnuAbout: TMenuItem;
|
|
mnuConfigure: TMenuItem;
|
|
mnuExit: TMenuItem;
|
|
mnuFile: TMenuItem;
|
|
mnuHelp: TMenuItem;
|
|
mnuManual: TMenuItem;
|
|
mnuMassCalc: TMenuItem;
|
|
mnuTools: TMenuItem;
|
|
GroupBox1: TGroupBox;
|
|
GroupBox2: TGroupBox;
|
|
GroupBox4: TGroupBox;
|
|
GroupBox5: TGroupBox;
|
|
GroupBox7: TGroupBox;
|
|
GroupBox8: TGroupBox;
|
|
GroupBox9: TGroupBox;
|
|
Isotopes: TTabSheet;
|
|
Label1: TLabel;
|
|
Label10: TLabel;
|
|
Label11: TLabel;
|
|
Label12: TLabel;
|
|
Label13: TLabel;
|
|
Label14: TLabel;
|
|
Label15: TLabel;
|
|
Label19: TLabel;
|
|
Label2: TLabel;
|
|
Label3: TLabel;
|
|
Label4: TLabel;
|
|
Label5: TLabel;
|
|
Label6: TLabel;
|
|
Label7: TLabel;
|
|
Label8: TLabel;
|
|
Label9: TLabel;
|
|
lbAtNumber: TLabel;
|
|
lbAverageX1: TLabel;
|
|
lbAverageY1: TLabel;
|
|
lbBoilingPt: TLabel;
|
|
lbCovalentRd: TLabel;
|
|
lbDiscovery: TLabel;
|
|
lbElecAff: TLabel;
|
|
lbElecConf: TLabel;
|
|
lbElectroneg: TLabel;
|
|
lbEtimology: TLabel;
|
|
lbFamily: TLabel;
|
|
lbFirsIonisationEnergy: TLabel;
|
|
lbMass: TLabel;
|
|
lbMaxX: TLabel;
|
|
lbMaxX1: TLabel;
|
|
lbMaxY1: TLabel;
|
|
lbMeltingPt: TLabel;
|
|
lbMinX: TLabel;
|
|
lbAverageX: TLabel;
|
|
lbMaxY: TLabel;
|
|
lbMinX1: TLabel;
|
|
lbMinY: TLabel;
|
|
lbAverageY: TLabel;
|
|
lbMinY1: TLabel;
|
|
lbName: TLabel;
|
|
lbNatRadio: TLabel;
|
|
lbRadioHalfLife: TLabel;
|
|
lbUnitX: TLabel;
|
|
lbUnitX1: TLabel;
|
|
lbUnitY: TLabel;
|
|
lbUnitY1: TLabel;
|
|
lbUnknownSort: TLabel;
|
|
lbVanDerWalsRd: TLabel;
|
|
lvList: TListView;
|
|
PageControl2: TPageControl;
|
|
Panel1: TPanel;
|
|
Panel2: TPanel;
|
|
pnNum1: TPanel;
|
|
pnNum10: TPanel;
|
|
pnNum11: TPanel;
|
|
pnNum12: TPanel;
|
|
pnNum13: TPanel;
|
|
pnNum14: TPanel;
|
|
pnNum15: TPanel;
|
|
pnNum16: TPanel;
|
|
pnNum17: TPanel;
|
|
pnNum18: TPanel;
|
|
pnNum2: TPanel;
|
|
pnNum3: TPanel;
|
|
pnNum4: TPanel;
|
|
pnNum5: TPanel;
|
|
pnNum6: TPanel;
|
|
pnNum7: TPanel;
|
|
pnNum8: TPanel;
|
|
pnNum9: TPanel;
|
|
rbSortFirst: TRadioButton;
|
|
rbSortLast: TRadioButton;
|
|
Splitter1: TSplitter;
|
|
GroupBox6: TGroupBox;
|
|
gbLegend: TGroupBox;
|
|
lbContextInfo: TLabel;
|
|
Label20: TLabel;
|
|
lbPMass: TLabel;
|
|
lbPAtNum: TLabel;
|
|
lbPName: TLabel;
|
|
PageControl1: TPageControl;
|
|
pnHighlight: TPanel;
|
|
pnGe: TPanel;
|
|
pnI: TPanel;
|
|
pnAc: TPanel;
|
|
pnDy: TPanel;
|
|
pnTb: TPanel;
|
|
pnGd: TPanel;
|
|
pnEu: TPanel;
|
|
pnSm: TPanel;
|
|
pnCe: TPanel;
|
|
pnTh: TPanel;
|
|
pnPa: TPanel;
|
|
pnU: TPanel;
|
|
pnNp: TPanel;
|
|
pnLa2: TPanel;
|
|
pnPu: TPanel;
|
|
pnAm: TPanel;
|
|
pnCm: TPanel;
|
|
pnBk: TPanel;
|
|
pnCf: TPanel;
|
|
pnEs: TPanel;
|
|
pnFm: TPanel;
|
|
pnMd: TPanel;
|
|
pnNo: TPanel;
|
|
pnLr: TPanel;
|
|
pnPr: TPanel;
|
|
pnNd: TPanel;
|
|
pnPm: TPanel;
|
|
pnYb: TPanel;
|
|
pnTm: TPanel;
|
|
pnEr: TPanel;
|
|
pnHo: TPanel;
|
|
pnXe: TPanel;
|
|
pnAl: TPanel;
|
|
pnSi: TPanel;
|
|
pnP: TPanel;
|
|
pnS: TPanel;
|
|
pnCl: TPanel;
|
|
pnAr: TPanel;
|
|
pnB: TPanel;
|
|
pnC: TPanel;
|
|
pnAs: TPanel;
|
|
pnN: TPanel;
|
|
pnO: TPanel;
|
|
pnF: TPanel;
|
|
pnNe: TPanel;
|
|
pnHe: TPanel;
|
|
pnBi: TPanel;
|
|
pnPo: TPanel;
|
|
pnPb: TPanel;
|
|
pnTl: TPanel;
|
|
pnAt: TPanel;
|
|
pnSe: TPanel;
|
|
pnRn: TPanel;
|
|
pnBr: TPanel;
|
|
pnKr: TPanel;
|
|
pnIn: TPanel;
|
|
pnSn: TPanel;
|
|
pnSb: TPanel;
|
|
pnTe: TPanel;
|
|
pnH: TPanel;
|
|
pnLi: TPanel;
|
|
pnCa: TPanel;
|
|
pnSc: TPanel;
|
|
pnGa: TPanel;
|
|
pnTi: TPanel;
|
|
pnTa: TPanel;
|
|
pnDb: TPanel;
|
|
pnW: TPanel;
|
|
pnSg: TPanel;
|
|
pnMn: TPanel;
|
|
pnTc: TPanel;
|
|
pnRe: TPanel;
|
|
pnBh: TPanel;
|
|
pnFe: TPanel;
|
|
pnCo: TPanel;
|
|
pnY: TPanel;
|
|
pnNi: TPanel;
|
|
pnCu: TPanel;
|
|
pnLa: TPanel;
|
|
pnZn: TPanel;
|
|
pnCd: TPanel;
|
|
pnAg: TPanel;
|
|
pnPd: TPanel;
|
|
pnRh: TPanel;
|
|
pnRu: TPanel;
|
|
pnIr: TPanel;
|
|
pnPt: TPanel;
|
|
pnZr: TPanel;
|
|
pnAu: TPanel;
|
|
pnHg: TPanel;
|
|
pnRg: TPanel;
|
|
pnDs: TPanel;
|
|
pnMt: TPanel;
|
|
pnOs: TPanel;
|
|
pnHs: TPanel;
|
|
pnV: TPanel;
|
|
pnNb: TPanel;
|
|
pnHf: TPanel;
|
|
pnRf: TPanel;
|
|
pnCr: TPanel;
|
|
pnMo: TPanel;
|
|
pnSr: TPanel;
|
|
pnBa: TPanel;
|
|
pnRa: TPanel;
|
|
pnBe: TPanel;
|
|
pnNa: TPanel;
|
|
pnMg: TPanel;
|
|
pnK: TPanel;
|
|
pnCs: TPanel;
|
|
pnFr: TPanel;
|
|
pnRb: TPanel;
|
|
TabSheet1: TTabSheet;
|
|
TabSheet2: TTabSheet;
|
|
tsElecConf: TTabSheet;
|
|
tsAspectUse: TTabSheet;
|
|
tsElemDB: TTabSheet;
|
|
tsGlobalInfo: TTabSheet;
|
|
tsHistory: TTabSheet;
|
|
tsTable: TTabSheet;
|
|
tsList: TTabSheet;
|
|
procedure btnAddFilterClick(Sender: TObject);
|
|
procedure btnAddFilterSetClick(Sender: TObject);
|
|
procedure btnAddStateClick(Sender: TObject);
|
|
procedure btnChangeFilterClick(Sender: TObject);
|
|
procedure btnClearFilterSetClick(Sender: TObject);
|
|
procedure btnExitClick(Sender: TObject);
|
|
procedure btnFullRangeClick(Sender: TObject);
|
|
procedure btnMassCalcClick(Sender: TObject);
|
|
procedure btnOpenFilterSetClick(Sender: TObject);
|
|
procedure btnRemoveFilterClick(Sender: TObject);
|
|
procedure btnSaveFilterSetClick(Sender: TObject);
|
|
procedure btnWikipediaClick(Sender: TObject);
|
|
procedure cbChartApplyFiltersChange(Sender: TObject);
|
|
procedure cbFilterKindChange(Sender: TObject);
|
|
procedure cbListApplyFilterChange(Sender: TObject);
|
|
procedure cbShowUnknownChange(Sender: TObject);
|
|
procedure cbTableApplyFiltersChange(Sender: TObject);
|
|
procedure cbxChartLabelsChange(Sender: TObject);
|
|
procedure cbxInvertSortOrderChange(Sender: TObject);
|
|
procedure cbxLayoutChange(Sender: TObject);
|
|
procedure cbxSortChange(Sender: TObject);
|
|
procedure cbxXAxisChange(Sender: TObject);
|
|
procedure cbxYAxisChange(Sender: TObject);
|
|
procedure clbRangeClick(Sender: TObject);
|
|
procedure edRangeChange(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure lbListClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure btnAddClick(Sender: TObject);
|
|
procedure lbListDblClick(Sender: TObject);
|
|
procedure lvFiltersChange(Sender: TObject; Item: TListItem;
|
|
Change: TItemChange);
|
|
procedure lvFiltersClick(Sender: TObject);
|
|
procedure lvFiltersSelectItem(Sender: TObject; Item: TListItem;
|
|
Selected: Boolean);
|
|
procedure lvListKeyPress(Sender: TObject; var Key: char);
|
|
procedure lvListKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
|
procedure MenuItem5Click(Sender: TObject);
|
|
procedure mnuAboutClick(Sender: TObject);
|
|
procedure mnuConfigureClick(Sender: TObject);
|
|
procedure mnuDiscovererClick(Sender: TObject);
|
|
procedure mnuFullZoomClick(Sender: TObject);
|
|
procedure mnuHeapStatusClick(Sender: TObject);
|
|
procedure mnuOpenConsoleClick(Sender: TObject);
|
|
procedure mnuShowFilterListClick(Sender: TObject);
|
|
procedure pnElmClick(Sender: TObject);
|
|
procedure pnElmMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
|
procedure rbSortFirstChange(Sender: TObject);
|
|
procedure rbStateCelciusChange(Sender: TObject);
|
|
procedure rbStateKelvinChange(Sender: TObject);
|
|
procedure sedXEndChange(Sender: TObject);
|
|
procedure sedXStartChange(Sender: TObject);
|
|
procedure sedYEndChange(Sender: TObject);
|
|
procedure sedYStartChange(Sender: TObject);
|
|
procedure tsTableMouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
Y: Integer);
|
|
private
|
|
{ Déclarations privées }
|
|
ActiveLegend: TForm;
|
|
FLine: TLineSeries;
|
|
ElecDist: TElecDistDisplay;
|
|
CurrPanel: TPanel;
|
|
procedure SetColorBloc;
|
|
procedure SetLegendBloc;
|
|
procedure SetColorFamily;
|
|
procedure SetLegendFamily;
|
|
procedure SetColorMass;
|
|
procedure SetLegendMass;
|
|
procedure SetColorDisco;
|
|
procedure SetLegendDisco;
|
|
procedure SetColorMelting;
|
|
procedure SetLegendMelting;
|
|
procedure SetColorBoiling;
|
|
procedure SetLegendBoiling;
|
|
procedure SetColorElecAff;
|
|
procedure SetLegendElecAff;
|
|
procedure SetColorCovalentRd;
|
|
procedure SetLegendCovalentRd;
|
|
procedure SetColorVanDerWaals;
|
|
procedure SetLegendVanDerWaals;
|
|
procedure SetColorFIE;
|
|
procedure SetLegendFIE;
|
|
procedure SetColorSIE;
|
|
procedure SetLegendSIE;
|
|
procedure SetColorTIE;
|
|
procedure SetLegendTIE;
|
|
procedure SetColorElectroneg;
|
|
procedure SetLegendElectroneg;
|
|
procedure BringToFront(ASeries: TChartSeries);
|
|
procedure InitChart;
|
|
procedure DrawChartGraph;
|
|
procedure GraphAddXY(X, Y: Double; Index: integer);
|
|
procedure ChangeIconSet;
|
|
procedure ChangeColors;
|
|
procedure ChangePaths;
|
|
procedure ChangeBackup;
|
|
procedure UpdateFilterList;
|
|
public
|
|
{ Déclarations publiques }
|
|
procedure UpdateFilterView;
|
|
procedure FillList;
|
|
end;
|
|
|
|
var
|
|
TableForm: TTableForm;
|
|
|
|
implementation
|
|
|
|
uses
|
|
uUtils, frmAdd, frmAbout, frmMassCalculator, frmBlocLegend, frmFamilyLegend,
|
|
frmGradientLegend, TAChartUtils, uStrings, uIconManager, frmOptions, uCommon,
|
|
frmdiscovererlist, TATypes, uDebug;
|
|
|
|
|
|
procedure TTableForm.SetColorBloc;
|
|
var
|
|
I: integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
case ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].Block of
|
|
's': begin
|
|
(tsTable.Controls[I] as TPanel).Color := clSBlocBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clSBlocFG;
|
|
end;
|
|
'd': begin
|
|
(tsTable.Controls[I] as TPanel).Color := clDBlocBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clDBlocFG;
|
|
end;
|
|
'p': begin
|
|
(tsTable.Controls[I] as TPanel).Color := clPBlocBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clPBlocFG;
|
|
end;
|
|
'f': begin
|
|
(tsTable.Controls[I] as TPanel).Color := clFBlocBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clFBlocFG;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendBloc;
|
|
begin
|
|
if BlocLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := BlocLegendForm;
|
|
BlocLegendForm.Parent := gbLegend;
|
|
BlocLegendForm.BorderStyle := bsNone;
|
|
BlocLegendForm.Align := alClient;
|
|
BlocLegendForm.Visible := True;
|
|
BlocLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorFamily;
|
|
var
|
|
I: integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
case ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].Family of
|
|
atNonMetal: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clNonMetalBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clNonMetalFG;
|
|
end;
|
|
atNobleGas: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clNobleGasBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clNobleGasFG;
|
|
end;
|
|
atMetalloid: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clMetalloidBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clMetalloidFG;
|
|
end;
|
|
atHalogen: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clHalogenBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clHalogenFG;
|
|
end;
|
|
atAlkalieMetal: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clAlkalieMetalBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clAlkalieMetalFG;
|
|
end;
|
|
atAlkaline: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clAlkalineBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clAlkalineFG;
|
|
end;
|
|
atTransMetal: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clTransMetalBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clTransMetalFG;
|
|
end;
|
|
atRareEarth: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clRareEarthBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clRareEarthFG;
|
|
end;
|
|
atOtherMetal: begin
|
|
(tsTable.Controls[I] as TPanel).Color := clOtherMetalBG;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clOtherMetalFG;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendFamily;
|
|
begin
|
|
if LegendFamilyForm = nil then
|
|
Exit;
|
|
ActiveLegend := LegendFamilyForm;
|
|
LegendFamilyForm.Parent := gbLegend;
|
|
LegendFamilyForm.BorderStyle := bsNone;
|
|
LegendFamilyForm.Align := alClient;
|
|
LegendFamilyForm.Visible := True;
|
|
LegendFamilyForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorMass;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].Mass <> 0 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinMass, ElementsList.MaxMass,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].Mass,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendMass;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxMass;
|
|
GradientLegendForm.lbMin.Caption := rsMinMass;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsMassDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorDisco;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].DiscoYear <> 0 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinDiscoveryDate, ElementsList.MaxDiscoveryDate,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].DiscoYear,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendDisco;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxDate;
|
|
GradientLegendForm.lbMin.Caption := rsMinDate;
|
|
GradientLegendForm.lbUnknow.Caption := rsKnownFromAntiq;
|
|
GradientLegendForm.lbInfo.Caption := rsDateDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorMelting;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].MeltingPt <> 0 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinMeltingPoint, ElementsList.MaxMeltingPoint,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].MeltingPt,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendMelting;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxMeltingPt;
|
|
GradientLegendForm.lbMin.Caption := rsMinMeltingPt;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsMeltingPtDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorBoiling;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].BoilingPt <> 0 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinBoilingPoint, ElementsList.MaxBoilingPoint,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].BoilingPt,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendBoiling;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxBoilingPt;
|
|
GradientLegendForm.lbMin.Caption := rsMinBoilingPt;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsBoilingPtDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorElecAff;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinElectronicAffinity, ElementsList.MaxElectronicAffinity,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].ElecAffinity,
|
|
clGradientMin, clGradientMax);
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendElecAff;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxElecAffinity;
|
|
GradientLegendForm.lbMin.Caption := rsMinElecAffinity;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsElecAffinityDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorCovalentRd;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].CovalentRd <> 0 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinCovalentRadius, ElementsList.MaxCovalentRadius,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].CovalentRd,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendCovalentRd;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxCovalentRd;
|
|
GradientLegendForm.lbMin.Caption := rsMinCovalentRd;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsCovalentRdDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorVanDerWaals;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].VanDerWaalsRd <> 0 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinVanDerWaalsRadius, ElementsList.MaxVanDerWaalsRadius,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].VanDerWaalsRd,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendVanDerWaals;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxVanDerWaalsRd;
|
|
GradientLegendForm.lbMin.Caption := rsMinVanDerWaalsRd;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsVanDerWaalsRdDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorFIE;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].IonisationEnergy.First <> 0 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinFirstIonisationEnergy, ElementsList.MaxFirstIonisationEnergy,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].IonisationEnergy.First,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendFIE;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxFIE;
|
|
GradientLegendForm.lbMin.Caption := rsMinFIE;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsFIEDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorSIE;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].IonisationEnergy.Second <> 0 then
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].IonisationEnergy.Second <> -1 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinSecondIonisationEnergy, ElementsList.MaxSecondIonisationEnergy,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].IonisationEnergy.Second,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientNonApp
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendSIE;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := True;
|
|
GradientLegendForm.pnNonAppl.Visible := True;
|
|
GradientLegendForm.lbMax.Caption := rsMaxSIE;
|
|
GradientLegendForm.lbMin.Caption := rsMinSIE;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsSIEDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorTIE;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].IonisationEnergy.Third <> 0 then
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].IonisationEnergy.Third <> -1 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinThirdIonisationEnergy, ElementsList.MaxThirdIonisationEnergy,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].IonisationEnergy.Third,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientNonApp
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendTIE;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := True;
|
|
GradientLegendForm.pnNonAppl.Visible := True;
|
|
GradientLegendForm.lbMax.Caption := rsMaxTIE;
|
|
GradientLegendForm.lbMin.Caption := rsMinTIE;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsTIEDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.SetColorElectroneg;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[I] is TPanel) and
|
|
((tsTable.Controls[I] as TPanel).Tag <> 0) then
|
|
begin
|
|
if ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].Electroneg <> -1 then
|
|
(tsTable.Controls[I] as TPanel).Color := GetGradientColor(
|
|
ElementsList.MinElectronegativity, ElementsList.MaxElectronegativity,
|
|
ElementsList.Elements[(tsTable.Controls[I] as TPanel).Tag].Electroneg,
|
|
clGradientMin, clGradientMax)
|
|
else (tsTable.Controls[I] as TPanel).Color := clGradientUnknow;
|
|
(tsTable.Controls[I] as TPanel).Font.Color := clGradientText;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.SetLegendElectroneg;
|
|
begin
|
|
if GradientLegendForm = nil then
|
|
Exit;
|
|
ActiveLegend := GradientLegendForm;
|
|
GradientLegendForm.lbNonAppl.Visible := False;
|
|
GradientLegendForm.pnNonAppl.Visible := False;
|
|
GradientLegendForm.lbMax.Caption := rsMaxElectroneg;
|
|
GradientLegendForm.lbMin.Caption := rsMinElectroneg;
|
|
GradientLegendForm.lbUnknow.Caption := rsUnknowVal;
|
|
GradientLegendForm.lbInfo.Caption := rsElectronegDetails;
|
|
GradientLegendForm.Parent := gbLegend;
|
|
GradientLegendForm.BorderStyle := bsNone;
|
|
GradientLegendForm.Align := alClient;
|
|
GradientLegendForm.Visible := True;
|
|
GradientLegendForm.Show;
|
|
end;
|
|
|
|
procedure TTableForm.btnExitClick(Sender: TObject);
|
|
begin {Click on Close}
|
|
Application.Terminate;
|
|
end;
|
|
|
|
procedure TTableForm.btnAddFilterClick(Sender: TObject);
|
|
var
|
|
Flt: TFilter;
|
|
begin
|
|
case cbFilterKind.ItemIndex of
|
|
0: Flt.Kind := fkDate;
|
|
1: Flt.Kind := fkMass;
|
|
2: Flt.Kind := fkElectronicAffinity;
|
|
3: Flt.Kind := fkMeltingPoint;
|
|
4: Flt.Kind := fkBoilingPoint;
|
|
5: Flt.Kind := fkCovalentRadius;
|
|
6: flt.Kind := fkVanDerWaalsRadius;
|
|
7: Flt.Kind := fkFirstIonisationEnergy;
|
|
8: Flt.Kind := fkSecondIonisationEnergy;
|
|
9: Flt.Kind := fkThirdIonisationEnergy;
|
|
10: Flt.Kind := fkElectronegativity;
|
|
end;
|
|
Flt.DisplayUnknow := cbShowUnknown.Checked;
|
|
Flt.Max := sedFilterMax.Value;
|
|
Flt.Min := sedFilterMin.Value;
|
|
ElementsList.AddFilter(Flt);
|
|
UpdateFilterList;
|
|
end;
|
|
|
|
procedure TTableForm.btnAddFilterSetClick(Sender: TObject);
|
|
var
|
|
Cnt, I: integer;
|
|
Flt: TFilter;
|
|
begin
|
|
dlgOpen.DefaultExt := sFilterExt;
|
|
if dlgOpen.Execute then
|
|
begin
|
|
{$warning We should clear the list here if sender is btnOpenFilterset}
|
|
//if Sender = btnOpenFilterSet then //don't work... why?
|
|
IniPropStorage.IniFileName := dlgSave.FileName;
|
|
IniPropStorage.IniSection := 'FilterSet';
|
|
Cnt := IniPropStorage.ReadInteger('Count', 0);
|
|
if Cnt = 0 then
|
|
Exit; //probably invalid file triggering an error
|
|
for I := 0 to Cnt - 1 do
|
|
begin
|
|
case IniPropStorage.ReadInteger('Kind' + IntToStr(I), -1) of
|
|
0: Flt.Kind := fkDate;
|
|
1: Flt.Kind := fkMass;
|
|
2: Flt.Kind := fkElectronicAffinity;
|
|
3: Flt.Kind := fkMeltingPoint;
|
|
4: Flt.Kind := fkBoilingPoint;
|
|
5: Flt.Kind := fkCovalentRadius;
|
|
6: Flt.Kind := fkVanDerWaalsRadius;
|
|
7: Flt.Kind := fkFirstIonisationEnergy;
|
|
8: Flt.Kind := fkSecondIonisationEnergy;
|
|
9: Flt.Kind := fkThirdIonisationEnergy;
|
|
10: Flt.Kind := fkElectronegativity;
|
|
else
|
|
ShowMessage('Error at index ' + IntToStr(I)); //would be better to trigger an exception
|
|
end;
|
|
Flt.Min := StrToFloat(IniPropStorage.ReadString('Min' + IntToStr(I), '0'));
|
|
Flt.Max := StrToFloat(IniPropStorage.ReadString('Max' + IntToStr(I), '0'));
|
|
Flt.DisplayUnknow := IniPropStorage.ReadBoolean('DispUnknow' +
|
|
IntToStr(I), True);
|
|
ElementsList.AddFilter(Flt);
|
|
end;
|
|
UpdateFilterList;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.btnAddStateClick(Sender: TObject);
|
|
var
|
|
FltMelt: TFilter;
|
|
FltBoil: TFilter;
|
|
Temp: Double;
|
|
begin
|
|
FltMelt.Kind := fkMeltingPoint;
|
|
FltBoil.Kind := fkBoilingPoint;
|
|
FltMelt.Max := ElementsList.MaxMeltingPoint;
|
|
FltMelt.Min := ElementsList.MinMeltingPoint;
|
|
FltBoil.Max := ElementsList.MaxBoilingPoint;
|
|
FltBoil.Min := ElementsList.MinBoilingPoint;
|
|
FltMelt.DisplayUnknow := cbStateShowUnknown.Checked;
|
|
FltBoil.DisplayUnknow := cbStateShowUnknown.Checked;
|
|
if rbStateCelcius.Checked then
|
|
Temp := sedStateTemp.Value - 273.15
|
|
else Temp := sedStateTemp.Value;
|
|
case cbxState.ItemIndex of
|
|
0: begin //Gas
|
|
FltBoil.Min := Temp;
|
|
ElementsList.AddFilter(FltBoil);
|
|
end;
|
|
1: begin //Liquid
|
|
FltMelt.Min := Temp;
|
|
FltBoil.Max := Temp;
|
|
ElementsList.AddFilter(FltMelt);
|
|
ElementsList.AddFilter(FltBoil);
|
|
end;
|
|
2: begin //Solid
|
|
FltMelt.Max := Temp;
|
|
ElementsList.AddFilter(FltMelt);
|
|
end;
|
|
3: begin //Not gas
|
|
FltBoil.Max := Temp;
|
|
ElementsList.AddFilter(FltBoil);
|
|
end;
|
|
4: begin //Not liquid
|
|
FltMelt.Max := Temp;
|
|
FltBoil.Min := Temp;
|
|
ElementsList.AddFilter(FltMelt);
|
|
ElementsList.AddFilter(FltBoil);
|
|
end;
|
|
5: begin //Not solid
|
|
FltMelt.Max := Temp;
|
|
ElementsList.AddFilter(FltMelt);
|
|
end;
|
|
else
|
|
Exit; //strange error triggering an exception
|
|
end;
|
|
UpdateFilterList;
|
|
end;
|
|
|
|
procedure TTableForm.btnChangeFilterClick(Sender: TObject);
|
|
var
|
|
Flt: TFilter;
|
|
I: Integer;
|
|
begin
|
|
case cbFilterKind.ItemIndex of
|
|
0: Flt.Kind := fkDate;
|
|
1: Flt.Kind := fkMass;
|
|
2: Flt.Kind := fkElectronicAffinity;
|
|
3: Flt.Kind := fkMeltingPoint;
|
|
4: Flt.Kind := fkBoilingPoint;
|
|
5: Flt.Kind := fkCovalentRadius;
|
|
6: flt.Kind := fkVanDerWaalsRadius;
|
|
7: Flt.Kind := fkFirstIonisationEnergy;
|
|
8: Flt.Kind := fkSecondIonisationEnergy;
|
|
9: Flt.Kind := fkThirdIonisationEnergy;
|
|
10: Flt.Kind := fkElectronegativity;
|
|
end;
|
|
Flt.DisplayUnknow := cbShowUnknown.Checked;
|
|
Flt.Max := sedFilterMax.Value;
|
|
Flt.Min := sedFilterMin.Value;
|
|
for I := 0 to lvFilters.Items.Count - 1 do
|
|
if lvFilters.Items[I].Selected then
|
|
Break;
|
|
ElementsList.Filters[I] := Flt;
|
|
UpdateFilterList;
|
|
end;
|
|
|
|
procedure TTableForm.btnClearFilterSetClick(Sender: TObject);
|
|
var
|
|
I: integer;
|
|
begin
|
|
for I := 0 to ElementsList.FiltersCount - 1 do
|
|
ElementsList.RemoveFilter(I);
|
|
ElementsList.ClearFilters;
|
|
lvFilters.Items.Clear;
|
|
end;
|
|
|
|
procedure TTableForm.btnFullRangeClick(Sender: TObject);
|
|
var
|
|
I: byte;
|
|
begin
|
|
edRange.Text := '1-' + IntToStr(ElemNumber);
|
|
for I := 0 to clbRange.Count - 1 do
|
|
clbRange.Checked[I] := True;
|
|
edRangeChange(nil);
|
|
DrawChartGraph;
|
|
end;
|
|
|
|
procedure TTableForm.btnMassCalcClick(Sender: TObject);
|
|
begin
|
|
if MassCalcForm <> nil then
|
|
begin
|
|
MassCalcForm.Visible := not MassCalcForm.Visible;
|
|
MassCalcForm.BringToFront
|
|
end else
|
|
begin
|
|
MassCalcForm := TMassCalcForm.Create(Application);
|
|
MassCalcForm.Show;
|
|
end {if};
|
|
end;
|
|
|
|
procedure TTableForm.btnOpenFilterSetClick(Sender: TObject);
|
|
begin
|
|
btnClearFilterSetClick(Sender);
|
|
btnAddFilterSetClick(Sender);
|
|
end;
|
|
|
|
procedure TTableForm.btnRemoveFilterClick(Sender: TObject);
|
|
var
|
|
I: integer;
|
|
begin
|
|
for I := 0 to lvFilters.Items.Count - 1 do
|
|
if lvFilters.Items[I].Selected then
|
|
ElementsList.RemoveFilter(I);
|
|
UpdateFilterList;
|
|
end;
|
|
|
|
procedure TTableForm.btnSaveFilterSetClick(Sender: TObject);
|
|
var
|
|
I, K: integer;
|
|
begin
|
|
dlgSave.DefaultExt := sFilterExt;
|
|
if dlgSave.Execute then
|
|
begin
|
|
IniPropStorage.IniFileName := dlgSave.FileName;
|
|
IniPropStorage.IniSection := 'FilterSet';
|
|
IniPropStorage.WriteInteger('Count', ElementsList.FiltersCount);
|
|
for I := 0 to ElementsList.FiltersCount - 1 do
|
|
begin
|
|
case ElementsList.Filters[I].Kind of
|
|
fkDate: K := 0;
|
|
fkMass: K := 1;
|
|
fkElectronicAffinity: K := 2;
|
|
fkMeltingPoint: K := 3;
|
|
fkBoilingPoint: K := 4;
|
|
fkCovalentRadius: K := 5;
|
|
fkVanDerWaalsRadius: K := 6;
|
|
fkFirstIonisationEnergy: K := 7;
|
|
fkSecondIonisationEnergy: K := 8;
|
|
fkThirdIonisationEnergy: K := 9;
|
|
fkElectronegativity: K := 10;
|
|
end;
|
|
IniPropStorage.WriteInteger('Kind' + IntToStr(I), K);
|
|
IniPropStorage.WriteString('Min' + IntToStr(I),
|
|
FloatToStr(ElementsList.Filters[I].Min));
|
|
IniPropStorage.WriteString('Max' + IntToStr(I),
|
|
FloatToStr(ElementsList.Filters[I].Max));
|
|
IniPropStorage.WriteBoolean('DispUnknow' + IntToStr(I),
|
|
ElementsList.Filters[I].DisplayUnknow);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.btnWikipediaClick(Sender: TObject);
|
|
begin
|
|
if not OpenURL(ElementsList.Elements[GetListIndexFromView(lvList,
|
|
lvList.Selected.Index)].WikiLink) then
|
|
MessageDlg(rsError, erOpenUrl, mtError, [mbOK], '');
|
|
end;
|
|
|
|
procedure TTableForm.cbChartApplyFiltersChange(Sender: TObject);
|
|
begin
|
|
ElementsList.FilterGraph := cbChartApplyFilters.Checked;
|
|
if not cbChartApplyFilters.Checked then
|
|
begin
|
|
FreeAndNil(FLine);
|
|
DrawChartGraph;
|
|
end;
|
|
UpdateFilterView;
|
|
end;
|
|
|
|
procedure TTableForm.cbFilterKindChange(Sender: TObject);
|
|
begin
|
|
case cbFilterKind.ItemIndex of
|
|
0: begin
|
|
sedFilterMin.MinValue := ElementsList.MinDiscoveryDate;
|
|
sedFilterMin.MaxValue := ElementsList.MaxDiscoveryDate;
|
|
sedFilterMax.MinValue := ElementsList.MinDiscoveryDate;
|
|
sedFilterMax.MaxValue := ElementsList.MaxDiscoveryDate;
|
|
sedFilterMin.Value := ElementsList.MinDiscoveryDate;
|
|
sedFilterMax.Value := ElementsList.MaxDiscoveryDate;
|
|
end;
|
|
1: begin
|
|
sedFilterMin.MinValue := ElementsList.MinMass;
|
|
sedFilterMin.MaxValue := ElementsList.MaxMass;
|
|
sedFilterMax.MinValue := ElementsList.MinMass;
|
|
sedFilterMax.MaxValue := ElementsList.MaxMass;
|
|
sedFilterMin.Value := ElementsList.MinMass;
|
|
sedFilterMax.Value := ElementsList.MaxMass;
|
|
end;
|
|
2: begin
|
|
sedFilterMin.MinValue := ElementsList.MinElectronicAffinity;
|
|
sedFilterMin.MaxValue := ElementsList.MaxElectronicAffinity;
|
|
sedFilterMax.MinValue := ElementsList.MinElectronicAffinity;
|
|
sedFilterMax.MaxValue := ElementsList.MaxElectronicAffinity;
|
|
sedFilterMin.Value := ElementsList.MinElectronicAffinity;
|
|
sedFilterMax.Value := ElementsList.MaxElectronicAffinity;
|
|
end;
|
|
3: begin
|
|
sedFilterMin.MinValue := ElementsList.MinMeltingPoint;
|
|
sedFilterMin.MaxValue := ElementsList.MaxMeltingPoint;
|
|
sedFilterMax.MinValue := ElementsList.MinMeltingPoint;
|
|
sedFilterMax.MaxValue := ElementsList.MaxMeltingPoint;
|
|
sedFilterMin.Value := ElementsList.MinMeltingPoint;
|
|
sedFilterMax.Value := ElementsList.MaxMeltingPoint;
|
|
end;
|
|
4: begin
|
|
sedFilterMin.MinValue := ElementsList.MinBoilingPoint;
|
|
sedFilterMin.MaxValue := ElementsList.MaxBoilingPoint;
|
|
sedFilterMax.MinValue := ElementsList.MinBoilingPoint;
|
|
sedFilterMax.MaxValue := ElementsList.MaxBoilingPoint;
|
|
sedFilterMin.Value := ElementsList.MinBoilingPoint;
|
|
sedFilterMax.Value := ElementsList.MaxBoilingPoint;
|
|
end;
|
|
5: begin
|
|
sedFilterMin.MinValue := ElementsList.MinCovalentRadius;
|
|
sedFilterMin.MaxValue := ElementsList.MaxCovalentRadius;
|
|
sedFilterMax.MinValue := ElementsList.MinCovalentRadius;
|
|
sedFilterMax.MaxValue := ElementsList.MaxCovalentRadius;
|
|
sedFilterMin.Value := ElementsList.MinCovalentRadius;
|
|
sedFilterMax.Value := ElementsList.MaxCovalentRadius;
|
|
end;
|
|
6: begin
|
|
sedFilterMin.MinValue := ElementsList.MinVanDerWaalsRadius;
|
|
sedFilterMin.MaxValue := ElementsList.MaxVanDerWaalsRadius;
|
|
sedFilterMax.MinValue := ElementsList.MinVanDerWaalsRadius;
|
|
sedFilterMax.MaxValue := ElementsList.MaxVanDerWaalsRadius;
|
|
sedFilterMin.Value := ElementsList.MinVanDerWaalsRadius;
|
|
sedFilterMax.Value := ElementsList.MaxVanDerWaalsRadius;
|
|
end;
|
|
7: begin
|
|
sedFilterMin.MinValue := ElementsList.MinFirstIonisationEnergy;
|
|
sedFilterMin.MaxValue := ElementsList.MaxFirstIonisationEnergy;
|
|
sedFilterMax.MinValue := ElementsList.MinFirstIonisationEnergy;
|
|
sedFilterMax.MaxValue := ElementsList.MaxFirstIonisationEnergy;
|
|
sedFilterMin.Value := ElementsList.MinFirstIonisationEnergy;
|
|
sedFilterMax.Value := ElementsList.MaxFirstIonisationEnergy;
|
|
end;
|
|
8: begin
|
|
sedFilterMin.MinValue := ElementsList.MinSecondIonisationEnergy;
|
|
sedFilterMin.MaxValue := ElementsList.MaxSecondIonisationEnergy;
|
|
sedFilterMax.MinValue := ElementsList.MinSecondIonisationEnergy;
|
|
sedFilterMax.MaxValue := ElementsList.MaxSecondIonisationEnergy;
|
|
sedFilterMin.Value := ElementsList.MinSecondIonisationEnergy;
|
|
sedFilterMax.Value := ElementsList.MaxSecondIonisationEnergy;
|
|
end;
|
|
9: begin
|
|
sedFilterMin.MinValue := ElementsList.MinThirdIonisationEnergy;
|
|
sedFilterMin.MaxValue := ElementsList.MaxThirdIonisationEnergy;
|
|
sedFilterMax.MinValue := ElementsList.MinThirdIonisationEnergy;
|
|
sedFilterMax.MaxValue := ElementsList.MaxThirdIonisationEnergy;
|
|
sedFilterMin.Value := ElementsList.MinThirdIonisationEnergy;
|
|
sedFilterMax.Value := ElementsList.MaxThirdIonisationEnergy;
|
|
end;
|
|
10: begin
|
|
sedFilterMin.MinValue := ElementsList.MinElectronegativity;
|
|
sedFilterMin.MaxValue := ElementsList.MaxElectronegativity;
|
|
sedFilterMax.MinValue := ElementsList.MinElectronegativity;
|
|
sedFilterMax.MaxValue := ElementsList.MaxElectronegativity;
|
|
sedFilterMin.Value := ElementsList.MinElectronegativity;
|
|
sedFilterMax.Value := ElementsList.MaxElectronegativity;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.cbListApplyFilterChange(Sender: TObject);
|
|
begin
|
|
ElementsList.FilterList := cbListApplyFilter.Checked;
|
|
if not cbListApplyFilter.Checked then
|
|
FillList;
|
|
UpdateFilterView;
|
|
end;
|
|
|
|
procedure TTableForm.cbShowUnknownChange(Sender: TObject);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TTableForm.cbTableApplyFiltersChange(Sender: TObject);
|
|
begin
|
|
ElementsList.FilterTable := cbTableApplyFilters.Checked;
|
|
UpdateFilterView;
|
|
end;
|
|
|
|
procedure TTableForm.cbxChartLabelsChange(Sender: TObject);
|
|
begin
|
|
FreeAndNil(FLine);
|
|
DrawChartGraph;
|
|
end;
|
|
|
|
procedure TTableForm.cbxInvertSortOrderChange(Sender: TObject);
|
|
begin
|
|
ElementsList.SortUpToDown := cbxInvertSortOrder.Checked;
|
|
FillList;
|
|
end;
|
|
|
|
procedure TTableForm.cbxLayoutChange(Sender: TObject);
|
|
begin
|
|
case cbxLayout.ItemIndex of
|
|
0: SetColorBloc;
|
|
1: SetColorFamily;
|
|
2: SetColorMass;
|
|
3: SetColorDisco;
|
|
4: SetColorMelting;
|
|
5: SetColorBoiling;
|
|
6: SetColorElecAff;
|
|
7: SetColorCovalentRd;
|
|
8: SetColorVanDerWaals;
|
|
9: SetColorFIE;
|
|
10: SetColorSIE;
|
|
11: SetColorTIE;
|
|
12: SetColorElectroneg;
|
|
end {case};
|
|
if ActiveLegend <> nil then
|
|
begin
|
|
ActiveLegend.Visible := False;
|
|
ActiveLegend.Parent := nil;
|
|
end;
|
|
case cbxLayout.ItemIndex of
|
|
0: SetLegendBloc;
|
|
1: SetLegendFamily;
|
|
2: SetLegendMass;
|
|
3: SetLegendDisco;
|
|
4: SetLegendMelting;
|
|
5: SetLegendBoiling;
|
|
6: SetLegendElecAff;
|
|
7: SetLegendCovalentRd;
|
|
8: SetLegendVanDerWaals;
|
|
9: SetLegendFIE;
|
|
10: SetLegendSIE;
|
|
11: SetLegendTIE;
|
|
12: SetLegendElectroneg;
|
|
end {case};
|
|
end;
|
|
|
|
procedure TTableForm.cbxSortChange(Sender: TObject);
|
|
begin
|
|
PrintLnDbg('cbxSort changed to item index #' + IntToStr(cbxSort.ItemIndex), vlHigh);
|
|
case cbxSort.ItemIndex of
|
|
1: ElementsList.SortType := estName;
|
|
2: ElementsList.SortType := estSymbol;
|
|
3: ElementsList.SortType := estDiscoveryDate;
|
|
4: ElementsList.SortType := estMass;
|
|
5: ElementsList.SortType := estMeltingPoint;
|
|
6: ElementsList.SortType := estBoilingPoint;
|
|
7: ElementsList.SortType := estElectronicAffinity;
|
|
8: ElementsList.SortType := estCovalentRadius;
|
|
9: ElementsList.SortType := estVanDerWaalsRadius;
|
|
10: ElementsList.SortType := estFirstIonisationEnergy;
|
|
11: ElementsList.SortType := estSecondIonisationEnergy;
|
|
12: ElementsList.SortType := estThirdIonisationEnergy;
|
|
13: ElementsList.SortType := estElectronegativity;
|
|
else ElementsList.SortType := estNumber;
|
|
end;
|
|
FillList;
|
|
end;
|
|
|
|
procedure TTableForm.cbxXAxisChange(Sender: TObject);
|
|
begin
|
|
FreeAndNil(FLine);
|
|
case cbxXAxis.ItemIndex of
|
|
0: begin
|
|
lbMinX.Caption := '1';
|
|
lbMaxX.Caption := IntToStr(ElemNumber);
|
|
lbAverageX.Caption := FloatToStr((ElemNumber + 1) / 2);
|
|
lbUnitX.Caption := rsNone;
|
|
end;
|
|
1: begin
|
|
lbMinX.Caption := FloatToStr(ElementsList.MinMass);
|
|
lbMaxX.Caption := FloatToStr(ElementsList.MaxMass);
|
|
lbAverageX.Caption := FloatToStr((ElementsList.MinMass +
|
|
ElementsList.MaxMass) / 2);
|
|
lbUnitX.Caption := rsUgstrom;
|
|
end;
|
|
2: begin
|
|
lbMinX.Caption := FloatToStr(ElementsList.MinMeltingPoint);
|
|
lbMaxX.Caption := FloatToStr(ElementsList.MaxMeltingPoint);
|
|
lbAverageX.Caption := FloatToStr((ElementsList.MinMeltingPoint +
|
|
ElementsList.MaxMeltingPoint) / 2);
|
|
lbUnitX.Caption := rsKelvin;
|
|
end;
|
|
3: begin
|
|
lbMinX.Caption := FloatToStr(ElementsList.MinBoilingPoint);
|
|
lbMaxX.Caption := FloatToStr(ElementsList.MaxBoilingPoint);
|
|
lbAverageX.Caption := FloatToStr((ElementsList.MinBoilingPoint +
|
|
ElementsList.MaxBoilingPoint) / 2);
|
|
lbUnitX.Caption := rsKelvin;
|
|
end;
|
|
4: begin
|
|
lbMinX.Caption := FloatToStr(ElementsList.MinElectronicAffinity);
|
|
lbMaxX.Caption := FloatToStr(ElementsList.MaxElectronicAffinity);
|
|
lbAverageX.Caption := FloatToStr((ElementsList.MinElectronicAffinity +
|
|
ElementsList.MaxElectronicAffinity) / 2);
|
|
lbUnitX.Caption := rsElectroVolt;
|
|
end;
|
|
5: begin
|
|
lbMinX.Caption := IntToStr(ElementsList.MinCovalentRadius);
|
|
lbMaxX.Caption := IntToStr(ElementsList.MaxCovalentRadius);
|
|
lbAverageX.Caption := FloatToStr((ElementsList.MinCovalentRadius +
|
|
ElementsList.MaxCovalentRadius) / 2);
|
|
lbUnitX.Caption := rsPicoMeter;
|
|
end;
|
|
6: begin
|
|
lbMinX.Caption := IntToStr(ElementsList.MinVanDerWaalsRadius);
|
|
lbMaxX.Caption := IntToStr(ElementsList.MaxVanDerWaalsRadius);
|
|
lbAverageX.Caption := FloatToStr((ElementsList.MinVanDerWaalsRadius +
|
|
ElementsList.MaxVanDerWaalsRadius) / 2);
|
|
lbUnitX.Caption := rsPicoMeter;
|
|
end;
|
|
7: begin
|
|
lbMinX.Caption := FloatToStr(ElementsList.MinFirstIonisationEnergy);
|
|
lbMaxX.Caption := FloatToStr(ElementsList.MaxFirstIonisationEnergy);
|
|
lbAverageX.Caption := FloatToStr((ElementsList.MinFirstIonisationEnergy +
|
|
ElementsList.MaxFirstIonisationEnergy) / 2);
|
|
lbUnitX.Caption := rsKiloJouleByVolt;
|
|
end;
|
|
end;
|
|
DrawChartGraph;
|
|
end;
|
|
|
|
procedure TTableForm.cbxYAxisChange(Sender: TObject);
|
|
begin
|
|
FreeAndNil(FLine);
|
|
case cbxYAxis.ItemIndex of
|
|
0: begin
|
|
lbMinY.Caption := '1';
|
|
lbMaxY.Caption := IntToStr(ElemNumber);
|
|
lbAverageY.Caption := FloatToStr((ElemNumber + 1) / 2);
|
|
lbUnitY.Caption := rsNone;
|
|
end;
|
|
1: begin
|
|
lbMinY.Caption := FloatToStr(ElementsList.MinMass);
|
|
lbMaxY.Caption := FloatToStr(ElementsList.MaxMass);
|
|
lbAverageY.Caption := FloatToStr((ElementsList.MinMass +
|
|
ElementsList.MaxMass) / 2);
|
|
lbUnitY.Caption := rsUgstrom;
|
|
end;
|
|
2: begin
|
|
lbMinY.Caption := FloatToStr(ElementsList.MinMeltingPoint);
|
|
lbMaxY.Caption := FloatToStr(ElementsList.MaxMeltingPoint);
|
|
lbAverageY.Caption := FloatToStr((ElementsList.MinMeltingPoint +
|
|
ElementsList.MaxMeltingPoint) / 2);
|
|
lbUnitY.Caption := rsKelvin;
|
|
end;
|
|
3: begin
|
|
lbMinY.Caption := FloatToStr(ElementsList.MinBoilingPoint);
|
|
lbMaxY.Caption := FloatToStr(ElementsList.MaxBoilingPoint);
|
|
lbAverageY.Caption := FloatToStr((ElementsList.MinBoilingPoint +
|
|
ElementsList.MaxBoilingPoint) / 2);
|
|
lbUnitY.Caption := rsKelvin;
|
|
end;
|
|
4: begin
|
|
lbMinY.Caption := FloatToStr(ElementsList.MinElectronicAffinity);
|
|
lbMaxY.Caption := FloatToStr(ElementsList.MaxElectronicAffinity);
|
|
lbAverageY.Caption := FloatToStr((ElementsList.MinElectronicAffinity +
|
|
ElementsList.MaxElectronicAffinity) / 2);
|
|
lbUnitY.Caption := rsElectroVolt;
|
|
end;
|
|
5: begin
|
|
lbMinY.Caption := IntToStr(ElementsList.MinCovalentRadius);
|
|
lbMaxY.Caption := IntToStr(ElementsList.MaxCovalentRadius);
|
|
lbAverageY.Caption := FloatToStr((ElementsList.MinCovalentRadius +
|
|
ElementsList.MaxCovalentRadius) / 2);
|
|
lbUnitY.Caption := rsPicoMeter;
|
|
end;
|
|
6: begin
|
|
lbMinY.Caption := IntToStr(ElementsList.MinVanDerWaalsRadius);
|
|
lbMaxY.Caption := IntToStr(ElementsList.MaxVanDerWaalsRadius);
|
|
lbAverageY.Caption := FloatToStr((ElementsList.MinVanDerWaalsRadius +
|
|
ElementsList.MaxVanDerWaalsRadius) / 2);
|
|
lbUnitY.Caption := rsPicoMeter;
|
|
end;
|
|
7: begin
|
|
lbMinY.Caption := FloatToStr(ElementsList.MinFirstIonisationEnergy);
|
|
lbMaxY.Caption := FloatToStr(ElementsList.MaxFirstIonisationEnergy);
|
|
lbAverageY.Caption := FloatToStr((ElementsList.MinFirstIonisationEnergy +
|
|
ElementsList.MaxFirstIonisationEnergy) / 2);
|
|
lbUnitY.Caption := rsKiloJouleByVolt;
|
|
end;
|
|
end;
|
|
DrawChartGraph;
|
|
end;
|
|
|
|
procedure TTableForm.clbRangeClick(Sender: TObject);
|
|
begin
|
|
FreeAndNil(FLine);
|
|
DrawChartGraph;
|
|
end;
|
|
|
|
procedure TTableForm.edRangeChange(Sender: TObject);
|
|
begin
|
|
FreeAndNil(FLine);
|
|
if not SetRange(edRange.Text) then
|
|
FullRange;
|
|
DrawChartGraph;
|
|
end;
|
|
|
|
procedure TTableForm.FormShow(Sender: TObject);
|
|
begin
|
|
pnHighlight.Visible := False;
|
|
lbContextInfo.Visible := False;
|
|
//initializing display
|
|
PageControl1.ActivePage := tsTable;
|
|
BlocLegendForm := TBlocLegendForm.Create(Application);
|
|
LegendFamilyForm := TLegendFamilyForm.Create(Application);
|
|
GradientLegendForm := TGradientLegendForm.Create(Application);
|
|
//set min max values for SpinEdit components
|
|
UpdateFilterView;
|
|
//init graph system
|
|
cbxLayoutChange(nil);
|
|
cbxXAxisChange(nil);
|
|
cbxYAxisChange(nil);
|
|
btnFullRangeClick(nil);
|
|
InitBtnGlyphs(Self);
|
|
end;
|
|
|
|
procedure TTableForm.lbListClick(Sender: TObject);
|
|
var
|
|
I, J, ElemIndex, Err, P: integer;
|
|
begin
|
|
//initialization
|
|
//Writeln('Selcount = ', lvList.SelCount);
|
|
if lvList.SelCount < 1 then
|
|
begin
|
|
PrintLnDbg('*** frmTable.TTableFor.lbListClick: ERROR: no item selected ' +
|
|
'(this should not happen)!', vlLow);
|
|
btnAdd.Enabled := False;
|
|
btnWikipedia.Enabled := False;
|
|
lvList.OnDblClick := nil;
|
|
Exit;
|
|
end else
|
|
begin
|
|
btnAdd.Enabled := True;
|
|
pnSelected.Visible := True;
|
|
btnWikipedia.Enabled := True;
|
|
lvList.OnDblClick := @lbListDblClick;
|
|
end;
|
|
//getting the good atom index
|
|
for J := lvList.Items.Count - 1 downto 0 do
|
|
if lvList.Items[J].Selected then
|
|
begin
|
|
for I := 1 to ElemNumber do
|
|
if lvList.Items[J].Caption = IntToStr(ElementsList.Elements[I].Number) then
|
|
begin
|
|
PrintLnDbg('J = ' + IntToStr(J) + ' / I = ' + IntToStr(I) + ' / ' +
|
|
ElementsList.Elements[I].ShortName, vlFull);
|
|
ElemIndex := ElementsList.Elements[I].Number;
|
|
Break;
|
|
end; {if}
|
|
Break;
|
|
end; {if}
|
|
PrintLnDbg('Showing information on element at index #' + IntToStr(ElemIndex),
|
|
vlLow);
|
|
{showing informations}
|
|
case ElementsList.Elements[ElemIndex].Block of
|
|
's': begin
|
|
pnSelected.Color := clSBlocBG;
|
|
pnSelected.Font.Color := clSBlocFG;
|
|
lbPName1.Font.Color := clSBlocFG; //on windows colors are not properly herited at runtime
|
|
lbPAtNum1.Font.Color := clSBlocFG;
|
|
lbPMass1.Font.Color := clSBlocFG;
|
|
end;
|
|
'p': begin
|
|
pnSelected.Color := clPBlocBG;
|
|
pnSelected.Font.Color := clPBlocFG;
|
|
lbPName1.Font.Color := clPBlocFG; //on windows colors are not properly herited at runtime
|
|
lbPAtNum1.Font.Color := clPBlocFG;
|
|
lbPMass1.Font.Color := clPBlocFG;
|
|
end;
|
|
'f': begin
|
|
pnSelected.Color := clFBlocBG;
|
|
pnSelected.Font.Color := clFBlocFG;
|
|
lbPName1.Font.Color := clFBlocFG; //on windows colors are not properly herited at runtime
|
|
lbPAtNum1.Font.Color := clFBlocFG;
|
|
lbPMass1.Font.Color := clFBlocFG;
|
|
end;
|
|
'd': begin
|
|
pnSelected.Color := clDBlocBG;
|
|
pnSelected.Font.Color := clDBlocFG;
|
|
lbPName1.Font.Color := clDBlocFG; //on windows colors are not properly herited at runtime
|
|
lbPAtNum1.Font.Color := clDBlocFG;
|
|
lbPMass1.Font.Color := clDBlocFG;
|
|
end;
|
|
end;
|
|
case ElemIndex of
|
|
57..71 : lbName.Caption := ElementsList.Elements[ElemIndex].Name + rsLanthanids;
|
|
89..103: lbName.Caption := ElementsList.Elements[ElemIndex].Name + rsActinids;
|
|
else lbName.Caption := ElementsList.Elements[ElemIndex].Name;
|
|
end {case};
|
|
lbCASNumber.Caption := ElementsList.Elements[ElemIndex].CAS;
|
|
if ElementsList.Elements[ElemIndex].Radioactivity <> '' then
|
|
case ElementsList.Elements[ElemIndex].Radioactivity[Length(
|
|
ElementsList.Elements[ElemIndex].Radioactivity)] of
|
|
'y': lbRadioHalfLife.Caption := Copy(ElementsList.Elements[ElemIndex].Radioactivity,
|
|
1, Length(ElementsList.Elements[ElemIndex].Radioactivity) - 1) +
|
|
rsYears;
|
|
'd': lbRadioHalfLife.Caption := Copy(ElementsList.Elements[ElemIndex].Radioactivity,
|
|
1, Length(ElementsList.Elements[ElemIndex].Radioactivity) - 1) +
|
|
rsDays;
|
|
'h': lbRadioHalfLife.Caption := Copy(ElementsList.Elements[ElemIndex].Radioactivity,
|
|
1, Length(ElementsList.Elements[ElemIndex].Radioactivity) - 1) +
|
|
rsHours;
|
|
'm': lbRadioHalfLife.Caption := Copy(ElementsList.Elements[ElemIndex].Radioactivity,
|
|
1, Length(ElementsList.Elements[ElemIndex].Radioactivity) - 1) +
|
|
rsMins;
|
|
's': lbRadioHalfLife.Caption := Copy(ElementsList.Elements[ElemIndex].Radioactivity,
|
|
1, Length(ElementsList.Elements[ElemIndex].Radioactivity) - 1) +
|
|
rsSecs;
|
|
end {case}
|
|
else lbRadioHalfLife.Caption := rsNoRadioactivity;
|
|
if ElementsList.Elements[ElemIndex].Mass <> 0 then
|
|
lbMass.Caption := FloatToStr(ElementsList.Elements[ElemIndex].Mass) + ' u'
|
|
else lbMass.Caption := rsUnknown;
|
|
lbAtNumber.Caption := IntToStr(ElemIndex) + rsBlock +
|
|
ElementsList.Elements[ElemIndex].Block;
|
|
if ElementsList.Elements[ElemIndex].MeltingPt <> 0 then
|
|
lbMeltingPt.Caption := FloatToStr(ElementsList.Elements[ElemIndex].MeltingPt) +
|
|
' K, ' + FloatToStr(ElementsList.Elements[ElemIndex].MeltingPt - 273.15)
|
|
+ ' °C'
|
|
else lbMeltingPt.Caption := rsUnknown;
|
|
if ElementsList.Elements[ElemIndex].BoilingPt <> 0 then
|
|
lbBoilingPt.Caption := FloatToStr(ElementsList.Elements[ElemIndex].BoilingPt) +
|
|
' K, ' + FloatToStr(ElementsList.Elements[ElemIndex].BoilingPt - 273.15)
|
|
+ ' °C'
|
|
else lbBoilingPt.Caption := rsUnknown;
|
|
if ElementsList.Elements[ElemIndex].ElecAffinity <> -1 then
|
|
lbElecAff.Caption := FloatToStr(ElementsList.Elements[ElemIndex].ElecAffinity)
|
|
+ ' eV'
|
|
else lbElecAff.Caption := rsUnknown;
|
|
if ElementsList.Elements[ElemIndex].ElecConf <> '' then
|
|
lbElecConf.Caption := ElementsList.Elements[ElemIndex].ElecConf
|
|
else lbElecConf.Caption := rsUnknown;
|
|
if ElementsList.Elements[ElemIndex].CovalentRd <> 0 then
|
|
lbCovalentRd.Caption := IntToStr(ElementsList.Elements[ElemIndex].CovalentRd)
|
|
+ ' pm'
|
|
else lbCovalentRd.Caption := rsUnknown;
|
|
if ElementsList.Elements[ElemIndex].VanDerWaalsRd <> 0 then
|
|
lbVanDerWalsRd.Caption := IntToStr(ElementsList.Elements[ElemIndex].VanDerWaalsRd)
|
|
+ ' pm'
|
|
else lbVanDerWalsRd.Caption := rsUnknown;
|
|
if ElementsList.Elements[ElemIndex].IonisationEnergy.First <> 0 then
|
|
lbFirsIonisationEnergy.Caption := FloatToStr(ElementsList.Elements[ElemIndex].IonisationEnergy.First)
|
|
+ ' kJ/mol' + rsFirst
|
|
else lbFirsIonisationEnergy.Caption := rsUnknown + rsFirst;
|
|
if ElementsList.Elements[ElemIndex].IonisationEnergy.Second <> 0 then
|
|
if ElementsList.Elements[ElemIndex].IonisationEnergy.Second <> -1 then
|
|
lbSecondIonisationEnergy.Caption := FloatToStr(ElementsList.Elements[ElemIndex].IonisationEnergy.Second)
|
|
+ ' kJ/mol' + rsSecond
|
|
else lbSecondIonisationEnergy.Caption := rsImpossible + rsSecond
|
|
else lbSecondIonisationEnergy.Caption := rsUnknown + rsSecond;
|
|
if ElementsList.Elements[ElemIndex].IonisationEnergy.Third <> 0 then
|
|
if ElementsList.Elements[ElemIndex].IonisationEnergy.Third <> -1 then
|
|
lbThirdIonisationEnergy.Caption := FloatToStr(ElementsList.Elements[ElemIndex].IonisationEnergy.Third)
|
|
+ ' kJ/mol' + rsThird
|
|
else lbThirdIonisationEnergy.Caption := rsImpossible + rsThird
|
|
else lbThirdIonisationEnergy.Caption := rsUnknown + rsThird;
|
|
if ElementsList.Elements[ElemIndex].Electroneg <> -1 then
|
|
lbElectroneg.Caption := FloatToStr(ElementsList.Elements[ElemIndex].Electroneg) +
|
|
' ' + rsPaulingScale
|
|
else lbElectroneg.Caption := rsUnknown;
|
|
if ElementsList.Elements[ElemIndex].DiscoYear <> 0 then
|
|
if ElementsList.Elements[ElemIndex].Discoverer <> '' then
|
|
lbDiscovery.Caption := Format(rsDiscoInBy,
|
|
[ElementsList.Elements[ElemIndex].DiscoYear,
|
|
ElementsList.Elements[ElemIndex].Discoverer])
|
|
else
|
|
lbDiscovery.Caption := Format(rsDiscoInByUnknow,
|
|
[ElementsList.Elements[ElemIndex].DiscoYear])
|
|
else
|
|
lbDiscovery.Caption := rsDiscoAntiq;
|
|
lbEtimology.Caption := ElementsList.Elements[ElemIndex].Etymology;
|
|
if ElementsList.Elements[ElemIndex].Radioactivity <> '' then
|
|
lbNatRadio.Caption := rsYes
|
|
else lbNatRadio.Caption := rsNo;
|
|
case ElementsList.Elements[ElemIndex].Family of
|
|
atOtherMetal: lbFamily.Caption := rsOtherMetal;
|
|
atRareEarth: lbFamily.Caption := rsRareEarth;
|
|
atTransMetal: lbFamily.Caption := rsTransMetal;
|
|
atAlkaline: lbFamily.Caption := rsAlcaline;
|
|
atAlkalieMetal: lbFamily.Caption := rsAlkalieMetal;
|
|
atHalogen: lbFamily.Caption := rsHalogen;
|
|
atMetalloid: lbFamily.Caption := rsMetalloid;
|
|
atNobleGas: lbFamily.Caption := rsNobleGas;
|
|
atNonMetal: lbFamily.Caption := rsNonMetal;
|
|
else lbFamily.Caption := rsUnknown;
|
|
end {case};
|
|
ElecDist.ElecronicConf := lbElecConf.Caption;
|
|
lbExpandedElecConf.Caption := ElecDist.ExpandedElecConf;
|
|
if lbExpandedElecConf.Caption = '' then
|
|
lbExpandedElecConf.Caption := rsUnknoxElecDist;
|
|
lbPName1.Caption := ElementsList.Elements[ElemIndex].Name;
|
|
lbPAtNum1.Caption := IntToStr(ElementsList.Elements[ElemIndex].Number);
|
|
pnSelected.Caption := ElementsList.Elements[ElemIndex].ShortName;
|
|
lbPMass1.Caption := FloatToStr(ElementsList.Elements[ElemIndex].Mass) + ' u';
|
|
lbPAtNum1.Left := 47 - lbPAtNum1.Width;
|
|
lbPMass1.Left := 109 - lbPMass1.Width;
|
|
try
|
|
lbNopic.Visible := False;
|
|
imgAtom.Visible := True;
|
|
imgAtom.Picture.LoadFromFile(GetPicRessource(ElementsList.Elements[ElemIndex].ShortName));
|
|
except
|
|
imgAtom.Picture.Clear;
|
|
imgAtom.Visible := False;
|
|
lbNopic.Visible := True;
|
|
end;;
|
|
end;
|
|
|
|
procedure TTableForm.FormCreate(Sender: TObject);
|
|
var
|
|
I, J: Byte;
|
|
begin
|
|
ActiveLegend := nil;
|
|
btnChangeFilter.Enabled := False;
|
|
btnRemoveFilter.Enabled := False;
|
|
btnClearFilterSet.Enabled := False;
|
|
pnSelected.Visible := False;
|
|
pnSelected.ParentColor := False;
|
|
pnSelected.FullRepaint := True;
|
|
pnHighlight.FullRepaint := True;
|
|
pnHighlight.ParentColor := False;
|
|
PrintLnDbg('Filling list...', vlLow);
|
|
FillList;
|
|
{creating list}
|
|
PrintLnDbg('Initializing table...', vlLow);
|
|
for I := 1 to ElemNumber do
|
|
for J := 0 to tsTable.ControlCount - 1 do
|
|
if (tsTable.Controls[J] is TPanel) then
|
|
if (tsTable.Controls[J] as TPanel).Caption = ElementsList.Elements[I].ShortName then
|
|
(tsTable.Controls[J] as TPanel).Tag := I;
|
|
//load icons
|
|
PrintLnDbg('-- Loading icon set...', vlLow);
|
|
Inc(VerboseLevel);
|
|
LoadIconSet(sIconsBase, 'oxygen', is16x16);
|
|
MainMenu.Images := ilDefault;
|
|
PageControl2.TabIndex := 0;
|
|
PageControl1.TabIndex := 0;
|
|
ElecDist := TElecDistDisplay.Create(tsElecConf);
|
|
ElecDist.ElecronicConf := '';
|
|
cbFilterKindChange(nil);
|
|
end;
|
|
|
|
procedure TTableForm.FillList;
|
|
var
|
|
I: integer;
|
|
LI: TListItem;
|
|
begin
|
|
lvList.Clear;
|
|
case cbxSort.ItemIndex of
|
|
0, 1, 2: lvList.Columns[2].Caption := rsName;
|
|
3: lvList.Columns[2].Caption := rsDiscoveryDate;
|
|
4: lvList.Columns[2].Caption := rsMass;
|
|
5: lvList.Columns[2].Caption := rsMeltingPoint;
|
|
6: lvList.Columns[2].Caption := rsBoilingPoint;
|
|
7: lvList.Columns[2].Caption := rsElectronicAffinity;
|
|
8: lvList.Columns[2].Caption := rsCovalentRadius;
|
|
9: lvList.Columns[2].Caption := rsVanDerWaalsRadius;
|
|
10: lvList.Columns[2].Caption := rsFirstIonisationEnergy;
|
|
11: lvList.Columns[2].Caption := rsSecondIonisationEnergy;
|
|
12: lvList.Columns[2].Caption := rsThirdIonisationEnergy;
|
|
13: lvList.Columns[2].Caption := rsElectronegativity;
|
|
end;
|
|
btnAdd.Enabled := False;
|
|
for I := 1 to ElemNumber do
|
|
if (not cbListApplyFilter.Checked) or ElementsList.Filtered(I) then
|
|
begin
|
|
LI := lvList.Items.Add;
|
|
LI.Caption := IntToStr(ElementsList.SortedElements[I].Number);
|
|
LI.SubItems.Add(ElementsList.SortedElements[I].ShortName);
|
|
case cbxSort.ItemIndex of
|
|
0, 1, 2: LI.SubItems.Add(ElementsList.SortedElements[I].Name);
|
|
3: if ElementsList.SortedElements[I].DiscoYear <> 0 then
|
|
LI.SubItems.Add(IntToStr(ElementsList.SortedElements[I].DiscoYear))
|
|
else LI.SubItems.Add(rsKnownFromAntiq);
|
|
4: LI.SubItems.Add(FloatToStr(ElementsList.SortedElements[I].Mass));
|
|
5: if ElementsList.SortedElements[I].MeltingPt <> 0 then
|
|
LI.SubItems.Add(FloatToStr(ElementsList.SortedElements[I].MeltingPt))
|
|
else LI.SubItems.Add(rsUnknown);
|
|
6: if ElementsList.SortedElements[I].BoilingPt <> 0 then
|
|
LI.SubItems.Add(FloatToStr(ElementsList.SortedElements[I].BoilingPt))
|
|
else LI.SubItems.Add(rsUnknown);
|
|
7: LI.SubItems.Add(FloatToStr(ElementsList.SortedElements[I].ElecAffinity));
|
|
8: if ElementsList.SortedElements[I].CovalentRd <> 0 then
|
|
LI.SubItems.Add(IntToStr(ElementsList.SortedElements[I].CovalentRd))
|
|
else LI.SubItems.Add(rsUnknown);
|
|
9: if ElementsList.SortedElements[I].VanDerWaalsRd <> 0 then
|
|
LI.SubItems.Add(IntToStr(ElementsList.SortedElements[I].VanDerWaalsRd))
|
|
else LI.SubItems.Add(rsUnknown);
|
|
10: if ElementsList.SortedElements[I].IonisationEnergy.First <> 0 then
|
|
LI.SubItems.Add(FloatToStr(ElementsList.SortedElements[I].IonisationEnergy.First))
|
|
else LI.SubItems.Add(rsUnknown);
|
|
11: if ElementsList.SortedElements[I].IonisationEnergy.Second <> 0 then
|
|
if ElementsList.SortedElements[I].IonisationEnergy.Second <> -1 then
|
|
LI.SubItems.Add(FloatToStr(ElementsList.SortedElements[I].IonisationEnergy.Second))
|
|
else LI.SubItems.Add(rsImpossible)
|
|
else LI.SubItems.Add(rsUnknown);
|
|
12: if ElementsList.SortedElements[I].IonisationEnergy.Third <> 0 then
|
|
if ElementsList.SortedElements[I].IonisationEnergy.Third <> -1 then
|
|
LI.SubItems.Add(FloatToStr(ElementsList.SortedElements[I].IonisationEnergy.Third))
|
|
else LI.SubItems.Add(rsImpossible)
|
|
else LI.SubItems.Add(rsUnknown);
|
|
13: if ElementsList.SortedElements[I].Electroneg <> -1 then
|
|
LI.SubItems.Add(FloatToStr(ElementsList.SortedElements[I].Electroneg))
|
|
else LI.SubItems.Add(rsUnknown);
|
|
end;
|
|
end;
|
|
lvList.Column[0].Width := 50;
|
|
lvList.Column[1].Width := 50;
|
|
end;
|
|
|
|
procedure TTableForm.btnAddClick(Sender: TObject);
|
|
begin {Add button click}
|
|
with TAddForm.Create(Application) do
|
|
try
|
|
Label2.Caption := lvList.Selected.Caption;
|
|
Label4.Caption := Self.lbName.Caption;
|
|
ShowModal;
|
|
finally
|
|
Free;
|
|
end {try};
|
|
end;
|
|
|
|
procedure TTableForm.lbListDblClick(Sender: TObject);
|
|
begin
|
|
btnAddClick(Sender);
|
|
end;
|
|
|
|
procedure TTableForm.lvFiltersChange(Sender: TObject; Item: TListItem;
|
|
Change: TItemChange);
|
|
begin
|
|
btnClearFilterSet.Enabled := lvFilters.Items.Count > 0;
|
|
end;
|
|
|
|
procedure TTableForm.lvFiltersClick(Sender: TObject);
|
|
var
|
|
LI: TListItem;
|
|
I: integer;
|
|
begin
|
|
if ElementsList.FiltersCount <= 0 then
|
|
begin
|
|
btnRemoveFilter.Enabled := False;
|
|
btnClearFilterSet.Enabled := False;
|
|
Exit;
|
|
end else
|
|
btnClearFilterSet.Enabled := True;
|
|
for I := 0 to lvFilters.Items.Count - 1 do
|
|
if lvFilters.Items[I].Selected then
|
|
begin
|
|
LI := lvFilters.Items[I];
|
|
btnChangeFilter.Enabled := True;
|
|
btnRemoveFilter.Enabled := True;
|
|
Break;
|
|
end else
|
|
if I >= lvFilters.Items.Count - 1 then
|
|
begin
|
|
btnChangeFilter.Enabled := False;
|
|
btnRemoveFilter.Enabled := False;
|
|
end;
|
|
for I := 0 to cbFilterKind.Items.Count - 1 do
|
|
if LI.Caption = cbFilterKind.Items[I] then
|
|
cbFilterKind.ItemIndex := I;
|
|
case cbFilterKind.ItemIndex of
|
|
0: begin
|
|
sedFilterMin.MinValue := ElementsList.MinDiscoveryDate;
|
|
sedFilterMin.MaxValue := ElementsList.MaxDiscoveryDate;
|
|
sedFilterMax.MinValue := ElementsList.MinDiscoveryDate;
|
|
sedFilterMax.MaxValue := ElementsList.MaxDiscoveryDate;
|
|
end;
|
|
1: begin
|
|
sedFilterMin.MinValue := ElementsList.MinMass;
|
|
sedFilterMin.MaxValue := ElementsList.MaxMass;
|
|
sedFilterMax.MinValue := ElementsList.MinMass;
|
|
sedFilterMax.MaxValue := ElementsList.MaxMass;
|
|
end;
|
|
2: begin
|
|
sedFilterMin.MinValue := ElementsList.MinElectronicAffinity;
|
|
sedFilterMin.MaxValue := ElementsList.MaxElectronicAffinity;
|
|
sedFilterMax.MinValue := ElementsList.MinElectronicAffinity;
|
|
sedFilterMax.MaxValue := ElementsList.MaxElectronicAffinity;
|
|
end;
|
|
3: begin
|
|
sedFilterMin.MinValue := ElementsList.MinMeltingPoint;
|
|
sedFilterMin.MaxValue := ElementsList.MaxMeltingPoint;
|
|
sedFilterMax.MinValue := ElementsList.MinMeltingPoint;
|
|
sedFilterMax.MaxValue := ElementsList.MaxMeltingPoint;
|
|
end;
|
|
4: begin
|
|
sedFilterMin.MinValue := ElementsList.MinBoilingPoint;
|
|
sedFilterMin.MaxValue := ElementsList.MaxBoilingPoint;
|
|
sedFilterMax.MinValue := ElementsList.MinBoilingPoint;
|
|
sedFilterMax.MaxValue := ElementsList.MaxBoilingPoint;
|
|
end;
|
|
5: begin
|
|
sedFilterMin.MinValue := ElementsList.MinCovalentRadius;
|
|
sedFilterMin.MaxValue := ElementsList.MaxCovalentRadius;
|
|
sedFilterMax.MinValue := ElementsList.MinCovalentRadius;
|
|
sedFilterMax.MaxValue := ElementsList.MaxCovalentRadius;
|
|
end;
|
|
6: begin
|
|
sedFilterMin.MinValue := ElementsList.MinVanDerWaalsRadius;
|
|
sedFilterMin.MaxValue := ElementsList.MaxVanDerWaalsRadius;
|
|
sedFilterMax.MinValue := ElementsList.MinVanDerWaalsRadius;
|
|
sedFilterMax.MaxValue := ElementsList.MaxVanDerWaalsRadius;
|
|
end;
|
|
7: begin
|
|
sedFilterMin.MinValue := ElementsList.MinFirstIonisationEnergy;
|
|
sedFilterMin.MaxValue := ElementsList.MaxFirstIonisationEnergy;
|
|
sedFilterMax.MinValue := ElementsList.MinFirstIonisationEnergy;
|
|
sedFilterMax.MaxValue := ElementsList.MaxFirstIonisationEnergy;
|
|
end;
|
|
8: begin
|
|
sedFilterMin.MinValue := ElementsList.MinSecondIonisationEnergy;
|
|
sedFilterMin.MaxValue := ElementsList.MaxSecondIonisationEnergy;
|
|
sedFilterMax.MinValue := ElementsList.MinSecondIonisationEnergy;
|
|
sedFilterMax.MaxValue := ElementsList.MaxSecondIonisationEnergy;
|
|
end;
|
|
9: begin
|
|
sedFilterMin.MinValue := ElementsList.MinThirdIonisationEnergy;
|
|
sedFilterMin.MaxValue := ElementsList.MaxThirdIonisationEnergy;
|
|
sedFilterMax.MinValue := ElementsList.MinThirdIonisationEnergy;
|
|
sedFilterMax.MaxValue := ElementsList.MaxThirdIonisationEnergy;
|
|
end;
|
|
10: begin
|
|
sedFilterMin.MinValue := ElementsList.MinElectronegativity;
|
|
sedFilterMin.MaxValue := ElementsList.MaxElectronegativity;
|
|
sedFilterMax.MinValue := ElementsList.MinElectronegativity;
|
|
sedFilterMax.MaxValue := ElementsList.MaxElectronegativity;
|
|
end;
|
|
end;
|
|
sedFilterMin.Value := StrToFloat(LI.SubItems[0]);
|
|
sedFilterMax.Value := StrToFloat(LI.SubItems[1]);
|
|
cbShowUnknown.Checked := LI.SubItems[2] = rsYes;
|
|
end;
|
|
|
|
procedure TTableForm.lvFiltersSelectItem(Sender: TObject; Item: TListItem;
|
|
Selected: Boolean);
|
|
begin
|
|
btnRemoveFilter.Enabled := lvFilters.SelCount <> 0;
|
|
btnChangeFilter.Enabled := lvFilters.SelCount <> 0;
|
|
btnSaveFilterSet.Enabled := lvFilters.Items.Count <> 0;
|
|
end;
|
|
|
|
procedure TTableForm.lvListKeyPress(Sender: TObject; var Key: char);
|
|
begin
|
|
if Key = #13 then
|
|
lbListDblClick(Sender);
|
|
end;
|
|
|
|
procedure TTableForm.lvListKeyUp(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
var
|
|
Start, I, J: integer;
|
|
begin
|
|
inherited;
|
|
Start := 0;
|
|
if (Key <> 13) and (Key <> 10) then
|
|
begin
|
|
if (Key in [Ord('a')..Ord('z')]) or (Key in [Ord('A')..Ord('Z')]) then
|
|
begin
|
|
for I := 0 to lvList.Items.Count - 1 do
|
|
if lvList.Items[I].Selected then
|
|
begin
|
|
lvList.Items[I].Selected := False;
|
|
Start := I + 1;
|
|
end;
|
|
//ShowMessage('Start = ' + IntToStr(Start));
|
|
for I := 0 to lvList.Items.Count - 1 do
|
|
begin
|
|
if I + Start < lvList.Items.Count then
|
|
J := I + Start
|
|
else J := I + Start - lvList.Items.Count;
|
|
if Ord(lvList.Items[J].SubItems[0][1]) = Key then
|
|
begin
|
|
lvList.Items[J].Selected := True;
|
|
Break;
|
|
end;
|
|
end;
|
|
end;
|
|
lbListClick(Sender);
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.MenuItem5Click(Sender: TObject);
|
|
var
|
|
ini: TIniFile;
|
|
I: Integer;
|
|
begin
|
|
for I := 1 to ElemNumber do
|
|
begin
|
|
Ini := TIniFile.Create(GetProgramPrefix + 'datas/' +
|
|
ElementsList.Elements[I].ShortName + '.dat');
|
|
Ini.WriteInteger('Global', 'Number', ElementsList.Elements[I].Number);
|
|
Ini.WriteString('Global', 'ShortName', ElementsList.Elements[I].ShortName);
|
|
Ini.WriteString('Global', 'CAS', ElementsList.Elements[I].CAS);
|
|
Ini.WriteString('Global', 'Name', ElementsList.Elements[I].Name);
|
|
Ini.WriteString('Global', 'Bloc', ElementsList.Elements[I].Block);
|
|
Ini.WriteString('Global', 'Family', AFamilyStr[ElementsList.Elements[I].Family]);
|
|
Ini.WriteString('Global', 'Wikipedia', ElementsList.Elements[I].WikiLink);
|
|
Ini.WriteInteger('History', 'Year', ElementsList.Elements[I].DiscoYear);
|
|
Ini.WriteString('History', 'Discoverer', ElementsList.Elements[I].Discoverer);
|
|
Ini.WriteString('History', 'Etymology', ElementsList.Elements[I].Etymology);
|
|
Ini.WriteFloat('Values', 'MeltingPoint', ElementsList.Elements[I].MeltingPt);
|
|
Ini.WriteFloat('Values', 'BoilingPoint', ElementsList.Elements[I].BoilingPt);
|
|
Ini.WriteFloat('Values', 'Mass', ElementsList.Elements[I].Mass);
|
|
Ini.WriteInteger('Values', 'CovalentRadius', ElementsList.Elements[I].CovalentRd);
|
|
Ini.WriteInteger('Values', 'VanDerWaalsRadius', ElementsList.Elements[I].VanDerWaalsRd);
|
|
Ini.WriteFloat('Values', 'ElectronicAffinity', ElementsList.Elements[I].ElecAffinity);
|
|
Ini.WriteFloat('Values', 'Electronegativity', ElementsList.Elements[I].Electroneg);
|
|
Ini.WriteString('Values', 'ElectronicConf', ElementsList.Elements[I].ElecConf);
|
|
Ini.WriteFloat('Values', 'FirstIonistionEnergy', ElementsList.Elements[I].IonisationEnergy.First);
|
|
Ini.WriteFloat('Values', 'SecondIonisationEnergy', ElementsList.Elements[I].IonisationEnergy.Second);
|
|
Ini.WriteFloat('Values', 'ThirdIonisationEnergy', ElementsList.Elements[I].IonisationEnergy.Third);
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.mnuAboutClick(Sender: TObject);
|
|
begin
|
|
ShowAboutBox;
|
|
end;
|
|
|
|
procedure TTableForm.mnuConfigureClick(Sender: TObject);
|
|
begin
|
|
with TOptionsForm.Create(Application) do
|
|
try
|
|
if ShowModal = mrOK then
|
|
begin
|
|
if ChangedColors then
|
|
begin
|
|
clSBlocBG := pnSBloc.Color;
|
|
clSBlocFG := pnSBloc.Font.Color;
|
|
clPBlocBG := pnPBloc.Color;
|
|
clPBlocFG := pnPBloc.Font.Color;
|
|
clFBlocBG := pnFBloc.Color;
|
|
clFBlocFG := pnFBloc.Font.Color;
|
|
clDBlocBG := pnDBloc.Color;
|
|
clDBlocFG := pnDBloc.Font.Color;
|
|
ChangeColors;
|
|
end;
|
|
if ChangedBackup then
|
|
ChangeBackup;
|
|
if ChangedIconSet then
|
|
ChangeIconSet;
|
|
if ChangedPaths then
|
|
ChangePaths;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.mnuDiscovererClick(Sender: TObject);
|
|
begin
|
|
if (DiscovererListForm <> nil) and Assigned(DiscovererListForm) then
|
|
DiscovererListForm.Visible := not DiscovererListForm.Visible
|
|
else
|
|
begin
|
|
DiscovererListForm := TDiscovererListForm.Create(Application);
|
|
DiscovererListForm.Show;
|
|
end;
|
|
end;
|
|
|
|
procedure TTableForm.mnuFullZoomClick(Sender: TObject);
|
|
begin
|
|
Chart.Extent.UseXMax := False;
|
|
Chart.Extent.UseXMin := False;
|
|
Chart.Extent.UseYMax := False;
|
|
Chart.Extent.UseYMin := False;
|
|
Chart.ZoomFull;
|
|
end;
|
|
|
|
procedure TTableForm.mnuHeapStatusClick(Sender: TObject);
|
|
begin
|
|
//ShowMessage(GetHeapStatus);
|
|
end;
|
|
|
|
procedure TTableForm.mnuOpenConsoleClick(Sender: TObject);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TTableForm.mnuShowFilterListClick(Sender: TObject);
|
|
begin
|
|
ElementsList.DbgShowFilters;
|
|
end;
|
|
|
|
procedure TTableForm.pnElmClick(Sender: TObject);
|
|
var
|
|
N: integer;
|
|
begin
|
|
PageControl1.ActivePage := tsList;
|
|
for N := 0 to ElemNumber - 1 do
|
|
lvList.Items[N].Selected :=
|
|
lvList.Items[N].SubItems[0] = (Sender as TPanel).Caption;
|
|
lbListClick(Sender);
|
|
end;
|
|
|
|
procedure TTableForm.pnElmMouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
Y: Integer);
|
|
var
|
|
N, Err, P: integer;
|
|
begin
|
|
if (Sender is TPanel) then
|
|
begin
|
|
pnHighlight.Visible := True;
|
|
lbContextInfo.Visible := True;
|
|
end else
|
|
begin
|
|
pnHighlight.Visible := False;
|
|
lbContextInfo.Visible := False;
|
|
CurrPanel := nil;
|
|
Exit;
|
|
end {if};
|
|
if (Sender as TPanel) = CurrPanel then
|
|
Exit
|
|
else
|
|
CurrPanel := (Sender as TPanel);
|
|
pnHighlight.Caption := CurrPanel.Caption;
|
|
pnHighlight.Color := CurrPanel.Color;
|
|
pnHighlight.Font.Color := CurrPanel.Font.Color;
|
|
lbPName.Font.Color := CurrPanel.Font.Color;
|
|
lbPAtNum.Font.Color := CurrPanel.Font.Color;
|
|
lbPMass.Font.Color := CurrPanel.Font.Color;
|
|
for N := 1 to ElemNumber do
|
|
if CurrPanel.Caption = ElementsList.Elements[N].ShortName then
|
|
begin
|
|
lbPName.Caption := ElementsList.Elements[N].Name;
|
|
lbPAtNum.Caption := IntToStr(ElementsList.Elements[N].Number);
|
|
lbPMass.Caption := FloatToStr(ElementsList.Elements[N].Mass) + ' u';
|
|
lbPAtNum.Left := 47 - lbPAtNum.Width;
|
|
lbPMass.Left := 109 - lbPMass.Width;
|
|
case cbxLayout.ItemIndex of
|
|
0: lbContextInfo.Caption := '';
|
|
1: lbContextInfo.Caption := '';
|
|
2: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%n u', [ElementsList.Elements[N].Mass]);
|
|
3: if ElementsList.Elements[N].DiscoYear <> 0 then
|
|
lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%d', [ElementsList.Elements[N].DiscoYear])
|
|
else
|
|
lbContextInfo.Caption := rsKnownFromAntiq;
|
|
4: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%n K', [ElementsList.Elements[N].MeltingPt]);
|
|
5: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%n K', [ElementsList.Elements[N].BoilingPt]);
|
|
6: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%n eV', [ElementsList.Elements[N].ElecAffinity]);
|
|
7: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%d pm', [ElementsList.Elements[N].CovalentRd]);
|
|
8: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%d pm', [ElementsList.Elements[N].VanDerWaalsRd]);
|
|
9: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%n kJ/mol', [ElementsList.Elements[N].IonisationEnergy.First]);
|
|
10: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%n kJ/mol', [ElementsList.Elements[N].IonisationEnergy.Second]);
|
|
11: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%n kJ/mol', [ElementsList.Elements[N].IonisationEnergy.Third]);
|
|
12: lbContextInfo.Caption := Format(cbxLayout.Items[cbxLayout.ItemIndex] +
|
|
':' + LineBreak + '%n', [ElementsList.Elements[N].Electroneg]);
|
|
end;
|
|
try
|
|
imgAtom1.Picture.LoadFromFile(GetPicRessource(ElementsList.Elements[N].ShortName));
|
|
except
|
|
imgAtom1.Picture.Clear;
|
|
end;
|
|
end {if};
|
|
end;
|
|
|
|
procedure TTableForm.rbSortFirstChange(Sender: TObject);
|
|
begin
|
|
ElementsList.SortUnknowFirst := rbSortFirst.Checked;
|
|
FillList;
|
|
end;
|
|
|
|
procedure TTableForm.rbStateCelciusChange(Sender: TObject);
|
|
begin
|
|
if rbStateCelcius.Checked then
|
|
sedStateTemp.Value := sedStateTemp.Value + 273.15;
|
|
end;
|
|
|
|
procedure TTableForm.rbStateKelvinChange(Sender: TObject);
|
|
begin
|
|
if rbStateKelvin.Checked then
|
|
sedStateTemp.Value := sedStateTemp.Value - 273.15;
|
|
end;
|
|
|
|
procedure TTableForm.sedXEndChange(Sender: TObject);
|
|
begin
|
|
if sedXEnd.Value > sedXStart.Value then
|
|
begin
|
|
Chart.Extent.UseXMax := True;
|
|
Chart.Extent.XMax := sedXEnd.Value;
|
|
end else
|
|
if (Sender = sedXEnd) then
|
|
sedXEnd.Value := sedXStart.Value
|
|
else if (Sender = sedXStart) then
|
|
sedXStart.Value := sedXEnd.Value;
|
|
end;
|
|
|
|
procedure TTableForm.sedXStartChange(Sender: TObject);
|
|
begin
|
|
if sedXEnd.Value > sedXStart.Value then
|
|
begin
|
|
Chart.Extent.UseXMin := True;
|
|
Chart.Extent.XMin := sedXStart.Value;
|
|
end else
|
|
if (Sender = sedXEnd) then
|
|
sedXEnd.Value := sedXStart.Value
|
|
else if (Sender = sedXStart) then
|
|
sedXStart.Value := sedXEnd.Value;
|
|
end;
|
|
|
|
procedure TTableForm.sedYEndChange(Sender: TObject);
|
|
begin
|
|
if sedYEnd.Value > sedYStart.Value then
|
|
begin
|
|
Chart.Extent.UseYMax := True;
|
|
Chart.Extent.YMax := sedYEnd.Value;
|
|
end else
|
|
if (Sender = sedYEnd) then
|
|
sedYEnd.Value := sedYStart.Value
|
|
else if (Sender = sedYStart) then
|
|
sedYStart.Value := sedYEnd.Value;
|
|
end;
|
|
|
|
procedure TTableForm.sedYStartChange(Sender: TObject);
|
|
begin
|
|
if sedYEnd.Value > sedYStart.Value then
|
|
begin
|
|
Chart.Extent.UseYMin := True;
|
|
Chart.Extent.YMin := sedYStart.Value;
|
|
end else
|
|
if (Sender = sedYEnd) then
|
|
sedYEnd.Value := sedYStart.Value
|
|
else if (Sender = sedYStart) then
|
|
sedYStart.Value := sedYEnd.Value;
|
|
end;
|
|
|
|
procedure TTableForm.tsTableMouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
Y: Integer);
|
|
begin
|
|
pnHighlight.Visible := False;
|
|
lbContextInfo.Visible := False;
|
|
imgAtom1.Picture.Clear;
|
|
end;
|
|
|
|
procedure TTableForm.UpdateFilterView;
|
|
var
|
|
I: integer;
|
|
begin
|
|
//FillList;
|
|
for I := 0 to tsTable.ControlCount - 1 do
|
|
if tsTable.Controls[I] is TPanel then
|
|
if (tsTable.Controls[I] as TPanel).Tag <> 0 then
|
|
if ElementsList.FilterTable then
|
|
(tsTable.Controls[I] as TPanel).Visible :=
|
|
ElementsList.Filtered((tsTable.Controls[I] as TPanel).Tag)
|
|
else (tsTable.Controls[I] as TPanel).Visible := True;
|
|
if cbChartApplyFilters.Checked then
|
|
begin
|
|
FreeAndNil(FLine);
|
|
DrawChartGraph;
|
|
end;
|
|
if cbListApplyFilter.Checked then
|
|
FillList;
|
|
end;
|
|
|
|
procedure TTableForm.BringToFront(ASeries: TChartSeries);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to Chart.SeriesCount - 1 do
|
|
Chart.Series[I].ZPosition := Ord(Chart.Series[I] = ASeries);
|
|
end;
|
|
|
|
procedure TTableForm.GraphAddXY(X, Y: Double; Index: integer);
|
|
begin
|
|
if RangeArray[Index] then
|
|
if (clbRange.Checked[0] and (ElementsList.Elements[Index].Block = 's')) or
|
|
(clbRange.Checked[1] and (ElementsList.Elements[Index].Block = 'p')) or
|
|
(clbRange.Checked[2] and (ElementsList.Elements[Index].Block = 'd')) or
|
|
(clbRange.Checked[3] and (ElementsList.Elements[Index].Block = 'f')) or
|
|
(clbRange.Checked[4] and (ElementsList.Elements[Index].Family = atAlkaline)) or
|
|
(clbRange.Checked[5] and (ElementsList.Elements[Index].Family = atAlkalieMetal)) or
|
|
(clbRange.Checked[6] and (ElementsList.Elements[Index].Family = atTransMetal)) or
|
|
(clbRange.Checked[7] and (ElementsList.Elements[Index].Family = atOtherMetal)) or
|
|
(clbRange.Checked[8] and (ElementsList.Elements[Index].Family = atMetalloid)) or
|
|
(clbRange.Checked[9] and (ElementsList.Elements[Index].Family = atNonMetal)) or
|
|
(clbRange.Checked[10] and (ElementsList.Elements[Index].Family = atHalogen)) or
|
|
(clbRange.Checked[11] and (ElementsList.Elements[Index].Family = atNobleGas)) or
|
|
(clbRange.Checked[12] and (ElementsList.Elements[Index].Family = atRareEarth)) then
|
|
if cbxChartLabels.ItemIndex = 1 then
|
|
FLine.AddXY(X, Y, ElementsList.Elements[Index].Name, clLime)
|
|
else FLine.AddXY(X, Y, ElementsList.Elements[Index].ShortName, clLime);
|
|
end;
|
|
|
|
procedure TTableForm.InitChart;
|
|
begin
|
|
Chart.Extent.UseXMax := False;
|
|
Chart.Extent.UseXMin := False;
|
|
Chart.Extent.UseYMax := False;
|
|
Chart.Extent.UseYMin := False;
|
|
FLine := TLineSeries.Create(Chart);
|
|
FLine.ShowLines := cbDrawLines.Checked;
|
|
FLine.ShowPoints := True;
|
|
FLine.Pointer.Style := psRectangle;
|
|
FLine.Pointer.Brush.Color := clLime;
|
|
FLine.Title := 'line';
|
|
FLine.SeriesColor := clTeal;
|
|
case cbxChartLabels.ItemIndex of
|
|
0: FLine.Marks.Style := smsNone;
|
|
1: FLine.Marks.Style := smsLabel;
|
|
2: FLine.Marks.Style := smsLabel;
|
|
3: FLine.Marks.Style := smsXValue;
|
|
4: FLine.Marks.Style := smsValue;
|
|
end;
|
|
FLine.Marks.Frame.Color := clWhite;
|
|
FLine.Marks.LabelBrush.Color := clNavy;
|
|
Fline.Marks.LabelFont.Color := clWhite;
|
|
Chart.AddSeries(FLine);
|
|
end;
|
|
|
|
procedure TTableForm.DrawChartGraph;
|
|
var
|
|
I: integer;
|
|
begin
|
|
if FLine = nil then InitChart;
|
|
BringToFront(FLine);
|
|
for I := 1 to ElemNumber do
|
|
if (not cbChartApplyFilters.Checked) or ElementsList.Filtered(I) then
|
|
case cbxXAxis.ItemIndex of
|
|
0: case cbxYAxis.ItemIndex of
|
|
0: GraphAddXY(I, I, I);
|
|
1: GraphAddXY(I, ElementsList.Elements[I].Mass, I);
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then
|
|
GraphAddXY(I, ElementsList.Elements[I].MeltingPt, I);
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then
|
|
GraphAddXY(I, ElementsList.Elements[I].BoilingPt, I);
|
|
4: GraphAddXY(I, ElementsList.Elements[I].ElecAffinity, I);
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then
|
|
GraphAddXY(I, ElementsList.Elements[I].CovalentRd, I);
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then
|
|
GraphAddXY(I, ElementsList.Elements[I].VanDerWaalsRd, I);
|
|
7: if ElementsList. Elements[I].IonisationEnergy.First <> 0 then
|
|
GraphAddXY(I, ElementsList.Elements[I].IonisationEnergy.First, I);
|
|
end;
|
|
1: case cbxYAxis.ItemIndex of
|
|
0: GraphAddXY(ElementsList.Elements[I].Mass, I, I);
|
|
1: GraphAddXY(ElementsList.Elements[I].Mass,
|
|
ElementsList.Elements[I].Mass, I);
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].Mass,
|
|
ElementsList.Elements[I].MeltingPt, I);
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].Mass,
|
|
ElementsList.Elements[I].BoilingPt, I);
|
|
4: GraphAddXY(ElementsList.Elements[I].Mass,
|
|
ElementsList.Elements[I].ElecAffinity, I);
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].Mass,
|
|
ElementsList.Elements[I].CovalentRd, I);
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].Mass,
|
|
ElementsList.Elements[I].VanDerWaalsRd, I);
|
|
7: if ElementsList.Elements[I].IonisationEnergy.First <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].Mass,
|
|
ElementsList.Elements[I].IonisationEnergy.First, I);
|
|
end;
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then case cbxYAxis.ItemIndex of
|
|
0: GraphAddXY(ElementsList.Elements[I].MeltingPt, I, I);
|
|
1: GraphAddXY(ElementsList.Elements[I].MeltingPt,
|
|
ElementsList.Elements[I].Mass, I);
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].MeltingPt,
|
|
ElementsList.Elements[I].MeltingPt, I);
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].MeltingPt,
|
|
ElementsList.Elements[I].BoilingPt, I);
|
|
4: GraphAddXY(ElementsList.Elements[I].MeltingPt,
|
|
ElementsList.Elements[I].ElecAffinity, I);
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].MeltingPt,
|
|
ElementsList.Elements[I].CovalentRd, I);
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].MeltingPt,
|
|
ElementsList.Elements[I].VanDerWaalsRd, I);
|
|
7: if ElementsList.Elements[I].IonisationEnergy.First <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].MeltingPt,
|
|
ElementsList.Elements[I].IonisationEnergy.First, I);
|
|
end;
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then case cbxYAxis.ItemIndex of
|
|
0: GraphAddXY(ElementsList.Elements[I].BoilingPt, I, I);
|
|
1: GraphAddXY(ElementsList.Elements[I].BoilingPt,
|
|
ElementsList.Elements[I].Mass, I);
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].BoilingPt,
|
|
ElementsList.Elements[I].MeltingPt, I);
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].BoilingPt,
|
|
ElementsList.Elements[I].BoilingPt, I);
|
|
4: if ElementsList.Elements[I].ElecAffinity <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].BoilingPt,
|
|
ElementsList.Elements[I].ElecAffinity, I);
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].BoilingPt,
|
|
ElementsList.Elements[I].CovalentRd, I);
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].BoilingPt,
|
|
ElementsList.Elements[I].VanDerWaalsRd, I);
|
|
7: GraphAddXY(ElementsList.Elements[I].BoilingPt,
|
|
ElementsList.Elements[I].IonisationEnergy.First, I);
|
|
end;
|
|
4: case cbxYAxis.ItemIndex of
|
|
0: GraphAddXY(ElementsList.Elements[I].ElecAffinity, I, I);
|
|
1: GraphAddXY(ElementsList.Elements[I].ElecAffinity,
|
|
ElementsList.Elements[I].Mass, I);
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].ElecAffinity,
|
|
ElementsList.Elements[I].MeltingPt, I);
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].ElecAffinity,
|
|
ElementsList.Elements[I].BoilingPt, I);
|
|
4: GraphAddXY(ElementsList.Elements[I].ElecAffinity,
|
|
ElementsList.Elements[I].ElecAffinity, I);
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].ElecAffinity,
|
|
ElementsList.Elements[I].CovalentRd, I);
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].ElecAffinity,
|
|
ElementsList.Elements[I].VanDerWaalsRd, I);
|
|
7: if ElementsList.Elements[I].IonisationEnergy.First <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].ElecAffinity,
|
|
ElementsList.Elements[I].IonisationEnergy.First, I);
|
|
end;
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then case cbxYAxis.ItemIndex of
|
|
0: GraphAddXY(ElementsList.Elements[I].CovalentRd, I, I);
|
|
1: GraphAddXY(ElementsList.Elements[I].CovalentRd,
|
|
ElementsList.Elements[I].Mass, I);
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].CovalentRd,
|
|
ElementsList.Elements[I].MeltingPt, I);
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].CovalentRd,
|
|
ElementsList.Elements[I].BoilingPt, I);
|
|
4: GraphAddXY(ElementsList.Elements[I].CovalentRd,
|
|
ElementsList.Elements[I].ElecAffinity, I);
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].CovalentRd,
|
|
ElementsList.Elements[I].CovalentRd, I);
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].CovalentRd,
|
|
ElementsList.Elements[I].VanDerWaalsRd, I);
|
|
7: if ElementsList.Elements[I].IonisationEnergy.First <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].CovalentRd,
|
|
ElementsList.Elements[I].IonisationEnergy.First, I);
|
|
end;
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then case cbxYAxis.ItemIndex of
|
|
0: GraphAddXY(ElementsList.Elements[I].VanDerWaalsRd, I, I);
|
|
1: GraphAddXY(ElementsList.Elements[I].VanDerWaalsRd,
|
|
ElementsList.Elements[I].Mass, I);
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].VanDerWaalsRd,
|
|
ElementsList.Elements[I].MeltingPt, I);
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].VanDerWaalsRd,
|
|
ElementsList.Elements[I].BoilingPt, I);
|
|
4: GraphAddXY(ElementsList.Elements[I].VanDerWaalsRd,
|
|
ElementsList.Elements[I].ElecAffinity, I);
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].VanDerWaalsRd,
|
|
ElementsList.Elements[I].CovalentRd, I);
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].VanDerWaalsRd,
|
|
ElementsList.Elements[I].VanDerWaalsRd, I);
|
|
7: if ElementsList.Elements[I].IonisationEnergy.First <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].VanDerWaalsRd,
|
|
ElementsList.Elements[I].IonisationEnergy.First, I);
|
|
end;
|
|
7: if ElementsList.Elements[I].IonisationEnergy.First <> 0 then
|
|
case cbxYAxis.ItemIndex of
|
|
0: GraphAddXY(ElementsList.Elements[I].IonisationEnergy.First, I, I);
|
|
1: GraphAddXY(ElementsList.Elements[I].IonisationEnergy.First,
|
|
ElementsList.Elements[I].Mass, I);
|
|
2: if ElementsList.Elements[I].MeltingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].IonisationEnergy.First,
|
|
ElementsList.Elements[I].MeltingPt, I);
|
|
3: if ElementsList.Elements[I].BoilingPt <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].IonisationEnergy.First,
|
|
ElementsList.Elements[I].BoilingPt, I);
|
|
4: GraphAddXY(ElementsList.Elements[I].IonisationEnergy.First,
|
|
ElementsList.Elements[I].ElecAffinity, I);
|
|
5: if ElementsList.Elements[I].CovalentRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].IonisationEnergy.First,
|
|
ElementsList.Elements[I].CovalentRd, I);
|
|
6: if ElementsList.Elements[I].VanDerWaalsRd <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].IonisationEnergy.First,
|
|
ElementsList.Elements[I].VanDerWaalsRd, I);
|
|
7: if ElementsList.Elements[I].IonisationEnergy.First <> 0 then
|
|
GraphAddXY(ElementsList.Elements[I].IonisationEnergy.First,
|
|
ElementsList.Elements[I].IonisationEnergy.First, I);
|
|
end;
|
|
end;
|
|
{$warning Get the value when Extent.UseXXXX is set to false}
|
|
sedXStart.Value := Chart.Extent.XMin;
|
|
sedYStart.Value := Chart.Extent.YMin;
|
|
sedXEnd.Value := Chart.Extent.XMax;
|
|
sedYEnd.Value := Chart.Extent.YMax;
|
|
Chart.ZoomFull;
|
|
end;
|
|
|
|
procedure TTableForm.ChangeIconSet;
|
|
begin
|
|
{$warning TTableForm.ChangeIconSet: to be done}
|
|
end;
|
|
|
|
procedure TTableForm.ChangeColors;
|
|
begin
|
|
cbxLayoutChange(nil);
|
|
lbListClick(nil);
|
|
end;
|
|
|
|
procedure TTableForm.ChangeBackup;
|
|
begin
|
|
{$warning TTableForm.ChangeBackup: to be done}
|
|
end;
|
|
|
|
procedure TTableForm.ChangePaths;
|
|
begin
|
|
{$warning TTableForm.ChangePaths: to be done}
|
|
end;
|
|
|
|
procedure TTableForm.UpdateFilterList;
|
|
var
|
|
LI: TListItem;
|
|
I: Integer;
|
|
begin
|
|
lvFilters.Items.Clear;
|
|
for I := 0 to ElementsList.FiltersCount - 1 do
|
|
begin
|
|
LI := lvFilters.Items.Add;
|
|
case ElementsList.Filters[I].Kind of
|
|
fkDate: LI.Caption := cbFilterKind.Items[0];
|
|
fkElectronicAffinity: LI.Caption := cbFilterKind.Items[2];
|
|
fkMass: LI.Caption := cbFilterKind.Items[1];
|
|
fkMeltingPoint: LI.Caption := cbFilterKind.Items[3];
|
|
fkBoilingPoint: LI.Caption := cbFilterKind.Items[4];
|
|
fkCovalentRadius: LI.Caption := cbFilterKind.Items[5];
|
|
fkVanDerWaalsRadius: LI.Caption := cbFilterKind.Items[6];
|
|
fkFirstIonisationEnergy: LI.Caption := cbFilterKind.Items[7];
|
|
fkSecondIonisationEnergy: LI.Caption := cbFilterKind.Items[8];
|
|
fkThirdIonisationEnergy: LI.Caption := cbFilterKind.Items[9];
|
|
fkElectronegativity: LI.Caption := cbFilterKind.Items[10];
|
|
end;
|
|
LI.SubItems.Add(FloatToStr(ElementsList.Filters[I].Min));
|
|
LI.SubItems.Add(FloatToStr(ElementsList.Filters[I].Max));
|
|
if ElementsList.Filters[I].DisplayUnknow then
|
|
LI.SubItems.Add(rsYes)
|
|
else LI.SubItems.Add(rsNo);
|
|
end;
|
|
lvFiltersClick(nil);
|
|
end;
|
|
|
|
initialization
|
|
{$i frmtable.lrs}
|
|
end.
|