Jump to content

hsauro

Members
  • Content Count

    88
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by hsauro


  1. Thanks, I'll take that into account

     

    One other question I have, how can I check if a python script I import has a given function?  eg

     

    p = Import (mypythoncode)

    p.myfunction()

     

    Is there a check I make to see if myfunction() is defined in mypythoncode other than actually trying to call it and trapping the exception? I should add that myfunction() isn't part of a class.

     

     


  2. That worked, thanks, I should have tried it first.

     

    For those who are interested. all I did was declare my method at the Delphi end as:

     

    function TObj.getlist : TStringList;

    begin

      result := TStringList.Create;

      result.Add ('abc);

    etc

    end

     

    I assume the TStringList is reference-counted at the python end and I shouldn't care about dreeing it?

     

    Then at the python end, I just called

     

    x = obj.getList()

     

    It comes back as a TString type but you can convert it to a python list using list(x) or x.ToList(). As a TString type, it does have all the methods you'd expect for a Delphi TString type, eg 

     

    x.Add ('A long string')


  3. I'm using DelphiWrapper to expose an API in a Delphi application that Python can run methods from. So far it works ok. It's a very primitive plugin system. My question is whether there is a way for a Delphi method to return a python list to the python caller using delphiwrapper. eg

     

    In python:

    mylist = delphiAPI.getlist()

     

    where mylist might be a list of strings ['red', 'dog', 'rock']

     

    At the moment I export two more primitive methods, one method to get the number of items and another method to get the ith item. I then create a small Python function that builds a python list using those more primitive methods. I was wondering if there was another way to do this using DelphiWrapper. In the long term, it would also be nice to return and pass to Delphi numpy arrays but I imagine that would be much more difficult. 

     


  4. I've been trying to figure out how I can allow a user to select a block of cells in a FMX TStringGrid with a mouse drag operation. If one creates a FMX TStringGrid and adds columns, it only lets you select one cell at a time. 

    The VCL TStringGrid has a goRangeSelection option but I can't find any options to select multiple cells in the FMX TStringGrid. Any suggestions? Also if multiple cells can be selected how does one determine which block of cells were selected?

     


  5. All I actually want is to draw text that is orientated 90 degrees to the horizontally, ie vertical. No fancy paths to follow, just a straight line. I can currently do it by rotating the image first by 90 degress, writing the text horizontally, then rotate the image back -90 degrees.


  6. 7 minutes ago, hsauro said:

    I’m trying to display rotated text using skiaDelphi but it appears that the recommended skia way is to rotate the underlying image, write your text, then rotate the image back again. That can work but it requires some thought with respect  to coordinates.

     

    some users from the c# community suggested using a path as in

    
    using (SKPaint skPaint = new SKPaint())
    {
      SKPath path = new SKPath();
      path.MoveTo(original.Width / 10, original.Height - original.Height / 10);
      path.LineTo(original.Width - original.Width / 10, original.Height / 10);
    
      canvas.DrawTextOnPath(textToWrite, path, 0, 0, skPaint);
      path.Dispose()
    }
    

    but I don’t see the method drawtextonpath in the skia4delphi library. 

    I found this 

     

    https://github.com/mono/SkiaSharp/issues/1183

     

    looks like Google removed that functionality. Guess it’s rotate image, draw, rotate image back.


  7. I’m trying to display rotated text using skiaDelphi but it appears that the recommended skia way is to rotate the underlying image, write your text, then rotate the image back again. That can work but it requires some thought with respect  to coordinates.

     

    some users from the c# community suggested using a path as in

    using (SKPaint skPaint = new SKPaint())
    {
      SKPath path = new SKPath();
      path.MoveTo(original.Width / 10, original.Height - original.Height / 10);
      path.LineTo(original.Width - original.Width / 10, original.Height / 10);
    
      canvas.DrawTextOnPath(textToWrite, path, 0, 0, skPaint);
      path.Dispose()
    }
    

    but I don’t see the method drawtextonpath in the skia4delphi library. 


  8. Is there an EMB procedure to get a given package available on GetIt? I was thinking that since skia4delphi is now available on GetIt it would be nice to also have TImage32.  Of course, it's not hard to install these manually but it does make life a little easier. 

     


  9. On 11/27/2021 at 10:47 AM, hsauro said:

    For some reason I didn't realize image32 was portable, sorry about that. Thanks for the code however, because I wanted to play around a bit more with pixel manipulation with image32. 

    @angusj I finally got round to looking more seriously Image32, and it's working well so far. In fact, I think I use this instead of GDI+ in the future. Plus as you mentioned earlier it's cross-platform. 

    • Like 1
    • Thanks 1

  10. 15 hours ago, angusj said:

    Hi hsauro. Image32 should be completely cross-platform, so I'd be very interested if you've encountered problems in that regard.

     

    I also doubt this since the drawing is done by directly addressing (ie coloring) every individual pixel (not by using a polygon renderer). There'd be little to no benefit in using another graphics library here. You could perhaps marginally improve pixel addressing by converting the temporary bitmap into a pf32bit pixelformat, getting the base image address (from bitmap.Scanline[bitmap.Height -1]) and efficiently offsetting that pointer to color everything (as per below).

     

     

    For some reason I didn't realize image32 was portable, sorry about that. Thanks for the code however, because I wanted to play around a bit more with pixel manipulation with image32. 


  11. I also experimented with caching the scan line pointers, and it seemed to work. I played around a little bit with both image32 and graphics32 but didn’t get very far. The advantage of skia over these other two is that it’s completely cross-platform using the same API and seems to generate very smooth antialiased curves,

×