Leemi
Wed May 19 12:29:49 CDT 2004
Hi John:
In the long run, you are better off placing the data in a memo binary
field. Here is some code for use in both forms and reports.
REPORT
---------------
By using the MEMO BINARY field type and a UDF(), we can store .JPG files in
a table
field yet when the report runs have them read from DISK. Here's how:
(1) Create a table or cursor with a structure like this (plus any added
fields as
necessary)
FileName C (150)
MemBin MEMO(BINARY)
The command would be CREATE TABLE GENDBF (FileName c(150), MemoBin M
NOCPTRANS)
(2) Append .JPGs file into the MEMO(Binary) field using FILETOSTR() and set
the
filename field accordingly. For instance:
INSERT INTO CURSORNAME VALUES("ToothBrush.JPG", FILETOSTR(<PathToFile>))
(3) The FoxPro report will still need an OLEBOUND control on it to print
pictures,
but instead of pointing the OLEBOUND to a general field, point it FILE and
use this
as the expression:
MYUDF(FileName, MemoBin)
Where MyUDF is in some program made available via SET PROC and reads thusly:
PROCEDURE MYUDF(lpFileName, lpMemoBinFld)
LOCAL lcTemp as String
lcTemp = ADDBS(SYS(2023)) + "JPGTEMP\"
IF !DIRECTORY(lcTemp)
MD (lcTemp)
ENDIF
SET SAFETY OFF
STRTOFILE(lpMemoBinFld, lcTemp + lpFileName)
SET SAFETY ON
RETURN lcTemp + lpFileName
(4) Finally, preview/print the report. You may also want to fire some lines
like
this to clean up afterward:
ERASE ADDBS(SYS(2023)) + "JPGTEMP\*.jpg"
RD ADDBS(SYS(2023)) + "JPGTEMP"
The .PRG uses the code above and the .JPGs that come with W2K, so it should
run on
that OS with no problem.
----------------------------------------------------------------------------
---
FORM
----------
Let's assume we have the table created earlier:
FileName C (150)
MemBin MEMO(BINARY)
This form will display images from it:
PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.Show
RETURN
**************************************************
DEFINE CLASS form1 AS form
Top = 71
Left = 48
Height = 310
Width = 504
Caption = "Fox Image Demo"
Name = "Form1"
ADD OBJECT image1 AS image WITH ;
Height = 296, ;
Left = 3, ;
Top = 8, ;
Width = 381, ;
Name = "Image1"
ADD OBJECT cmdPrevious AS commandbutton WITH ;
Top = 27, ;
Left = 422, ;
Height = 27, ;
Width = 24, ;
Caption = "<", ;
Name = "cmdPrevious"
ADD OBJECT cmdNext AS commandbutton WITH ;
Top = 27, ;
Left = 446, ;
Height = 27, ;
Width = 24, ;
Caption = ">", ;
Name = "cmdNext"
ADD OBJECT cmdQuit AS commandbutton WITH ;
Top = 72, ;
Left = 405, ;
Height = 27, ;
Width = 84, ;
Caption = "Quit", ;
Name = "cmdQuit"
PROCEDURE getimage
LPARAMETERS lpFileName, lpMemoBinFld
LOCAL lcTemp AS STRING
lcTemp = ADDBS(SYS(2023)) + "JPGTEMP\"
IF !DIRECTORY(lcTemp)
MD (lcTemp)
ENDIF
SET SAFETY OFF
STRTOFILE(lpMemoBinFld, lcTemp + lpFileName)
SET SAFETY ON
RETURN lcTemp + lpFileName
ENDPROC
PROCEDURE Destroy
USE IN SELECT("PICTURES")
ERASE ADDBS(SYS(2023)) + "JPGTEMP\*.jpg"
RD ADDBS(SYS(2023)) + "JPGTEMP"
ENDPROC
PROCEDURE Load
CD JUSTPATH(SUBSTR(SYS(16),AT(' ',SYS(16),2)))
USE PICTURES
ENDPROC
PROCEDURE Init
THISFORM.Image1.Picture = ;
THIS.GetImage(Pictures.FileName, Pictures.MemBin)
ENDPROC
PROCEDURE cmdPrevious.Click
IF RECNO() <> 1
SKIP -1
THISFORM.Image1.Picture = ;
THISFORM.GetImage(Pictures.FileName, Pictures.MemBin)
THISFORM.REFRESH
ENDIF
ENDPROC
PROCEDURE cmdNext.Click
IF RECCOUNT() <> RECNO() AND !EOF()
SKIP
THISFORM.Image1.Picture = ;
THISFORM.GetImage(Pictures.FileName, Pictures.MemBin)
THISFORM.REFRESH
ENDIF
ENDPROC
PROCEDURE cmdQuit.Click
THISFORM.RELEASE
ENDPROC
ENDDEFINE
**************************************************
I hope this helps.
This posting is provided "AS IS" with no warranties, and confers no rights.
Sincerely,
Microsoft FoxPro Technical Support
Lee Mitchell
*-- VFP8 HAS ARRIVED!! --*
Read about all the new features of VFP8 here:
http://www.universalthread.com/VisualFoxPro/News/VFP8Release.asp
Purchase VFP8 here:
http://shop.microsoft.com/Referral/Productinfo.asp?siteID=11518
Keep an eye on the product lifecycle for Visual FoxPro here:
http://support.microsoft.com/default.aspx?id=fh;[ln];lifeprodv
- VFP5 Mainstream Support retired June 30th, 2003
- VFP6 Mainstream Support retires Sept. 30th, 2003
>Hello All & Cindy Too !
>I need some button click code that will transfer the contents of a JPEG
(Iamge) file into a
>general or binary field in a table.
>I have a list of JPEGS in my listbox each of which is displayed as you
move through the list.
>Waht I am trying to get the user to do is to select one such image and
have it or the contents of
>it transferref into a general or binary field in my table.
>cheers John (UK)