-
Content Count
974 -
Joined
-
Last visited
-
Days Won
61
Posts posted by pyscripter
-
-
You need to overwrite the TTestSub.GetOwner.
-
1 hour ago, dummzeuch said:This passes the raw bytes received to the callback. Maybe it is possible to convert them to a string first? Or maybe call every time a line feed is received? Also, maybe the callbacks are enough so collecting the whole output is no longer necessary.
This is roughly what I had in mind.
Suggestions:
- Have one event with an Enumerated parameter TExecOutput = (eoStdout, eoStdErr)
- Pass to the callback only the newly added bytes in a TBytes. They can be easily converted to strings using the ISshClient encoding.
- Keep the output as is. The user has a choice of not providing a callback. The overhead is small.
-
44 minutes ago, dummzeuch said:I get the output of the command only after it has finished
This is how it is designed to work.
I will add an event that is triggered whenever output is added. Add an event to access partial output of ISshExec.Exec · Issue #20 · pyscripter/Ssh-Pascal
-
ISshExec.Exec was substantially revised and now works in non-blocking mode.
- Are you using the latest source?
- Are you using the latest linssh2 binaries?
You can execute ISshExec in a thread. Note that then it can be cancelled from the main thread using ISshExec.Cancel.Also you memory leak in TSshExec.Exec · Issue #18 · pyscripter/Ssh-Pascal has been fixed. Can you confirm that?
-
In the latest commits, I have added the ability to handle pointer fields and properties. They are converted to python integers.
So you could store for example an integer to the TTreeNode.Data.
You could also store pointers to python objects using ctypes.
See for example the following:
from ctypes import py_object, pointer, addressof, cast, POINTER # Create a py_object original = "Hello" py_obj = py_object(original) # Get its address addr = addressof(py_obj) # e.g., 0x7f8b5c403020 # Recover the py_object py_ptr = cast(addr, POINTER(py_object)) recovered_py_obj = py_ptr.contents recovered = recovered_py_obj.value print(recovered) # "Hello" print(original is recovered) # True (same object)
addr is an int type (python integer) that can be stored in Delphi pointer property.
-
- TTreeNode.Data is a Pointer property and WrapDelphi does not support raw pointer properties.
- The only pointer property supported is PPyObject. So if your wrapped class had a property declared as PPyObject it would work. This also explains the error message.
- To be able to use the Data property you would need to modify the TTreeNode wrapper and do some custom wrapping of the TreeNode.Data property. Alternatively you could save whatever info you need to store in a python data structure (possibly dict for easy access).
-
1
-
@Alex7691Good work. It is useful to have a drop-in fast generics replacement.
A couple of questions:
- Is there an impact on code size?
- I see a lot of code included that it is not directly related to generics. (e.g. TSyncSpinlock, TSyncLocker, TaggedPointer, TCustomObject. TLiteCustomObject etc.). Are they actually essential for the rapid collections?
-
13 hours ago, Charlie Heaps said:they don't seem to support Delphi's built in styles
I believe they do among other styles. (see images in the home page)
@Carlo Barazzetta Can you enlighten us on this?
-
-
-
28 minutes ago, bravesofts said:Microsoft’s WinUI 3, the latest iteration of its modern Windows UI framework
Not quite. See for instance Ohh...WinUI3 is really dead! - When can we expect the announcement? · microsoft/microsoft-ui-xaml · Discussion #9417
The Microsoft strategy for GUI App development is utterly messed up:
- WinForms
- WPF
- Xamarin Forms
- UWP
- WinUI3
- MAUI
And there is no longer a GUI designer. You have to develop XAML in a text editor. Discussion: WinUI 3.0 XAML Designer · Issue #5917 · microsoft/microsoft-ui-xaml
-
7
-
1
-
2 hours ago, Jud said:I used GExperrs with many versions of Delphi, through 12.2, and got to depending on it. I upgraded to 12.3 yesterday, and GExperts won't install into it. Then I realized that it was probably because of the IDE changes.
FWIW, the latest version of GExperts from Experimental GExperts Version – twm's blog installs and works fine here with Delphi 12.3.
-
Yes I do notice the difference. However I do not have 10.4 installed to compere. Delphi 12 behaves the same as Delphi 11 though.
-
Are you using Vcl? Are you using styles? I can see that in your images the form title bars are styled differently.
I don't see that in a simple dialog:
Delphi 11: Client width 269, Width 285
Delphi 12: Same.
-
Four of my reported issues were fixed in 12.3:
- TStackPanel spacing property is not DPI scaled - RAD Studio Service - Jira Service Management
- Unnecessary painting of styled scrollbars on mouse move - RAD Studio Service - Jira Service Management
- Memory leak when you use Vcl.IMouse - RAD Studio Service - Jira Service Management
- The Panning Window is not DPI scaled - RAD Studio Service - Jira Service Management
Four are still open.
-
2
-
9 minutes ago, ToddFrankson said:(right hand side during install)
This is the 64 bit IDE. My problem was that the Win64 platform was not available. After trying many things, I had to do a full uninstall/install to get the platform available again.
-
After upgrading to 12.3 I do not get the Win64 platform. Only Win32. Anyone has the same issue? Any ideas how to fix it?
-
41 minutes ago, softtouch said:val contains 'testing' again, even it does not exist in python2.py.
Of course it does.
What you are doing is like running the following python script:
exec("a = 1; print(a)") exec("b = 1; print(a)")
a is created in the first statement and still exists when the second statement is executed.
but if you do
exec("a = 1; print(a)", {}, {}) exec("b = 1; print(a)", {}, {})
then the second statement raises an error.
ExecFile has the following signature:
procedure ExecFile(const FileName: string; locals: PPyObject = nil; globals: PPyObject = nil);
If you provide no arguments for locals and globals, the code is executed in the namespace of the __main__ module. If you do not want this to happen then you should provide empty dictionaries as arguments for the locals and globals parameters (or just the locals). But then MainModule.VALUE will raise an error.
Example code (not tested):
var Py := GetPythonEngine; var NewDict := NewPythonDict; Py.ExecFile('python1.py', ExtractPythonObjectFrom(NewDict)); var val := NewDict.GetItem("VALUE"); NewDict := NewPythonDict; Py.ExecFile('python2.py', ExtractPythonObject(NewDict)); val := NewDict.GetItem("VALUE"); // will raise an error since VALUE does not exist VarClear(NewDict);
-
Indeed. Python variables are reference counted. As long as you keep a reference the python object it refers to is kept alive.
When you have a statement like:
var s:Variant :=MainModule.MYVALUE
s is a custom variant that stores the python reference. The variable will be dereferenced, when s goes out of scope or you explicitly clear s (VarClear(s)).
-
The issue was closed within minutes...
Explanation:
QuoteI assume this change would imply a fairly significant rework for the implementation of this feature in the compiler
-
-
4 hours ago, Uwe Raabe said:Fortunately the "why" is almost irrelevant, as you can issue a feature request for a change.
I was really asking whether you see any technical reason that I am missing. Because, otherwise it is such an obvious omission.
-
@Uwe Raabe Sure but why can't you have a class property that has virtual class method accessor. It is just "syntactic sugar". You call the virtual class method to get the value.
-
The following will not compile (error: class property accessor can be a class field or a static class method) :
TTest = class private class function GetName: string; virtual; abstract; public class property Name: string read GetName; end;
whilst the following does:
TTest = class private class function GetName: string; virtual; abstract; public property Name: string read GetName; end;
My question is that since you can have virtual class methods, why not properties that behave accordingly?
In SmallTalk, the first object oriented language, you have a distinction between:
- instance variables (aka properties)
- class variables (aka class properties - one per class including subclasses)
- class instance variables (one per class, subclasses can change the value)
Component with sub-property event
in Delphi IDE and APIs
Posted
It works with Components if you call SetSubComponent or set csSubComponent. Then Events are displayed. e.g,
So you can change TTestSub to inherit from TComponent.