NetTalk Central

Author Topic: Use DRAW to Create QR Code in NT app?  (Read 115 times)

rjolda

  • Sr. Member
  • ****
  • Posts: 415
    • View Profile
    • Email
Use DRAW to Create QR Code in NT app?
« on: October 29, 2025, 12:19:02 PM »
Hi,
NT 14.36  C11.0136
I want to generate a QR code with DRAW.  I am currently doing it with ezCam but if I can do it with DRAW it will be much cleaner.
PROBLEM.  DRAW requires an Image.  I have tried creating QR without the Image on a window and it does NOT work.
If I place an IMAGE on the window, I have to DISPLAY the image and then I can write it to a PNG file.
The documents state that displaying the image is optional- however, If I don't display the image, it will not save ( save writes a black square ).
Anyone with insight?
Do I have to try to write it to an Image file in NT first?
Thanks,
Ron

osquiabro

  • Hero Member
  • *****
  • Posts: 712
    • View Profile
    • Email
Re: Use DRAW to Create QR Code in NT app?
« Reply #1 on: October 30, 2025, 04:06:28 AM »
I use QrCode.dll and it's very easy to use look example,  in preupdate and display a result in Media field

p_web.ssv('Loc:receipt_url',Eve4:RECEIPT_URL)       

Loc:Text = CLIP(Eve4:GUI)
Loc:PathFileUci=clip(p_web.site.WebFolderPath)&'\uploads\$$$QRInvoice' & CLIP(Eve4:GUI)&'.jpg' 
Loc:Pixel=100
Loc:Format='png'
Loc:ColorBlack ='black'
Loc:ColorWhite = 'white'
GenerateQrCode(CLIP(Loc:Text),clip(Loc:PathFileUCI),clip(Loc:Pixel),clip(Loc:Format),clip(Loc:ColorBlack),clip(Loc:ColorWhite))
loc:st_filename3 = '/uploads/'&'$$$QRInvoice'&CLIP(Eve4:GUI)&'.jpg'
p_web.ssv('loc:st_filename3',clip(loc:st_filename3))
       

DonRidley

  • Don Ridley
  • Global Moderator
  • Hero Member
  • *****
  • Posts: 731
  • donaldridley2011@gmail.com
    • View Profile
    • Email
Re: Use DRAW to Create QR Code in NT app?
« Reply #2 on: October 30, 2025, 04:20:53 AM »
Good day Ron,

If you take a look at the NetTalk webserver Insight Graphing example's WebGraphSize procedure you will find:

Code: [Select]
If not p_Web &= NULL
  loc:silent = p_web.GetValue('_Silent')
  p_web.DivHeader('WebGraphSize_2','nt-left')
  If loc:Silent = 0
Window{prop:hide} = 1
ThisGraph2.Reset()
ThisGraph2.DrawGraph()
ans = 'images\@@@' & format(random(1,99999),@n05) &'.png'
ThisGraph2.SaveAs(clip(p_web.site.WebFolderPath) & '\' & Ans)
Window{prop:pixels} = 1
packet.append(p_web.CreateImage(ans,ThisGraph2.Width,ThisGraph2.Height,ThisGraph2.HeaderName))
  End
  p_web.ParseHTML(packet,1,0,NET:NoHeader)
  packet.SetValue('')
  p_web.DivFooter()
  Return(Level:Notify)
End

The important parts are:

Code: [Select]
ans = 'images\@@@' & format(random(1,99999),@n05) &'.png'       !<<--- Path string to an image file is create
ThisGraph2.SaveAs(clip(p_web.site.WebFolderPath) & '\' & Ans)   !<<--- Actual image file is saved to the path
packet.append(p_web.CreateImage(ans,ThisGraph2.Width,ThisGraph2.Height,ThisGraph2.HeaderName))  !<<--- HTML for the image is generated

ThisGraph2.SaveAs:

Code: [Select]
InsightRoot.SaveAs   Procedure  (string FileName)
f            string(255)
  code
  if self.thisDraw &= null then return .      ! ghnn
  f = filename
  if instring('.',lower(f),1,1) = 0
    f = clip(f) & '.png'
  end
  if instring('.wmf',lower(f),1,1)
  elsif instring('.bmp',lower(f),1,1)
    Self.ThisDraw.Writebmp(f)
  elsif instring('.png',lower(f),1,1)
    Self.ThisDraw.WritePng(f)
  end

SaveAs uses draw to create the image that is eventually displayed using p_web.CreateImage.

Now, this is one way to approach this.  You could use this method to generate a QR code image and display it but you're going to run into the main problem I have with Insight graphs in a web app...resolution.

If you want a higher resolution image with this approach you'll need to make the container Window larger and the image control larger which creates a larger image.  The larger the image file then the slower the HTML page loads.

So, this is a long winded way of saying that I suggest you use a JavaScript approach using jQuery.

Here's a link to a jQuery plugin for QR codes:

https://github.com/jeromeetienne/jquery-qrcode

I think this would be a better way.  Generate the QR code client side.

That's my humble opinion.
"Eliminate the impossible, whatever remains, however unlikely, must be the truth."

NetTalk 14.36
Clarion 12

osquiabro

  • Hero Member
  • *****
  • Posts: 712
    • View Profile
    • Email
Re: Use DRAW to Create QR Code in NT app?
« Reply #3 on: October 30, 2025, 08:17:14 AM »
Hi Don, with QrCode.dll the resolution is perfect a generate small image, very fast and less code

DonRidley

  • Don Ridley
  • Global Moderator
  • Hero Member
  • *****
  • Posts: 731
  • donaldridley2011@gmail.com
    • View Profile
    • Email
Re: Use DRAW to Create QR Code in NT app?
« Reply #4 on: October 30, 2025, 08:25:15 AM »
Nice!
"Eliminate the impossible, whatever remains, however unlikely, must be the truth."

NetTalk 14.36
Clarion 12

rjolda

  • Sr. Member
  • ****
  • Posts: 415
    • View Profile
    • Email
Re: Use DRAW to Create QR Code in NT app?
« Reply #5 on: October 30, 2025, 01:30:02 PM »
Hi, got the answer from NT User Group.  Short answer - you need an image field for QR to work its magic.
I created a window and added the QRCODE template ( that put an image on the window for QR Gen to use.  I am passing p_web to the procedure so I pass in my QRTEXT and QRSaveFileName and call the QR_Window, generate the QR CODE, Display it and save it and close the widow and save it and return to my NT procedure.  works great.
I will have to try the method Osquiabro described.
Thanks Osquiabro and Don,
Ron