📄 moduler.pas
字号:
unit Moduler;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, DBChart, Buttons,
StdCtrls, ImgList;
type
TfrmModuler = class(TForm)
DataListView: TListView;
UserChart: TChart;
Panel1: TPanel;
Bevel1: TBevel;
Image1: TImage;
IDLab: TLabel;
NAMELab: TLabel;
ExitBtn: TSpeedButton;
PrintBtn: TSpeedButton;
FastBtn: TSpeedButton;
PointBtn: TSpeedButton;
Bevel2: TBevel;
Bevel3: TBevel;
Series2: TPointSeries;
Series1: TBarSeries;
labChart: TLabel;
Min_E: TEdit;
Bevel4: TBevel;
imgSaveBtn: TSpeedButton;
imgDotBtn: TSpeedButton;
ImageList1: TImageList;
PanelCount: TPanel;
Label1: TLabel;
InitialCB: TComboBox;
Label2: TLabel;
PreviousCB: TComboBox;
Label3: TLabel;
labCount: TLabel;
SpeedButton1: TSpeedButton;
procedure BitBtn1Click(Sender: TObject);
procedure DataListViewCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure PointBtnClick(Sender: TObject);
procedure FastBtnClick(Sender: TObject);
procedure ExitBtnClick(Sender: TObject);
procedure PrintBtnClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure DataListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmModuler: TfrmModuler;
implementation
uses DM, Global, Err, Promot, Report, frmcomsum;
{$R *.DFM}
procedure TfrmModuler.BitBtn1Click(Sender: TObject);
begin
UserChart.Series[0].Active := FALSE;
UserChart.Series[1].Active := TRUE;
end;
procedure TfrmModuler.DataListViewCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
begin
Compare := CompareText(Item1.SubItems[4],Item2.SubItems[4]);
end;
procedure TfrmModuler.PointBtnClick(Sender: TObject);
var
Consumption: real;
Pcolor: TColor;
I: Integer;
begin
//Control chart
UserChart.SeriesList[0].clear;
UserChart.SeriesList[1].Active := False;
UserChart.SeriesList[0].Active := True;
UserChart.BottomAxis.Maximum := DataListView.Items.Count;
if ChartFlag = _WASTAGE then
begin
//Draw chart
with DataListView do
for I := 0 to Items.Count - 1 do
begin
if Items[I].SubItems.Strings[4] <> '' then
begin
//Normal display, Green
Pcolor := clGreen;
if Items[I].SubItems.Strings[5]<>'' then Consumption := StrToFloat(Items[I].SubItems.Strings[5]);
end
else
begin
//Haven't total consumption
Pcolor := clRed;
Consumption := 0;
end;
frmModuler.UserChart.SeriesList[0].Add(Consumption, '', Pcolor);
end;
exit;
end;
//if ChartFlag = _TOTALPOWER then exit;
//Draw chart
with DataListView do
for I := 0 to Items.Count - 1 do
begin
Consumption := StrToFloat(Items[I].SubItems.Strings[2]);
//Normal display, Green
Pcolor := clGreen;
if (Consumption <= StrToFloat(Min_E.Text)) and (chartFlag <> _TOTALPOWER) then
begin
//<= Minimum Consumption
Pcolor := clRed;
Items[I].SubItems.Strings[7] := '*';
Items[I].SubItems.Strings[8] := '用电量小于最小用电量';
end;
frmModuler.UserChart.SeriesList[0].Add(Consumption, '', Pcolor);
end;
end;
procedure TfrmModuler.FastBtnClick(Sender: TObject);
var
Consumption: real;
Pcolor: TColor;
I: Integer;
Order, TimeStr: String;
begin
if ChartFlag = _WASTAGE then
begin
if DataListView.SelCount = 0 then
begin
WarnAbout.Hide;
WarnAbout.Promot.Caption := '无记录被选中!';
WarnAbout.ShowModal;
exit;
end;
TimeStr := DataListView.Items[DataListView.Selected.index].SubItems.Strings[0];
Order := DataListView.Items[DataListView.Selected.index].Caption;
DM1.TimeDB.Filter := 'DNO = ' + '''' + DNOstr + '''' + ' and RDT = ' + '''' + TimeStr + '''';
if not DM1.TimeDB.Eof then
begin
frmPromot.Hide;
frmPromot.Promot.Caption := '添加第[' + Order + '] 总供电量?';
if frmPromot.ShowModal <> mrOK then exit;
end
else
exit;
//Write Wastage
try
if length(trim(Min_E.Text))=0 then
begin
frmPromot.Hide;
frmPromot.Promot.Caption := '请输入最小用电量?';
if frmPromot.ShowModal <> mrOK then exit;
exit;
end;
DM1.TimeDB.Edit;
DM1.TimeDB.FieldByName('WASTAGE').AsString := Min_E.Text;
DM1.TimeDB.Post;
DM1.TimeDB.FlushBuffers ;
dm1.TimeDB.Refresh ;
with DataListView do
begin
Items[Selected.index].SubItems.Strings[4] := Min_E.Text;
Consumption := StrToFloat(Items[Selected.index].SubItems.Strings[3]);
if (Consumption <> 0) and (DM1.TimeDB.FieldByname('WASTAGE').asFloat<> 0) then
begin
Consumption := ((DM1.TimeDB.FieldByname('WASTAGE').asFloat - Consumption) / DM1.TimeDB.FieldByname('WASTAGE').asFloat) * 100;
Items[Selected.index].SubItems.Strings[5] := Trim(Format('%2f',[Consumption]));
end;
frmModuler.PointBtn.Click;
end;
except
exit
end;
exit;
end;
if ChartFlag = _TOTALPOWER then exit;
//Control chart
UserChart.SeriesList[1].clear;
UserChart.SeriesList[0].Active := False;
UserChart.SeriesList[1].Active := True;
UserChart.BottomAxis.Maximum := DataListView.Items.Count;
//Draw chart
with DataListView do
for I := 0 to Items.Count - 1 do
begin
Consumption := StrToFloat(Items[I].SubItems.Strings[2]);
//Normal display, Green
Pcolor := clGreen;
if (Consumption <= StrToFloat(Min_E.Text)) and (ChartFlag <> _TOTALPOWER) then
begin
//<= Minimum Comsumption
Pcolor := clRed;
Items[I].SubItems.Strings[7] := '*';
Items[I].SubItems.Strings[8] := '用电量为零';
end;
frmModuler.UserChart.SeriesList[1].Add(Consumption, '', Pcolor);
end;
end;
procedure TfrmModuler.ExitBtnClick(Sender: TObject);
begin
Close;
end;
procedure TfrmModuler.PrintBtnClick(Sender: TObject);
begin
//UserChart.Print;
frmconsumer.Query1.ParamByName('ParDNO').AsString := DNOstr;
frmconsumer.Query1.ParamByName('Paruno').AsString := unostr;
frmconsumer.Query1.Close;
frmconsumer.Query1.Prepare;
frmconsumer.Query1.Open;
frmconsumer.QuickRep1.Preview;
end;
procedure TfrmModuler.FormResize(Sender: TObject);
begin
Panel1.Width := frmModuler.Width;
end;
procedure TfrmModuler.DataListViewSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
begin
if Selected = FALSE then exit;
if ChartFlag <> _WASTAGE then exit;
Min_E.Text := '';
with DataListView do
DM1.TimeDB.Filter := 'DNO = ' + '''' + DNOstr + '''' + ' and RDT = ' + '''' + Items[Selected.index].SubItems.Strings[0] + '''';
if not DM1.TimeDB.Eof then
Min_E.Text := DM1.timedb.FieldByname('WASTAGE').AsString;
end;
procedure TfrmModuler.SpeedButton1Click(Sender: TObject);
var
CurPower, PrePower: Real;
I : Integer;
FindF: Boolean;
begin
if ChartFlag = _WASTAGE then exit;
if ChartFlag = _TOTALPOWER then exit;
FindF := FALSE;
for I := 0 to DataListView.Items.Count - 1 do
DataListView.Items[I].SubItems.Strings[9] := '';
with DataListView do
for I := 0 to Items.Count - 1 do
begin
if InitialCB.Text = Items[I].SubItems.Strings[6] then
begin
curPower := StrToFloat(Items[I].SubItems.Strings[ChartFlag]);
Items[I].SubItems.Strings[9] := 'Up';
FindF := TRUE;
break;
end;
end;
if FindF = FALSE then
begin
WarnAbout.Hide;
WarnAbout.Promot.Caption := '本次抄表时间格式错误!';
WarnAbout.ShowModal;
exit;
end;
FindF := FALSE;
with DataListView do
for I := 0 to Items.Count - 1 do
begin
if PreviousCB.Text = Items[I].SubItems.Strings[6] then
begin
PrePower := StrToFloat(Items[I].SubItems.Strings[ChartFlag]);
Items[I].SubItems.Strings[9] := 'Down';
FindF := TRUE;
break;
end;
end;
if FindF = FALSE then
begin
WarnAbout.Hide;
WarnAbout.Promot.Caption := '上次抄表时间格式错误!';
WarnAbout.ShowModal;
exit;
end;
labCount.Caption := Trim(Format('%8.2f', [CurPower - PrePower]));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -