📄 mainform.pas
字号:
unit MainForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ActiveX, AxCtrls, ComObj;
type
TfrmMain = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
N1: TMenuItem;
Gas1: TMenuItem;
Oil1: TMenuItem;
Edit1: TMenuItem;
CarInformation1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Gas1Click(Sender: TObject);
procedure Oil1Click(Sender: TObject);
procedure CarInformation1Click(Sender: TObject);
private
FRootStorage: IStorage;
FCarName: string;
FYear: Integer;
function ActivateForm(ACaption: string): Boolean;
{ Private declarations }
public
{ Public declarations }
property RootStorage: IStorage read FRootStorage;
end;
var
frmMain: TfrmMain;
implementation
uses GasForm, OilForm, CarInfoForm;
{$R *.DFM}
procedure TfrmMain.FormCreate(Sender: TObject);
var
stm: IStream;
OS: TOleStream;
Reader: TReader;
begin
if not SUCCEEDED(StgOpenStorage('CARS.CAR', nil,
STGM_READWRITE or STGM_SHARE_EXCLUSIVE,
nil, 0, FRootStorage)) then
OleCheck(StgCreateDocFile('CARS.CAR',
STGM_CREATE or STGM_READWRITE or STGM_SHARE_EXCLUSIVE,
0, FRootStorage));
if SUCCEEDED(FRootStorage.OpenStream('Info', nil,
STGM_READ or STGM_SHARE_EXCLUSIVE, 0, stm)) then begin
OS := TOleStream.Create(stm);
try
Reader := TReader.Create(OS, 1024);
try
FCarName := Reader.ReadString;
FYear := Reader.ReadInteger;
finally
Reader.Free;
end;
finally
OS.Free;
end;
end else begin
OleCheck(FRootStorage.CreateStream('Info',
STGM_CREATE or STGM_READ or STGM_SHARE_EXCLUSIVE, 0, 0, stm));
end;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
var
stm: IStream;
OS: TOleStream;
Writer: TWriter;
begin
OleCheck(FRootStorage.OpenStream('Info', nil, STGM_WRITE or
STGM_SHARE_EXCLUSIVE, 0, stm));
OS := TOleStream.Create(stm);
try
Writer := TWriter.Create(OS, 1024);
try
Writer.WriteString(FCarName);
Writer.WriteInteger(FYear);
finally
Writer.Free;
end;
finally
OS.Free;
end;
end;
function TfrmMain.ActivateForm(ACaption: string): Boolean;
var
Index: Integer;
begin
Result := False;
for Index := 0 to MDIChildCount - 1 do
if MDIChildren[Index].Caption = ACaption then begin
if MDIChildren[Index].WindowState = wsMinimized then
MDIChildren[Index].WindowState := wsNormal;
MDIChildren[Index].SetFocus;
Result := True;
exit;
end;
end;
procedure TfrmMain.Gas1Click(Sender: TObject);
var
frmGas: TfrmGas;
begin
if not ActivateForm('Gas') then begin
frmGas := TfrmGas.Create(self);
frmGas.Show;
end;
end;
procedure TfrmMain.Oil1Click(Sender: TObject);
var
frmOil: TfrmOil;
begin
if not ActivateForm('Oil') then begin
frmOil := TfrmOil.Create(self);
frmOil.Show;
end;
end;
procedure TfrmMain.CarInformation1Click(Sender: TObject);
var
frmCarInfo: TfrmCarInfo;
begin
frmCarInfo := TfrmCarInfo.Create(nil);
try
frmCarInfo.ecDescription.Text := FCarName;
frmCarInfo.ecYear.Text := IntToStr(FYear);
if frmCarInfo.ShowModal = mrOk then begin
FCarName := frmCarInfo.Description;
FYear := frmCarInfo.Year;
end;
finally
frmCarInfo.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -