| Subject |
Re: Display Images on the form from a local imagefolder |
| From |
AGOSTINHO <AGOSTINHOTEIXEIRA@YAHOO.COM> |
| Date |
Sun, 01 Oct 2023 01:51:30 -0400 |
| Newsgroups |
dbase.getting-started |
I've been working around with the method of displaying images on a separate
image-folder and it works much better than placing the images direct on the DBF files.
Thanks for that.
Now I'm trying to change/replace the images on each record but can't get it to work.
I've tried with the following routine but it don't works.
Thanks
function PUSHBUTTON7_onClick()
local cFile
cFile = getfile( "*.*", "Import mugshot image" )
if "" # cFile
form.imagepotret1.dataSource = 'FILENAME "'+trim(this.fields['jpg_path'].value)+'\'+this.fields['jpg_name'].value+'"'
endif
return
Mervyn Bick Wrote:
> On 2023/09/22 06:13, AGOSTINHO wrote:
> > Following Mervin Bick adive that's not recommended to save images to tables.
> >
> ....
>
> > I added a character field named "imagefolder" to my fish4.dbf file and wrote the image files name to this particular record "C:\Users\HOME_PC\Desktop\blueangelfish.png"
> >
> > Dropped an image controle from the componed pallete to the form
> > and have programmed an onNavigate function into the form.
> >
> > this.IMAGE1 = new IMAGE(this)
> > with (this.IMAGE1)
> > height = 4.84
> > left = 73.1111
> > top = 3.96
> > width = 17.8889
> > endwith
> >
> > function form_onNavigate(nWorkArea)
> > local cImageFileName
> > // Assuming I have a field in my table that contains image file paths
> > cImageFileName = form.fish41.rowset.fields["imagefolder"]
> > // Image control's ImageFile property to display the image
> > this.image1 = cImageFileName
> > return
> >
>
>
> Firstly, workareas are created when a table is USE'd with XDML.
> Workareas don't exist when OODML query objects are used. One can mix
> XDML and OODML table access in a form if one is very careful but it is
> NOT a good idea as it can lead to major problems. Stick with OODML.
>
> You need to use the onNavigate event handler of the rowset created by
> the query object to tell the image control which image to display.
>
> The syntax for displaying an image file in an image object is
>
> dataSource = 'FILENAME "whatever.jpg"'
>
> No event handler executed by a query or a rowset understands the concept
> "form". One needs to use this.parent.parent in event handlers executed
> by the rowset.
>
> 'this' refers to the rowset
> 'this.parent' refers to the query
> 'this.parent.parent' refers to the form.
>
> function rowset_onNavigate(type, nRows)
> cImageFileName = this.fields["imagefolder"].value
> this.parent.parent.image1.dataSource = 'FILENAME "'+cImagefile+["]
> return
>
> This has not been tested but it should work. It will, however, only
> work if the image files are in the same folder as your program. If you
> haven't set the image control's datasource in the constructor code to
> access the first image in the table you will need to use the form's
> onOpen event handler to do this.
>
> function form_onOpen
> cImageFileName = form.fish41.rowset.fields["imagefolder"].value
> form.image1.dataSource = 'FILENAME "'+cImagefile+["]
> return
>
> It is better programming practice to keep the image files in a separate
> folder with the path in one field of the table and the file name in
> another. To display a file means combining the path and the filename.
> Having trailing blanks for the file name is not a problem but they must
> be removed from the path. One can provide the path as a variable and
> only save the file name to the table but I prefer to include the path in
> a separate field.
>
> A revised version of your test form is attached.
>
> Mervyn.
>
>
>
>
>
>
>
>
>
> if file ('fish_mb.dbf')
> drop table fish_mb
> endif
> if not file('fish_mb.dbf')
> copy table :dbasesamples:fish to fish_mb
> endif
> cDir = set('dire')
> nDir_len = len(cDir)+10
> cPath = cDir+'\jpg_path'
> cmd = 'alter table fish_mb add jpg_path char('+nDir_len+') , add jpg_name char(10)'
> &cmd
> try
> cmd = 'md '+cDir+'\jpg_path'
> &cmd
> catch(exception e)
> endtry
> cSafety = set('safety')
> set safety off
> q = new query()
> q.sql = 'select * from fish_mb'
> q.active = true
> n = 1
> do while not q.rowset.endofset
> cFish = 'fish'+n+'.jpg'
> cmd = 'q.rowset.fields["fish image"].copyToFile("'+cPath+'\'+cFish+'")'
> &cmd
> q.rowset.fields['jpg_path'] .value = cPath
> q.rowset.fields['jpg_name'].value = cFish
> n++
> q.rowset.next()
> enddo
> q.active= false
> set safety &cSafety
>
> ** END HEADER -- do not remove this line
> //
> // Generated on 2023-09-22
> //
> parameter bModal
> local f
> f = new SEEK_FISH1Form()
> if (bModal)
> f.mdi = false // ensure not MDI
> f.readModal()
> else
> f.open()
> endif
>
> class SEEK_FISH1Form of FORM
> with (this)
> onOpen = class::FORM_ONOPEN
> height = 16.0
> left = 50.1429
> top = -0.2273
> width = 55.2857
> text = ""
> endwith
>
> this.FISH_MB1 = new QUERY(this)
> with (this.FISH_MB1)
> left = 25.0
> top = 4.0
> width = 6.0
> height = 1.0
> sql = 'select * from "FISH_MB.dbf" where lower(name) like lower(:ag)'
> params["ag"] = "%"
> active = true
> endwith
>
> with (this.FISH_MB1.rowset)
> onNavigate = class::ROWSET_ONNAVIGATE
> endwith
>
> this.GRID1 = new GRID(this)
> with (this.GRID1)
> dataLink = form.fish_mb1.rowset
> height = 6.16
> left = 2.3333
> top = 5.72
> width = 50.5556
> endwith
>
> this.ENTRYFIELD1 = new ENTRYFIELD(this)
> with (this.ENTRYFIELD1)
> onKey = class::ENTRYFIELD1_ONKEY
> height = 1.76
> left = 24.1111
> top = 12.76
> width = 24.1111
> value = ""
> endwith
>
> this.IMAGE1 = new IMAGE(this)
> with (this.IMAGE1)
> height = 4.0
> left = 4.7143
> top = 0.4545
> width = 17.1429
> dataSource = form.fish_mb1.rowset.fields["fish image"]
> endwith
>
> this.TEXTLABEL1 = new TEXTLABEL(this)
> with (this.TEXTLABEL1)
> height = 1.76
> left = 0.7778
> top = 12.76
> width = 18.6667
> text = "Search Fish By Name"
> endwith
>
> this.IMAGE2 = new IMAGE(this)
> with (this.IMAGE2)
> height = 4.0
> left = 32.8571
> top = 0.4545
> width = 17.1429
> endwith
>
> this.rowset = this.fish_mb1.rowset
>
> function ENTRYFIELD1_onKey(nChar, nPosition,bShift,bControl)
> form.FISH_MB1.params['ag'] = '%'+this.value+'%'
> try
> form.FISH_MB1.requery()
> catch(exception e)
> form.FISH_MB1.requery()
> endtry
> form.image1.dataSource = form.FISH_MB1.rowset.fields["fish image"]
> form.image2.dataSource = 'FILENAME "'+trim(form.FISH_MB1.rowset.fields['jpg_path'].value)+'\'+form.FISH_MB1.rowset.fields['jpg_name'].value+'"'
> return
>
> function form_onOpen()
> //Display image for first record when form opens
> form.image2.dataSource = 'FILENAME "'+trim(form.FISH_MB1.rowset.fields['jpg_path'].value)+'\'+form.FISH_MB1.rowset.fields['jpg_name'].value+'"'
> return
>
> function rowset_onNavigate(type, nRows)
> this.parent.parent.image2.dataSource = 'FILENAME "'+trim(this.fields['jpg_path'].value)+'\'+this.fields['jpg_name'].value+'"'
> return
>
> endclass
>
|
|