У меня есть настольная программа с модальным значением (FirearmForm
), имеющим TPageControl
с 5 TTabSheet
с.
На TabSheet 3 я рисую BMP-файлы, которые хранятся в база данных (SQL сервер). Следующий код выполняется в событии OnShow
на вкладке. Он отлично рисует все изображения.
Есть кнопка для добавления новой записи с новым изображением. Я нажимаю кнопку, получаю модальную форму, чтобы выбрать пи c, и добавляю ее в базу данных без проблем. Я автоматически закрываю эту модальную форму. Затем я вызываю метод Refresh
для TabSheet, содержащего изображения.
Работая в режиме отладки, я вижу, что он использует код, показанный для перестройки изображений, включая только что загруженное новое изображение. НО .... Табличный лист продолжает отображать исходные изображения только , так же, как когда Табличный лист был "показан" в первый раз. Если я щелкну другой TabSheet, а затем вернусь к листу, содержащему изображения, код выполняется снова, но новое изображение не отображается (оригиналы по-прежнему отображаются). Если я перейду на другую вкладку второй раз, а затем вернусь на вкладку изображений, новые изображения (и все остальные) будут отображаться правильно.
Что я делаю не так? Есть идеи, почему мне нужно дважды прогнать этот код, прежде чем он будет работать как нужно?
Я пробовал несколько разных методов построения TImage
s, и результаты всегда одинаковы. Есть идеи от кого-то умнее меня?
PS .. Я пробовал Create
метод TImage
как (self) и с именем формы ... тот же эффект.
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;