View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001855 | JEDI VCL | 00 JVCL Components | public | 2004-06-13 12:18 | 2004-07-13 04:37 |
Reporter | anonymous | Assigned To | obones | ||
Priority | normal | Severity | text | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | |||||
Target Version | Fixed in Version | ||||
Summary | 0001855: TJvInterpreter, var Objects passed as parameter | ||||
Description | Hello, I'm trying to get the Interpreter stuff working with this stuff... In my project, I have this code in Editor.pas: [code] function GetActiveEditor(var AEditor: TEditorForm): Boolean; begin Result := False; with Application.MainForm do begin if ActiveMDIChild is TEditorForm then begin // TEditorForm is just a derived class from TForm AEditor := ActiveMDIChild as TEditorForm; Result := ActiveMDIChild is TEditorForm; end; end; end; [/code] The code, to let the interpreter know about it, is this: [code] procedure Interpreter_GetActiveEditor(var Value: Variant; Args: TJvInterpreterArgs); begin // is this correct this way? Value := GetActiveEditor(TEditorForm(TVarData(Args.Values[0]).VPointer)); end; procedure RegisterJvInterpreterAdapter(JvInterpreterAdapter: TJvInterpreterAdapter); const cUnit = 'Editor'; begin with JvInterpreterAdapter do begin AddClass(cUnit, TEditorForm, 'TEditorForm'); AddFunction(cUnit, 'GetActiveEditor', Interpreter_GetActiveEditor, 1, [varEmpty], varEmpty); end; end; initialization RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter); [/code] And I use this script: [code] unit Unit1; Procedure main; var Editor: TEditorForm; begin // if I don't "nil" the variable here // the interpreter gives expression errors Editor := nil; if GetActiveEditor(Editor) then begin if Editor <> nil then ShowMessage('Got it!'); end; end; end. [/code] The interpreter calls GetActiveEditor (I did set a breakpoint, so this works), but I didn't find any way store the Editor object in the var parameter. I studied JvInterpreter_* units and tested an half day, but didn't find any solution yet. I wonder if this supported? Any advice highly appreciated, thanks in advance! Peter | ||||
Tags | No tags attached. | ||||
2004-06-13 12:34
|
InterpreterTest.zip (3,554 bytes) |
|
Try using varByRef: AddFunction(cUnit, 'GetActiveEditor', Interpreter_GetActiveEditor, 1, [varByRef], varEmpty); |
|
Hi AlexeiR, thanks for the info! I also changed the 'Interpreter_GetActiveEditor' procedure to get it to work. It looks now like this: [code] procedure Interpreter_GetActiveEditor(var Value: Variant; Args: TJvInterpreterArgs); var Editor: TEditorForm; begin //Value := GetActiveEditor(TEditorForm(TVarData(Args.Values[0]).VPointer)); Editor := nil; Value := GetActiveEditor(Editor); Args.Values[0] := O2V(Editor); end; [/code] And together with the varByRef parameter, it finally works! Is this is correct way to do this btw? I just ask, because I didn't find any documentation on it and 'm not sure if it is. :) Thanks again! JEDI Team - this issue can be closed though |
|
As requested by the author, this bug is now resolved |
Date Modified | Username | Field | Change |
---|---|---|---|
2004-06-13 12:18 | anonymous | New Issue | |
2004-06-13 12:34 | anonymous | File Added: InterpreterTest.zip | |
2004-06-21 02:56 | AlexeiR | Note Added: 0004589 | |
2004-06-21 08:38 | anonymous | Note Added: 0004594 | |
2004-07-13 04:37 | obones | Status | new => resolved |
2004-07-13 04:37 | obones | Resolution | open => fixed |
2004-07-13 04:37 | obones | Assigned To | => obones |
2004-07-13 04:37 | obones | Note Added: 0004756 |