Author |
Topic |
|
jalbrecht
20 Posts |
Posted - Feb 14 2023 : 13:30:23
|
Hello,
I have a TImageEnmView Attached to a dataset.
I would like to show some differences on thumbs from values contained into the same dataset.
The dataset shows many pages gathered for different documents, and I would like to show where certain words contained into a text blob field are found attached to the image of the page.
Like Onimageload do If Pos(Searchtext , blobtextfield) > 0 then Imagetoptexte := 'Found'
My problem is that the TImageEnmView on load event does not appear to synchronise with TIEDBMultiBitmap and it's dataset.
Best regards. |
|
xequte
38607 Posts |
|
jalbrecht
20 Posts |
Posted - Feb 22 2023 : 04:59:33
|
Hi Ngel,
I have tested you proposed solution. I can't have access to the current data behind the loaded thumb. It is always on the first record that is providing links to the displayed images.
The cursor only move when I click on a thumb.
// In the form show. ImageEnView1.SetModernStyling; fDBMBitmap := TIEDBMultiBitmap.create( udm1.DS_fi_Img , '', 'CHEMIN_CPL', dmAllRecords ); //The file name is complete in field CHEMIN_CPL
fDBMBitmap.ImagePath := ''; fDBMBitmap.FollowDBCursor := True; fDBMBitmap.AutoLoad := true; fDBMBitmap.FilenameFieldIsUnique := True; fDBMBitmap.mode := dmAllRecords ; fDBMBitmap.FollowDBCursor := true;
ImageEnView1.SetExternalMBitmap( fDBMBitmap ); imageEnView1.DefaultTopText := iedtCustom; ...
procedure Tmain1.ImageEnView1GetText(Sender: TObject; Index: Integer;Position: TIEMTextPos; var Text: WideString); begin if Discreminant then // test if the searched text is in the record. begin if Position = iemtpTop then Text := inttostr(Index) + ' [*]'; end else if Position = iemtpTop then Text := inttostr(Index); end;
Best regards. |
|
|
xequte
38607 Posts |
Posted - Feb 22 2023 : 21:30:45
|
Hi
You should be able to use the Index parameter of the OnGetText event to look up the database values.
Nigel Xequte Software www.imageen.com
|
|
|
jalbrecht
20 Posts |
Posted - Feb 23 2023 : 02:28:39
|
Hi Nigel,
the IDX only changes value on click on the thumbs. It does not change when loading all the thumbs from a dataset.
Best regards. |
|
|
xequte
38607 Posts |
Posted - Feb 23 2023 : 20:50:00
|
Hi
Yes, OnGetText will be called any time the text field needs to be filled:
e.g.
procedure TMainForm.ImageEnMView1GetText(Sender: TObject; Index: Integer;
Position: TIEMTextPos; var Text: WideString);
begin
if Position = iemtpBottom then
Text := Index.ToString;
end;
You can use the Index, to get the Database ID:
https://www.imageen.com/help/TImageEnMView.ImageID.html
Use the ID to perform a look up on the database record and then fill the text string.
procedure TMainForm.ImageEnMView1GetText(Sender: TObject; Index: Integer;
Position: TIEMTextPos; var Text: WideString);
var
id: Integer;
blobText: string;
begin
if Position <> iemtpTop then
exit;
id := ImageEnMView1.ImageID[Index];
blobText := LookUpRecordText( id );
If Pos( Searchtext, blobText ) > 0 then
Text := 'Found';
end;
Nigel Xequte Software www.imageen.com
|
|
|
jalbrecht
20 Posts |
Posted - Feb 24 2023 : 02:26:07
|
Hi,
I tried this: id := ImageEnView1.ImageID[Index]; if Position = iemtpBottom then Text := inttostr(id);
And the text is always -1
|
|
|
xequte
38607 Posts |
Posted - Feb 24 2023 : 19:23:28
|
Hmm, what sort of database is this? Are you able to send me a small demo that shows the issue without me needing to install any dependent libraries?
Nigel Xequte Software www.imageen.com
|
|
|
jalbrecht
20 Posts |
Posted - Feb 28 2023 : 08:23:59
|
Hi Nigel,
It is a Firebird database. Please find attached the XLS result of the loaded dataset that gives me the links to the loaded images and records. My idea in the given case, is to show a mark on every images that has the word "PALE" in the given indexes to the images. i.e. in the other columns of the dataset.
This means for the lines 5,8,13,25,28,29,33,50 and 59.
Best regards
attach/jalbrecht/202322882446_data example.zip 26.2 KB |
|
|
xequte
38607 Posts |
Posted - Feb 28 2023 : 19:39:26
|
Hi
Here is an example using the filename field to look up a database record:
procedure TMainForm.ImageEnMView1GetText(Sender: TObject; Index: Integer;
Position: TIEMTextPos; var Text: WideString);
const
Seek_Field = 'Description';
var
fn, s: string;
v: variant;
begin
if chkCustomText.Checked and ( Position = iemtpBottom ) then
begin
// Get filename so we can locate record
fn := ImageEnMView1.ImageFilename[Index];
v := qryImages.Lookup( 'Filename', fn, Seek_Field );
// Get field value (may be NULL for memo types if field not filled)
s := '';
if not VarIsNull( v ) then
s := v;
if Pos( 'SUN', Uppercase( s )) > 0 then
Text := 'SUNNY Picture'
else
Text := 'No sun :-('
end;
end;
attach/xequte/2023228193914_IEDemoDB_Lookup.zip 640.98 KB
Nigel Xequte Software www.imageen.com
|
|
|
jalbrecht
20 Posts |
Posted - Mar 01 2023 : 04:04:39
|
Thank you Nigel but...
I did this :
procedure Tmain1.ImageEnView1GetText(Sender: TObject; Index: Integer;Position: TIEMTextPos; var Text: WideString);
var
fn, s: string;
v: variant;
begin
if (JvXPCheckbox1.checked) and (JvEdit4.Text <> '' ) and ( Position = iemtpBottom ) then
begin
fn := ImageEnView1.ImageFilename[Index];
v:=udm1.fi_Img.Lookup('CHEMIN_IMG' , fn , 'CHEMIN_IMG;TEXT;TITRE;TITRE2;AD;WORK_ORDER;TASK_REF;SB');
s := '';
if not VarIsNull( v ) then
s := v;
if Pos( Uppercase(JvEdit4.Text) , Uppercase( s )) > 0 then
Text := 'Found';
end;
end;
And my window is now endlessly blinking ...
Best regards. |
|
|
xequte
38607 Posts |
Posted - Mar 02 2023 : 13:52:13
|
Hmm. Maybe accessing the table is triggering a change event??
Try performing the lookup in a second instance of the dataset (fi_Img)
Nigel Xequte Software www.imageen.com
|
|
|
jalbrecht
20 Posts |
Posted - Mar 04 2023 : 12:20:10
|
Nigel,
You're the man !! it worked perfectly ... As long as I lookup in the correct field .......
Thanks you very much. |
|
|
xequte
38607 Posts |
Posted - Mar 06 2023 : 15:46:58
|
Good to hear you got it working
Nigel Xequte Software www.imageen.com
|
|
|
|
Topic |
|