View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0003903 | JEDI VCL | 00 JVCL Components | public | 2006-09-14 00:14 | 2008-01-06 06:01 |
| Reporter | torworx | Assigned To | obones | ||
| Priority | normal | Severity | crash | Reproducibility | always |
| Status | resolved | Resolution | fixed | ||
| Product Version | Daily / GIT | ||||
| Target Version | Fixed in Version | 3.34 | |||
| Summary | 0003903: TJvPlugin Wizard dosen't work in BDS2006. | ||||
| Description | I can find JvPlugin Wizard in BDS2006 - New Items - Wizards. But it will be show a error message when I new a dll plugin library or bpl plugin package, and then it will close the current project, and create a wrong plugin project. | ||||
| Tags | No tags attached. | ||||
|
|
I have the same problem. I solved it by creating plugin in Delphi6. It's not very good solution =) |
|
|
When can it be fixed. We are waiting for the fix. Thanks. |
|
|
Well, I'm looking for a solution, but you could also look on your side... |
|
|
OK, When I have free time. |
|
2006-09-23 06:55
|
JvPluginWizard.pas (31,481 bytes) |
|
|
It seems that I found the solution, and I uploaded the fixed file -- JvPluginWizard.pas. Hope this can be helpfull. |
|
|
Can you tell me which lines you changed, or better yet, provide a parch file ? http://homepages.borland.com/jedi/wiki/index.php?title=Create_a_patch_file |
|
2006-09-23 20:50
|
JvPluginWizard.patch (10,905 bytes)
Index: JvPluginWizard.pas
===================================================================
--- JvPluginWizard.pas (revision 2)
+++ JvPluginWizard.pas (working copy)
@@ -50,6 +50,18 @@
JvTypes;
type
+ TPlugInfo = record
+ { 0 = dll; 1 = dpk }
+ PlugType: Integer;
+ { Private variables which will be used to store some properties for
+ the TJvPlugin }
+ PlugName: string;
+ PlugDesc: string;
+ PlugAuth: string;
+ PlugCopy: string;
+ PlugUID: string;
+ end;
+
TJvPluginWizard = class(TNotifierObject, IOTAWizard, IOTARepositoryWizard,
IOTAMenuWizard, IOTAProjectWizard)
public
@@ -71,18 +83,13 @@
function GetMenuText: string; virtual;
end;
- TJvPluginProjectCreator = class(TInterfacedObject, IOTACreator, IOTAProjectCreator) // both interfaces needed !!!!
+ TJvPluginProjectCreator = class(TInterfacedObject, IOTACreator, IOTAProjectCreator
+ {$IFDEF COMPILER8_UP}, IOTAProjectCreator80{$ENDIF COMPILER8_UP}
+ ) // both interfaces needed !!!!
public
Wizard: TJvPluginWizard;
{ 0 = dll; 1 = dpk }
- PlugType: Integer;
- { Private variables which will be used to store some properties for
- the TJvPlugin }
- PlugName: string;
- PlugDesc: string;
- PlugAuth: string;
- PlugCopy: string;
- PlugUID: string;
+ PlugInfo: TPlugInfo;
Project: IOTAModule;
function GetFileName: string;
function GetOptionFileName: string;
@@ -96,21 +103,21 @@
function GetFileSystem: string;
function GetOwner: IOTAModule;
function GetUnnamed: Boolean;
+ {$IFDEF COMPILER8_UP}
+ // IOTAProjectCreator50
+ procedure NewDefaultProjectModule(const Project: IOTAProject);
+ // IOTAProjectCreator80
+ function GetProjectPersonality: string;
+ {$ENDIF COMPILER8_UP}
end;
TJvPluginModuleCreator = class(TInterfacedObject, IOTACreator, IOTAModuleCreator)
public
Wizard: TJvPluginWizard;
- { 0 = dll; 1 = dpk }
- PlugType: Integer;
Project: IOTAModule;
- { Private variables which will be used to store some properties for
- the TJvPlugin }
- PlugName: string;
- PlugDesc: string;
- PlugAuth: string;
- PlugCopy: string;
- PlugUID: string;
+ PlugInfo: TPlugInfo;
+ constructor Create(AWizard: TJvPluginWizard; AProject: IOTAModule; APlugInfo:
+ TPlugInfo);
function GetCreatorType: string;
function GetExisting: Boolean;
function GetFileSystem: string;
@@ -250,6 +257,8 @@
var
ModuleServices: IOTAModuleServices;
ProjectCreator: TJvPluginProjectCreator;
+ lPlugInfo: TPlugInfo;
+ ModuleCreator: TJvPluginModuleCreator;
begin
with TfrmPluginParams.Create(nil) do
try
@@ -260,19 +269,27 @@
begin
ProjectCreator := TJvPluginProjectCreator.Create;
ProjectCreator.Wizard := Self;
+ with lPlugInfo do
+ begin
+ { rbDll checked => dll => PlugType = 0 = Ord(False)
+ rbPackage checked => package => PlugType = 1 = Ord(True)
+ }
+ PlugType := Ord(rbPackage.Checked); // radPluginType.ItemIndex;
+ PlugName := Trim(edtPluginName.Text);
- { rbDll checked => dll => PlugType = 0 = Ord(False)
- rbPackage checked => package => PlugType = 1 = Ord(True)
- }
- ProjectCreator.PlugType := Ord(rbPackage.Checked); // radPluginType.ItemIndex;
- ProjectCreator.PlugName := Trim(edtPluginName.Text);
+ PlugAuth := Trim(edtPluginAuthor.Text);
+ PlugCopy := Trim(edtPluginCopyright.Text);
+ PlugDesc := Trim(mmoDescripton.Text);
+ PlugUID := Trim(edtPluginUID.Text);
+ end;
+ ProjectCreator.PlugInfo := lPlugInfo;
- ProjectCreator.PlugAuth := Trim(edtPluginAuthor.Text);
- ProjectCreator.PlugCopy := Trim(edtPluginCopyright.Text);
- ProjectCreator.PlugDesc := Trim(mmoDescripton.Text);
- ProjectCreator.PlugUID := Trim(edtPluginUID.Text);
+ ModuleServices.CreateModule(ProjectCreator);
- ModuleServices.CreateModule(ProjectCreator);
+ // Plugin Module
+ ModuleCreator := TJvPluginModuleCreator.Create(Self, ProjectCreator.Project, lPlugInfo);
+
+ ModuleServices.CreateModule(ModuleCreator);
end;
end;
finally
@@ -287,10 +304,10 @@
function TJvPluginProjectCreator.GetFileName: string;
begin
{ 0 = dll; 1 = dpk }
- if PlugType = 0 then
- Result := GetCurrentDir + DirDelimiter + cPlgPrefix + PlugName + '.dpr'
+ if PlugInfo.PlugType = 0 then
+ Result := GetCurrentDir + DirDelimiter + cPlgPrefix + PlugInfo.PlugName + '.dpr'
else
- Result := GetCurrentDir + DirDelimiter + cPlgPrefix + PlugName + '.dpk';
+ Result := GetCurrentDir + DirDelimiter + cPlgPrefix + PlugInfo.PlugName + '.dpk';
end;
function TJvPluginProjectCreator.GetOptionFileName: string;
@@ -304,20 +321,7 @@
end;
procedure TJvPluginProjectCreator.NewDefaultModule;
-var
- Module: IOTAModule;
- ModuleCreator: TJvPluginModuleCreator;
begin
- ModuleCreator := TJvPluginModuleCreator.Create;
- ModuleCreator.Wizard := Wizard;
- ModuleCreator.PlugType := PlugType;
- ModuleCreator.PlugName := PlugName;
- ModuleCreator.PlugAuth := PlugAuth;
- ModuleCreator.PlugDesc := PlugDesc;
- ModuleCreator.PlugCopy := PlugCopy;
- ModuleCreator.PlugUID := PlugUID;
- ModuleCreator.Project := Project;
- Module := (BorlandIDEServices as IOTAModuleServices).CreateModule(ModuleCreator);
end;
function TJvPluginProjectCreator.NewOptionSource(const ProjectName: string): IOTAFile;
@@ -334,11 +338,12 @@
S: string;
begin
{ 0 = dll; 1 = dpk }
- if PlugType = 0 then
+ if PlugInfo.PlugType = 0 then
S := 'library ' + ProjectName + ';' + CrLf +
CrLf +
'uses' + CrLf +
- ' ShareMem,' + cPluginPrefix + PlugName + ';' + CrLf +
+// ' ShareMem,' + cPluginPrefix + PlugName + ';' + CrLf +
+ ' ShareMem;' + CrLf +
CrLf +
'{$R *.res}' + CrLf +
CrLf +
@@ -367,6 +372,9 @@
{$IFDEF COMPILER9}
' vcl,' + CrLf + ' JvCoreD9R;' + CrLf2 +
{$ENDIF COMPILER9}
+ {$IFDEF COMPILER10}
+ ' vcl,' + CrLf + ' JvCoreD10R;' + CrLf2 +
+ {$ENDIF COMPILER10}
'end.';
Result := TJvOTAFile.Create(S);
@@ -375,7 +383,7 @@
function TJvPluginProjectCreator.GetCreatorType: string;
begin
{ 0 = dll; 1 = dpk }
- if PlugType = 0 then
+ if PlugInfo.PlugType = 0 then
Result := sLibrary
else
Result := sPackage;
@@ -413,7 +421,7 @@
function TJvPluginProjectCreator.GetOwner: IOTAModule;
begin
- Result := GetCurrentProjectGroup; // nil
+ Result := GetCurrentProjectGroup;
end;
function TJvPluginProjectCreator.GetUnnamed: Boolean;
@@ -421,6 +429,21 @@
Result := True;
end;
+{$IFDEF COMPILER8_UP}
+
+procedure TJvPluginProjectCreator.NewDefaultProjectModule(
+ const Project: IOTAProject);
+begin
+ Self.Project := Project;
+end;
+
+function TJvPluginProjectCreator.GetProjectPersonality: string;
+begin
+ Result := sDelphiPersonality;
+end;
+
+{$ENDIF COMPILER8_UP}
+
//=== { TJvOTAFile } =========================================================
// TJvOTAFile - from Stefaan Lesage
@@ -447,6 +470,14 @@
RegisterCustomModule(TJvPlugIn, TCustomModule);
end;
+constructor TJvPluginModuleCreator.Create(AWizard: TJvPluginWizard; AProject:
+ IOTAModule; APlugInfo: TPlugInfo);
+begin
+ Wizard := Wizard;
+ Project := AProject;
+ PlugInfo := APlugInfo
+end;
+
//=== { TJvPluginModuleCreator } =============================================
{*****************************************************************************
@@ -470,10 +501,10 @@
begin
with TJvPlugIn(INTAComponent(FormEditor.GetRootComponent).GetComponent) do
begin
- Author := PlugAuth;
- Description := PlugDesc;
- Copyright := PlugCopy;
- PluginID := PlugUID;
+ Author := PlugInfo.PlugAuth;
+ Description := PlugInfo.PlugDesc;
+ Copyright := PlugInfo.PlugCopy;
+ PluginID := PlugInfo.PlugUID;
end;
end;
@@ -576,7 +607,7 @@
function TJvPluginModuleCreator.GetFormName: string;
begin
- Result := cPluginPrefix + PlugName;
+ Result := cPluginPrefix + PlugInfo.PlugName;
end;
{*****************************************************************************
@@ -598,7 +629,7 @@
function TJvPluginModuleCreator.GetImplFileName: string;
begin
- Result := GetCurrentDir + DirDelimiter + cPluginPrefix + PlugName + '.pas'
+ Result := GetCurrentDir + DirDelimiter + 'u' + cPluginPrefix + PlugInfo.PlugName + '.pas'
end;
{*****************************************************************************
@@ -663,42 +694,11 @@
*****************************************************************************}
function TJvPluginModuleCreator.GetOwner: IOTAModule;
-var
- ModuleServices: IOTAModuleServices;
- Module: IOTAModule;
- NewModule: IOTAModule;
begin
- // You may prefer to return the project group's ActiveProject instead
- Result := nil;
- ModuleServices := (BorlandIDEServices as IOTAModuleServices);
- Module := ModuleServices.CurrentModule;
-
- if Module <> nil then
- begin
- if Module.QueryInterface(IOTAProject, NewModule) = S_OK then
- Result := NewModule
- else
- // (rom) not sure if DELPHI or COMPILER
- {$IFDEF COMPILER5}
- if Module.GetOwnerCount > 0 then
- begin
- NewModule := Module.GetOwner(0);
- {$ENDIF COMPILER5}
- {$IFDEF COMPILER6_UP}
- if Module.OwnerModuleCount > 0 then
- begin
- NewModule := Module.OwnerModules[0];
- {$ENDIF COMPILER6_UP}
- if NewModule <> nil then
- if NewModule.QueryInterface(IOTAProject, Result) <> S_OK then
- Result := nil;
- {$IFDEF COMPILER6_UP}
- end;
- {$ENDIF COMPILER6_UP}
- {$IFDEF COMPILER5}
- end;
- {$ENDIF COMPILER5}
- end;
+ // Owned by current project
+ Result := GetCurrentProjectGroup;
+ if Assigned(Result) then
+ Result := (Result as IOTAProjectGroup).ActiveProject;
end;
{*****************************************************************************
@@ -831,7 +831,7 @@
TypeName := FormIdent;
Ancestor := AncestorIdent;
- TypeName := PlugName;
+ TypeName := PlugInfo.PlugName;
Source :=
'unit ' + ModuleIdent + ';' + CrLf2 +
@@ -856,7 +856,7 @@
'function RegisterPlugin: TJvPlugin; stdcall;' + CrLf2;
{ 0 = dll; 1 = dpk }
- if PlugType <> 0 then
+ if PlugInfo.PlugType <> 0 then
Source := Source + 'exports RegisterPlugin;' + CrLf2;
Source := Source +
|
|
|
I wish the file uploaded this time is right. :) |
|
|
Well, I tried, and it does not seem to work completely. I no longer get the error about "not being able to find the C++ option", but nothing is created in D2006. |
|
|
Maybe, I didn't make a complete test. I just use Delphi2006, so I only test it in Delphi2006. |
|
|
Ah but I tested in BDS 2006 as well, but with all personalities loaded. |
|
|
Did you make sure that you recompled JvPluginD10D.dpk after apply the JvPluginWizard.patch ? |
|
|
Yes absolutely. Before the rebuild, I had an error saying this (approximately): Cannot find options for CplusplusBuilder.Personality Now that I have rebuilt, I do not get any error, but the project manager is empty, no new project is created. |
|
|
Well. Can you send me the JvPluginWizard.pas after aplly the patch file, or force use JvPluginWizard.pas I uploaded at 09-23-06 to replace yours to make a test. I'll waiting for the result online. Email: taoy.cn@gmail.com MSN: yuantcn@hotmail.com |
|
|
This is now fixed in SVN |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2006-09-14 00:14 | torworx | New Issue | |
| 2006-09-14 02:06 | Werewolf | Note Added: 0010122 | |
| 2006-09-14 14:28 | obones | Status | new => confirmed |
| 2006-09-22 07:52 | torworx | Note Added: 0010151 | |
| 2006-09-22 08:42 | obones | Note Added: 0010152 | |
| 2006-09-22 08:52 | torworx | Note Added: 0010153 | |
| 2006-09-23 06:55 | torworx | File Added: JvPluginWizard.pas | |
| 2006-09-23 06:58 | torworx | Note Added: 0010156 | |
| 2006-09-23 09:05 | obones | Note Added: 0010157 | |
| 2006-09-23 20:50 | torworx | File Added: JvPluginWizard.patch | |
| 2006-09-23 20:53 | torworx | Note Added: 0010159 | |
| 2006-09-28 06:31 | obones | Note Added: 0010200 | |
| 2006-09-28 20:19 | torworx | Note Added: 0010214 | |
| 2006-09-29 01:40 | obones | Note Added: 0010216 | |
| 2006-09-29 01:47 | torworx | Note Added: 0010217 | |
| 2006-09-29 01:48 | torworx | Note Edited: 0010217 | |
| 2006-09-29 01:58 | obones | Note Added: 0010218 | |
| 2006-09-29 02:23 | torworx | Note Added: 0010220 | |
| 2007-09-27 03:00 | obones | Relationship added | has duplicate 0004245 |
| 2008-01-06 06:00 | obones | Status | confirmed => resolved |
| 2008-01-06 06:00 | obones | Fixed in Version | => Daily / SVN |
| 2008-01-06 06:00 | obones | Resolution | open => fixed |
| 2008-01-06 06:00 | obones | Assigned To | => obones |
| 2008-01-06 06:00 | obones | Note Added: 0014118 |