📄 ufrmsetoil.pas
字号:
unit uFrmSetOil;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, dxDockControl, dxDockPanel, ComCtrls, TbListView,IniFiles,
cxLookAndFeelPainters, StdCtrls, cxButtons,uFrmSetOilEdit;
type
TFrmSetOil = class(TForm)
dxDockSite1: TdxDockSite;
dxDockPanel2: TdxDockPanel;
dxLayoutDockSite1: TdxLayoutDockSite;
btnAdd: TcxButton;
btnDelete: TcxButton;
btnModify: TcxButton;
btnDefault: TcxButton;
lvPrice: TTbListView;
procedure lvPriceSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure btnAddClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnModifyClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure lvPriceCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
procedure btnDefaultClick(Sender: TObject);
private
{ Private declarations }
iDefaultIndex :Integer;
public
{ Public declarations }
function FindColumn(const AIndex:Integer;const AStr:String):TListItem;
procedure LoadFromIniFile();
procedure SaveOilToIniFile();
end;
var
FrmSetOil: TFrmSetOil;
procedure ExeSetOil();
implementation
{$R *.dfm}
procedure TFrmSetOil.lvPriceSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
btnDelete.Enabled := Selected;
btnModify.Enabled := Selected;
btnDefault.Enabled := Selected;
end;
procedure TFrmSetOil.btnAddClick(Sender: TObject);
var
frmEdit:TFrmSetOilEdit;
Item:TListItem;
i:Integer;
begin
frmEdit := TFrmSetOilEdit.Create(Self);
frmEdit.cboOilType.Clear();
for i := 0 to lvPrice.Items.Count -1 do
begin
frmEdit.cboOilType.Items.Add(lvPrice.Items[i].SubItems[0]);
end;
try
frmEdit.ShowModal();
if ((frmEdit.ModalResult = mrOk) and (frmEdit.Tag = 0)) then
begin
Item := lvPrice.Items.Add();
Item.Caption := IntToStr(lvPrice.Items.Count + 1);
Item.SubItems.Add(frmEdit.cboOilType.Text);
Item.SubItems.Add(frmEdit.txtOilPrice.Text);
Item.SubItems.Add(frmEdit.txtOilCost.Text);
end;
finally
frmEdit.Free();
end;
end;
procedure ExeSetOil();
var
frmOilManger:TFrmSetOil;
begin
frmOilManger := TFrmSetOil.Create(NIL);
frmOilManger.Show();
end;
procedure TFrmSetOil.btnDeleteClick(Sender: TObject);
begin
lvPrice.DeleteSelected;
end;
procedure TFrmSetOil.btnModifyClick(Sender: TObject);
var
frmEdit:TFrmSetOilEdit;
Item:TListItem;
begin
frmEdit := TFrmSetOilEdit.Create(Self);
if Assigned(lvPrice.Selected) then
begin
frmEdit.cboOilType.Text := lvPrice.Selected.SubItems[0];
end
else
Exit;
frmEdit.cboOilType.Enabled := False;
frmEdit.ShowModal();
if frmEdit.ModalResult = mrOk then
begin
Item := FindColumn(0,Trim(frmEdit.cboOilType.Text));
Item.Caption := IntToStr(lvPrice.Items.Count + 1);
Item.SubItems.Strings[1] := frmEdit.txtOilPrice.Text;
Item.SubItems.Strings[2] := frmEdit.txtOilCost.Text;
end;
end;
function TFrmSetOil.FindColumn(const AIndex: Integer;
const AStr: String): TListItem;
var
i:Integer;
begin
Result := NIL;
for i := 0 to lvPrice.Items.Count -1 do
begin
if (lvPrice.Items[i].SubItems[AIndex] = AStr) then
begin
Result := lvPrice.Items[i];
Exit;
end;
end;
end;
procedure TFrmSetOil.LoadFromIniFile();
var
IniFile: TIniFile;
sAppPath: string;
sIniFileName: string;
i,iCount:Integer;
sName:String;
iPrice,iConsume:Double;
Item:TListItem;
begin
sIniFileName:= ChangeFileExt(Application.ExeName, '.ini');
sAppPath:= ExtractFilePath(Application.ExeName);
IniFile:= TIniFile.Create(sIniFileName);
try
iCount := IniFile.ReadInteger('Oil','Count',0);
iDefaultIndex := IniFile.ReadInteger('Oil','Default',0);
lvPrice.Items.Clear();
for i := 1 to iCount do
begin
sName := IniFile.ReadString('Oil',Format('Oil%d_Name',[i]),'');
iPrice := IniFile.ReadFloat('Oil',Format('Oil%d_Price',[i]),0.0);
iConsume := IniFile.ReadFloat('Oil',Format('Oil%d_Consume',[i]),0.0);
if ((sName <> '') and (iPrice<>0.0)) then
begin
Item := lvPrice.Items.Add();
Item.Caption := IntToStr(i) ;
Item.SubItems.Add(sName);
Item.SubItems.Add(FloatToStr(iPrice));
Item.SubItems.Add(FloatToStr(iConsume));
end;
end;
finally
iniFile.Free();
end;
end;
procedure TFrmSetOil.SaveOilToIniFile();
var
IniFile: TIniFile;
sAppPath: string;
sIniFileName: string;
i,iCount:Integer;
sName:String;
iPrice,iConsume:Double;
Item:TListItem;
begin
sIniFileName:= ChangeFileExt(Application.ExeName, '.ini');
sAppPath:= ExtractFilePath(Application.ExeName);
IniFile:= TIniFile.Create(sIniFileName);
iCount := lvPrice.Items.Count;
IniFile.WriteInteger('Oil','Count',iCount);
IniFile.WriteInteger('Oil','Default',iDefaultIndex);
try
for i := 0 to iCount -1 do
begin
IniFile.WriteString('Oil',Format('Oil%d_Name',[i + 1]),lvPrice.Items[i].SubItems[0]);
IniFile.WriteFloat('Oil',Format('Oil%d_Price',[i + 1]),StrToFloat(lvPrice.Items[i].SubItems[1]));
IniFile.WriteFloat('Oil',Format('Oil%d_Consume',[i + 1]),StrToFloat(lvPrice.Items[i].SubItems[2]));
end;
finally
iniFile.Free();
end;
end;
procedure TFrmSetOil.FormCreate(Sender: TObject);
begin
LoadFromIniFile();
end;
procedure TFrmSetOil.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SaveOilToIniFile();
end;
procedure TFrmSetOil.lvPriceCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Item.Index = iDefaultIndex - 1 then
begin
Sender.Canvas.Brush.Color := clInactiveCaptionText;
Sender.Canvas.Font.Style := [fsBold];
end
else
begin
Sender.Canvas.Brush.Color := clWhite;
Sender.Canvas.Font.Style := [];
end;
end;
procedure TFrmSetOil.btnDefaultClick(Sender: TObject);
begin
iDefaultIndex := lvPrice.Selected.Index + 1;
lvPrice.Refresh();
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -