我有一个桌面程序,它的模态来自(FirearmForm),它有一个带有5TTabSheet的TPageControl。
在TabSheet 3上,我绘制存储在数据库( Server)中的bmp文件。下面的代码在表表的OnShow事件中执行。它完美地描绘了所有的图像。
有一个按钮来添加一个新的记录与新的图片。我点击按钮,得到一个模式形式来选择一个图片,并将它添加到数据库中没有任何问题。我会自动关闭那个模态表。然后,我为包含图像的Refresh方法调用TabSheet方法。
运行在调试模式下,我看到它使用所示的代码来重建图像,包括刚刚上传的新映像。但是..。TabSheet继续只显示的原始图像,就像第一次“显示”TabSheet时一样。如果我单击另一个TabSheet,然后单击包含图像的工作表,代码将再次执行,但新图像不会显示(原件仍然显示)。如果我第二次单击另一个选项卡,然后单击“图像”选项卡,则将正确显示新图像(以及所有其他图像)。
我做错了什么?有什么想法吗?为什么我必须在代码按要求运行之前,先运行两次?
我尝试过几种不同的构建TImage的方法,结果总是一样的。比我聪明的人有什么想法吗?
PS ..。我已经尝试了Create方法的TImage作为(自我)和一个表单名.同样的效果。
procedure TFirearmForm.tsInPicturesShow(Sender: TObject);
var
wkFileName, wkAName : string;
wkPic : tPicture;
wkJPG : tJPEGImage;
wkBMP : tBitMap;
wkImg : tImage;
I, x, wkTop, wkLeft : integer;
wkComp : tComponent;
begin
with dm.qryDocuments do begin
close;
sql.Text := 'select d.*, di.DocumentBitMap from documents d ' +
'join DocumentImages di on ' +
'di.CompanyId=d.CompanyId and ' +
'di.DocumentId=d.DocumentId ' +
'where ' +
'd.companyid=' + quotedstr(dm.gCompanyId) + ' and ' +
'd.adnumber=' + quotedstr(dm.gADNumber);
open;
I := 0;
wkTop := 32;
wkLeft := 46;
while not eof do begin
inc(i);
wkAName := 'InImage' + fieldbyname('DocumentId').AsString;
wkComp := FirearmForm.pcFirearm.findcomponent(wkAName);
if assigned(wkComp) then begin
next;
continue;
end;
wkImg := TImage.Create(FirearmForm.pcFirearm);
wkImg.Parent := tsInPictures;
wkImg.Left := wkLeft;
wkImg.Top := wkTop;
wkImg.Name := wkAName;
wkImg.Picture.assign(fieldbyname('DocumentBitMap') as tBlobField);
wkImg.Visible := True;
wkLeft := wkLeft + 184;
if i > 2 then begin
if i mod 6 = 0 then begin
wkTop := wkTop + 180;
wkLeft := 46;
end;
end;
next;
end;
end;
// FirearmForm.pcFirearm.ActivePageIndex :=2;
end;发布于 2020-02-10 01:56:25
@雷米。该记录确实在数据库中。我已经编程35年了,并且知道如何向DB提交rec。我不明白你的第二个评论。当我使用“自我”指针时,它仍然表现出相同的行为.点击两下,它就会显示“ok”。
https://stackoverflow.com/questions/60142074
复制相似问题