在子窗體中,我增加了一個關閉按鈕close,其代碼如下:
procedure Tfrmaddgoods.btncloseClick(Sender: TObject);
begin
Close;
end;
窗體類型:fsMDIChild但是不能關閉,只能最小化,我查看了相關資料,好像只要close就行,如是hide就隱藏.本窗體代碼如下:
unit addgoods;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls;type
Tfrmaddgoods = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
articleid: TEdit;
price: TEdit;
number: TEdit;
Label5: TLabel;
btnok: TButton;
btnclose: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
stock: TLabel;
procedure btnokClick(Sender: TObject);
procedure btncloseClick(Sender: TObject);
private
{ Private declarations }
function ismoney(s:string):boolean; //判斷S可否轉化成貨幣類型
function isnumber(s:string):boolean; //判斷S可否轉化成數值類型
public
{ Public declarations }
end;var
frmaddgoods: Tfrmaddgoods;implementation{$R *.dfm}
function isnumeric(c:char):boolean;
begin
result:=(ord(c)>47) and (ord(c)<58);
end;
//判斷S可否轉化為成貨幣類型:
function Tfrmaddgoods.ismoney(s:string):boolean;
var
i:integer;
begin
i:=1;
if length(s)=0 then
begin
result:=false;
exit;
end;
while i<=length(s) do
begin
if (isnumeric(s[i])=false) and (s[i]<>'.') then
begin
result:=false;
exit;
end;
i:=i+1;
end;
result:=true;
end;
//判斷S可否轉化為成數值類型:
function Tfrmaddgoods.isnumber(s:string):boolean;
var
i:integer;
begin
i:=1;
if length(s)=0 then
begin
result:=false;
exit;
end;
while i<=length(s) do
begin
if (isnumeric(s[i])=false) and (s[i]<>'.') then
begin
result:=false;
exit;
end;
i:=i+1;
end;
result:=true;
end;
procedure Tfrmaddgoods.btnokClick(Sender: TObject);
var
canadd:boolean;
i:integer;
begin
canadd:=false; {能否增加商品的標志}
if isnumber(articleid.Text)=false then
begin
messagedlg('"商品編號"輸入錯誤,請重試!',mtwarning,[mbok],0);
activecontrol:=articleid;
abort;
end;
try
//檢查"商品編號",如果沒有這種商品則報錯:
i:=strtoint(articleid.text);
with table1 do
begin
first;
while not eof do
begin
if fields.FieldByName('商品編號').Asinteger=i then
begin
canadd:=true;
break;
end;
next;
end;
end;
if canadd=false then
begin
messagedlg('"商品編號"輸入錯誤,請重試!',mtwarning,[mbok],0);
activecontrol:=articleid;
abort;
end;
//檢查"單價",如果不是貨幣字符串則報錯:
if ismoney(price.text)=false then
begin
messagedlg('"單價"輸入錯誤,請重試!',mtwarning,[mbok],0);
activecontrol:=price;
abort;
end;
//檢查"進貨數量",如果不是數值類型則報錯:
if isnumber(number.text)=false then
begin
messagedlg('"進貨數量"輸入錯誤,請重試!',mtwarning,[mbok],0);
activecontrol:=number;
abort;
end; //根據商品編號修改商品表項:
with table1 do
begin
edit;
if price.text<>'' then
fieldvalues['單價']:=price.text;
fieldvalues['存貨']:=fields.fieldbyname('存貨').AsInteger+strtoint(number.text);
stock.Caption:=fields.fieldbyname('存貨').AsString;
post;
end;
except
on ex:econverterror do
begin
messagedlg('輸入錯誤,請重試!',mtwarning,[mbok],0);
exit;
end;
end; {end of try}
messagedlg('進貨成功!',mtwarning,[mbok],0);
//一些請屏操作:
articleid.text:='';
price.text:='';
number.Text:='';
stock.Caption:='';
end;procedure Tfrmaddgoods.btncloseClick(Sender: TObject);
begin
Close;
end;
end.
procedure Tfrmaddgoods.btncloseClick(Sender: TObject);
begin
Close;
end;
窗體類型:fsMDIChild但是不能關閉,只能最小化,我查看了相關資料,好像只要close就行,如是hide就隱藏.本窗體代碼如下:
unit addgoods;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls;type
Tfrmaddgoods = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
articleid: TEdit;
price: TEdit;
number: TEdit;
Label5: TLabel;
btnok: TButton;
btnclose: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Table1: TTable;
stock: TLabel;
procedure btnokClick(Sender: TObject);
procedure btncloseClick(Sender: TObject);
private
{ Private declarations }
function ismoney(s:string):boolean; //判斷S可否轉化成貨幣類型
function isnumber(s:string):boolean; //判斷S可否轉化成數值類型
public
{ Public declarations }
end;var
frmaddgoods: Tfrmaddgoods;implementation{$R *.dfm}
function isnumeric(c:char):boolean;
begin
result:=(ord(c)>47) and (ord(c)<58);
end;
//判斷S可否轉化為成貨幣類型:
function Tfrmaddgoods.ismoney(s:string):boolean;
var
i:integer;
begin
i:=1;
if length(s)=0 then
begin
result:=false;
exit;
end;
while i<=length(s) do
begin
if (isnumeric(s[i])=false) and (s[i]<>'.') then
begin
result:=false;
exit;
end;
i:=i+1;
end;
result:=true;
end;
//判斷S可否轉化為成數值類型:
function Tfrmaddgoods.isnumber(s:string):boolean;
var
i:integer;
begin
i:=1;
if length(s)=0 then
begin
result:=false;
exit;
end;
while i<=length(s) do
begin
if (isnumeric(s[i])=false) and (s[i]<>'.') then
begin
result:=false;
exit;
end;
i:=i+1;
end;
result:=true;
end;
procedure Tfrmaddgoods.btnokClick(Sender: TObject);
var
canadd:boolean;
i:integer;
begin
canadd:=false; {能否增加商品的標志}
if isnumber(articleid.Text)=false then
begin
messagedlg('"商品編號"輸入錯誤,請重試!',mtwarning,[mbok],0);
activecontrol:=articleid;
abort;
end;
try
//檢查"商品編號",如果沒有這種商品則報錯:
i:=strtoint(articleid.text);
with table1 do
begin
first;
while not eof do
begin
if fields.FieldByName('商品編號').Asinteger=i then
begin
canadd:=true;
break;
end;
next;
end;
end;
if canadd=false then
begin
messagedlg('"商品編號"輸入錯誤,請重試!',mtwarning,[mbok],0);
activecontrol:=articleid;
abort;
end;
//檢查"單價",如果不是貨幣字符串則報錯:
if ismoney(price.text)=false then
begin
messagedlg('"單價"輸入錯誤,請重試!',mtwarning,[mbok],0);
activecontrol:=price;
abort;
end;
//檢查"進貨數量",如果不是數值類型則報錯:
if isnumber(number.text)=false then
begin
messagedlg('"進貨數量"輸入錯誤,請重試!',mtwarning,[mbok],0);
activecontrol:=number;
abort;
end; //根據商品編號修改商品表項:
with table1 do
begin
edit;
if price.text<>'' then
fieldvalues['單價']:=price.text;
fieldvalues['存貨']:=fields.fieldbyname('存貨').AsInteger+strtoint(number.text);
stock.Caption:=fields.fieldbyname('存貨').AsString;
post;
end;
except
on ex:econverterror do
begin
messagedlg('輸入錯誤,請重試!',mtwarning,[mbok],0);
exit;
end;
end; {end of try}
messagedlg('進貨成功!',mtwarning,[mbok],0);
//一些請屏操作:
articleid.text:='';
price.text:='';
number.Text:='';
stock.Caption:='';
end;procedure Tfrmaddgoods.btncloseClick(Sender: TObject);
begin
Close;
end;
end.
解决方案 »
- 一个简单的TreeView问题
- ■■■■■天理何在?---内江市中区防疫站的丑恶行径■■■■■
- 初学Delphi郁闷吗?
- 我的ICON怎么不能加载到任务栏中的状态栏呢?(附代码)
- 各位大虾请告诉小弟nil代表什么意思
- 如何调整Excel中某Columns的宽度?
- 想听听有关设计报表的建议
- DOCM服务器,客户端,如何配置?
- 各位大侠:主细表到底如何操作好?有谁能发一个例子给我,一个窗体也好,谁给我我马上给100分,谢谢
- 有的属性后有两点,VCL中怎找不到处理源码??如DCOMConnection弹出网域计算机名选择框
- 哪位高手帮忙看看这段代码,找了好长时间,不知道问提出在什么地方!!
- 是否难题?如何在运行时创建DLL文件?
begin
Action := caFree;
end;
begin
Action := caFree;
end;
//MDI子窗体创建后想要关闭它就要将它释放掉
要显示的时候重新创建
所以跟你的其他代码没有关系
if Tmdichild= nil then
begin.......(code)
end;
procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Tmdichild=nil;//只能打开一次,否则能打开好多次
end;
begin
Action := caFree;
Tmdichild=nil
end
ACTION := CAFREE
ACTION := Cafree
begin
Action := caFree;
end;
可在closequery里
加上if *** then else 加上****
begin
Action := caFree;
mdichild=nil
end
begin
Action:=cafree;
end;
打开时:procedure TMain_Form.EntryClick(Sender: TObject);
begin
if not Assigned(long_server_Form) then
long_server_Form:=Tlong_server_Form.Create(Application);
long_server_Form.Show;
end;procedure Tlong_server_Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree; //关闭时释放
end;procedure Tlong_server_Form.FormDestroy(Sender: TObject);
begin
long_server_Form := nil; //窗体名胜 := nil;
end;
procedure Tfrmaddgoods.btncloseClick(Sender: TObject);
begin
self.free;
end;
procedure Tform.FormClose(Sender: TObject;var Action: TCloseAction);
begin
Action:=cafree;
end;
按上面這種方式,其中有一個整個窗體不管怎麼樣,任可按都是灰色,不知原因在那兒?
(注意我兩個窗體是這樣的,經過上面的方面以後,情況發生上面變化)
另外我的MDI打開後,就出現上面那個灰度的窗體,之前打開MDI時,所有的子窗體都打,不知那位兄弟能幫忙指點!!!!