Jump to content

Harry Rogers

uniGUI Subscriber
  • Posts

    237
  • Joined

  • Last visited

  • Days Won

    6

Harry Rogers last won the day on September 7 2022

Harry Rogers had the most liked content!

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Harry Rogers's Achievements

Advanced Member

Advanced Member (4/4)

24

Reputation

  1. So if I understand you - rather than add EXIF data to an image file you wish to draw on its canvas? That's a fairly straightforward Delphi task If for example you have your starting image data in a Tpngimage (e.g. named PNGImage) you just need to set up a brush and font for the canvas and write your text to it .... PNGImage.Canvas.Brush.Style := bsClear; PNGImage.Canvas.Font.Size := 16; PNGImage.Canvas.Font.Color := clRed; PNGImage.Canvas.Font.Style := [fsBold]; PNGImage.Canvas.TextOut(5, 5, datetimetostr(now) + ' ' + SomeEditControl.text); PNGImage.SaveToFile('changed.png'); ''''' Before After
  2. UPDATE: Resolution - [well good enough anyway] - I'm sure it creates plenty of back and forth traffic - if anyone knows a better way then please dive in! If the Websocket is used to update the text value of a UniEdit rather than a unilabel.caption then the Onchange event of that edit is fired and the uniedit.text value is the new value sent by the websocket. (N.B you need to use setValue from js to write the text field of a uniedit. ) ( I tried with a dynamically created on change event for the label (as per the demo example dyn.dproj) but that never fired from the websocket update - only manual changes) So on the Client side we how have this js event function form.socketmessage(sender, msg, params, eOpts) { if (msg == 'update') { // MainForm.UniLabel1.setText(params.value); << never updates the underlying value only the rendered one. MainForm.UniEdit1.setValue(params.value); // Works fine } } Then use the standard Delphi/Unigui Onchange event of the UniEdit to get at the new value.
  3. I too have this question. The example does not seem to answer it - I think. E.G. the Server module uses a websocket to update a client side unilabel caption, for example with a variable calculated in the server module ("filename"), like this ........ if PersistentNode then BroadcastMessage('update', [ 'value', filename ], [boClientOnly]); .................... In the client main we use the clientevents to grab that message and update the label caption function form.socketmessage(sender, msg, params, eOpts) { if (msg == 'update') { MainForm.UniLabel1.setText(params.value); } } Visually the label does indeed update the caption to show the current value of "filename". HOWEVER on the client side showmessage(unilabel1.caption); Shows the pre-existing caption NOT the updated text sent from the websocket. What's the mechanism to update the internal representation of label.caption to match what's actually displayed?
  4. For future ref: By Renaming UniGUIOS.bpl the IDE starts - after complaining about the BPL that's missing. This allows an orderly uninstall / install So all appears to be working as expected now. All the best
  5. Hi Sherzod Thanks for the reply. Not sure how to proceed as I can't start Delphi, the IDE hangs whilst loading so I don't get as far as being able to uninstall any components? Thank You
  6. Hi Just installed 1.95.0 1577. Installation appeared to work smoothly for each package. Now on starting the IDE it freezes at 'Loading package UniGUIOS.bpl'. Presumably I need to run the install again --- BUT How can I start the IDE without it trying to load the offending bpl? Thanks
  7. All our work is done server side - so it's just pretty standard Delphi stuff, no Javscript etc required. In one application we have tablets out in the field returning HTML data to the server. When the UNIGUI user browses the list of returned files we check to see if the same file name exists but with a PDF extension rather than HTM - if not we simply call wkhtmltopdf.exe from a procedure in mainmodule in a hidden window with param1 as source html and param2 as the required PDF. Once the PDF does exist we display/print as required. you could use any Delphi function that runs an external exe (ShellExecute, ShellExecureEx, WinExec, CreateProcess....) This approach works fine for us, it's easy to implement and allows additional processing if the called process is actually a batch file with a list of other things to do in it, rather than just converting to a PDF. Cheers
  8. We have used this in a number of places not just UniGui https://wkhtmltopdf.org/
  9. Hi We have used ICS components a lot over the years - and have been very pleased with them. However we have found their architecture not well suited to Unigui. In our implementations we tend to use a VCL program to send emails which we call from the Unigui sessions as needed, with parameters supplied either via the command line or database tables - there are other discussions and demos on the forum regarding email solutions. There is a thread from 2010 relating to ICS - Farshad's reply summed it up. Best of luck It seems that Overbyte components use Async TCP/IP communication which relies on Windows message events. This requires component to reside inside a thread which can receive Windows events. In unigui there are no such dedicated threads to sessions. Threads are created and controlled by the Web server and for sessions threads are only available during event execution. Moreover, it is not guaranteed that a session will be always served by same thread. It can thread A in first event and thread B in next event.
  10. Thanks for this - it's plainly a lot of work. Looks like a very useful resource already.
  11. Thanks for this I've tried it on a Moto g7 power (Android 9) Using Chrome 84.04147.111 All appears to work as expected. Nice job.
  12. I've been using Contabo vps for the past 4 months (4core 8GB,200GB). It's certainly the cheapest and performance has so far been fine - though not a heavy load. It's worth mentioning - they appear to do any required maintenance during normal (GMT) service hours - which has so far resulted in 2, 1 hour periods of inaccessibility - they do have multiple clusters of VPS which are serviced at different times though - and if you have more than one you can request to have them housed on separate and machines and/or in two different data centres - so you can ensure constant accessibility if you share data and apps across them. All support questions have been answered promptly. Note They don't provide any additional firewall in front of your machine as many other providers do.
  13. Thanks very much for sharing this - it seems to work very well. What's the best way to block arriving data so that only specific source Ip addresses trigger a genuine ws.onmessage event? Many thanks
×
×
  • Create New...