模态按钮在表单上不起作用
Modal buttons not working on form
我正在显示一个使用 TActionManager
的表单,如下所示:
procedure TForm2.actAddImagineExecute(Sender: TObject);
begin
addImagineForm.Show;
end;
表单如下所示:
- 它包含以下内容:3
TButton
、1 TOpenDialog
和 1 TImage
- 按钮 Salveaza(保存)是
Button3
并且 ModalResult
设置为 mrOk
- 按钮Incarca Imagine(加载图像)是
Button1
- 按钮 取消 是
Button2
,勾选了 Cancel
属性 并且 ModalResult
设置为 mrAbort
问题:
- 当我点击窗体上的
Cancel
按钮时,它没有关闭,基本上什么都不做。
- 当我单击表单上的
Salveaza
按钮时,它没有任何反应。
Incarca Imagine 按钮的代码是这样的:
procedure TaddImagineForm.Button1Click(Sender: TObject);
var
selectedFile: string;
dlg: TOpenDialog;
begin
selectedFile := '';
dlg := TOpenDialog.Create(nil);
try
dlg.InitialDir := 'C:\';
dlg.Filter := 'All files (*.*)|*.*';
if dlg.Execute(Handle) then
selectedFile := dlg.FileName;
Image1.Picture.LoadFromFile(selectedFile);
finally
dlg.Free;
end;
end;
名为 Salveaza(Button3)的按钮的代码是:
procedure TaddImagineForm.Button3Click(Sender: TObject);
var
Field: TBlobField;
Stream: TStream;
begin
if dbmodule.comenziQuery.Active and (Image1.Picture.Graphic <> nil) then
begin
dbmodule.comenziQuery.Insert;
Field := TBlobField(dbmodule.comenziQuery.FieldByName('pscreen')); // ensure it ís a blob
Stream := dbmodule.comenziQuery.CreateBlobStream(Field, bmWrite);
try
Image1.Picture.Graphic.SaveToStream(Stream);
finally
Stream.Free;
dbmodule.comenziQuery.Post;
end;
end;
end;
- 我正在使用的
TSQLQuery
(名为 comenziQuery)与我正在使用的其他东西(如 DataSource
、DataSet
、SQLConnection
等等。)数据模块被命名为 dbmodule
- 数据库中应保存 .bmp 图像的列名为 pscreen 并设置为
mediumblob
类型。
我尝试过的事情:
- 我试过添加
close;
和 modalresult:=mrok;
但它似乎没有执行图像代码,只是使 Save按钮工作并关闭表单但没有图像添加到数据库字段
- 搜索了这方面的教程,找到了一堆,但要么不是我需要的,要么我显然不明白如何克服这个问题并让它发挥作用
你的问题是动作
procedure TForm2.actAddImagineExecute(Sender: TObject);
begin
addImagineForm.Show;
end;
应该是
procedure TForm2.actAddImagineExecute(Sender: TObject);
begin
addImagineForm.ShowModal;
end;
让模态按钮有意义。
编辑
另外一个问题是线条
if dlg.Execute(Handle) then
selectedFile := dlg.FileName;
Image1.Picture.LoadFromFile(selectedFile);
您的缩进表明只有当 dlg 成功执行时,Image1 才会尝试加载。不是这种情况。它将始终尝试加载。你的代码应该是
if dlg.Execute(Handle) then
begin
selectedFile := dlg.FileName;
Image1.Picture.LoadFromFile(selectedFile);
end;
编辑2
根据你的comment/request
procedure TaddImagineForm.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;
end;
我正在显示一个使用 TActionManager
的表单,如下所示:
procedure TForm2.actAddImagineExecute(Sender: TObject);
begin
addImagineForm.Show;
end;
表单如下所示:
- 它包含以下内容:3
TButton
、1TOpenDialog
和 1TImage
- 按钮 Salveaza(保存)是
Button3
并且ModalResult
设置为mrOk
- 按钮Incarca Imagine(加载图像)是
Button1
- 按钮 取消 是
Button2
,勾选了Cancel
属性 并且ModalResult
设置为mrAbort
问题:
- 当我点击窗体上的
Cancel
按钮时,它没有关闭,基本上什么都不做。 - 当我单击表单上的
Salveaza
按钮时,它没有任何反应。
Incarca Imagine 按钮的代码是这样的:
procedure TaddImagineForm.Button1Click(Sender: TObject);
var
selectedFile: string;
dlg: TOpenDialog;
begin
selectedFile := '';
dlg := TOpenDialog.Create(nil);
try
dlg.InitialDir := 'C:\';
dlg.Filter := 'All files (*.*)|*.*';
if dlg.Execute(Handle) then
selectedFile := dlg.FileName;
Image1.Picture.LoadFromFile(selectedFile);
finally
dlg.Free;
end;
end;
名为 Salveaza(Button3)的按钮的代码是:
procedure TaddImagineForm.Button3Click(Sender: TObject);
var
Field: TBlobField;
Stream: TStream;
begin
if dbmodule.comenziQuery.Active and (Image1.Picture.Graphic <> nil) then
begin
dbmodule.comenziQuery.Insert;
Field := TBlobField(dbmodule.comenziQuery.FieldByName('pscreen')); // ensure it ís a blob
Stream := dbmodule.comenziQuery.CreateBlobStream(Field, bmWrite);
try
Image1.Picture.Graphic.SaveToStream(Stream);
finally
Stream.Free;
dbmodule.comenziQuery.Post;
end;
end;
end;
- 我正在使用的
TSQLQuery
(名为 comenziQuery)与我正在使用的其他东西(如DataSource
、DataSet
、SQLConnection
等等。)数据模块被命名为 dbmodule - 数据库中应保存 .bmp 图像的列名为 pscreen 并设置为
mediumblob
类型。
我尝试过的事情:
- 我试过添加
close;
和modalresult:=mrok;
但它似乎没有执行图像代码,只是使 Save按钮工作并关闭表单但没有图像添加到数据库字段 - 搜索了这方面的教程,找到了一堆,但要么不是我需要的,要么我显然不明白如何克服这个问题并让它发挥作用
你的问题是动作
procedure TForm2.actAddImagineExecute(Sender: TObject);
begin
addImagineForm.Show;
end;
应该是
procedure TForm2.actAddImagineExecute(Sender: TObject);
begin
addImagineForm.ShowModal;
end;
让模态按钮有意义。
编辑
另外一个问题是线条
if dlg.Execute(Handle) then
selectedFile := dlg.FileName;
Image1.Picture.LoadFromFile(selectedFile);
您的缩进表明只有当 dlg 成功执行时,Image1 才会尝试加载。不是这种情况。它将始终尝试加载。你的代码应该是
if dlg.Execute(Handle) then
begin
selectedFile := dlg.FileName;
Image1.Picture.LoadFromFile(selectedFile);
end;
编辑2
根据你的comment/request
procedure TaddImagineForm.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;
end;