模式按钮无效

时间:2016-11-01 07:56:10

标签: delphi modal-dialog delphi-10-seattle

我正在使用TActionManager这样的表单:

procedure TForm2.actAddImagineExecute(Sender: TObject);
begin
  addImagineForm.Show;
end;

这是表单的样子: enter image description here

  • 它包含以下内容:3 TButton,1 TOpenDialog和1 TImage
  • 按钮 Salveaza 保存)为Button3ModalResult设为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 )位于Data module,以及我正在使用的其他内容(如{{ 1}},DataSourceDataSet等等。)数据模块名为 dbmodule
  • 应保存.bmp图像的数据库中的列名为 pscreen ,并设置为SQLConnection类型。

我尝试过的事情:

  • 我已尝试添加mediumblobclose;,但似乎无法执行图片代码,只需进行保存按钮工作并关闭表单,但没有图像添加到数据库字段
  • 搜索了相关的教程,发现了一堆,但他们不是因为我需要的东西,或者我显然不明白如何克服这个并让它发挥作用

1 个答案:

答案 0 :(得分:3)

你的问题是行动

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;

EDIT2

根据您的评论/请求

procedure TaddImagineForm.Button1Click(Sender: TObject);
begin
    if OpenDialog1.Execute then
    begin
      Image1.Picture.LoadFromFile(OpenDialog1.FileName);
    end;
end;