IDE: Prevent Access violation when double-clicking on "Project" tree node in "NewProjectDlg. Issue #28399.

git-svn-id: trunk@49554 -
This commit is contained in:
juha 2015-07-16 16:45:15 +00:00
parent afc1272cf2
commit 4cc01bb10a
2 changed files with 41 additions and 43 deletions

View File

@ -58,12 +58,11 @@ object NewProjectDialog: TNewProjectDialog
Width = 269
Align = alLeft
Anchors = []
DefaultItemHeight = 18
HideSelection = False
ReadOnly = True
ScrollBars = ssAutoBoth
TabOrder = 0
OnDblClick = TreeDblClick
OnDblClick = OkClick
OnSelectionChanged = TreeSelectionChange
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
end
@ -75,6 +74,7 @@ object NewProjectDialog: TNewProjectDialog
Width = 549
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
OKButton.OnClick = OkClick
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
HelpButton.OnClick = HelpButtonClick

View File

@ -47,7 +47,7 @@ type
Panel1: TPanel;
Splitter1: TSplitter;
procedure HelpButtonClick(Sender: TObject);
procedure TreeDblClick(Sender: TObject);
procedure OkClick(Sender: TObject);
procedure TreeSelectionChange(Sender: TObject);
private
FProjectDescriptor: TProjectDescriptor;
@ -90,20 +90,22 @@ begin
end;
procedure TNewProjectDialog.FillHelpLabel;
var
ANode: TTreeNode;
begin
if Assigned(Tree.Selected) then
if Assigned(Tree.Selected.Data) then
begin
FProjectDescriptor:=TProjectDescriptor(Tree.Selected.Data);
HelpLabel.Caption:=FProjectDescriptor.GetLocalizedDescription;
ButtonPanel.OKButton.Enabled:=true;
end
else
begin
FProjectDescriptor:=nil;
HelpLabel.Caption:=lisChooseOneOfTheseItemsToCreateANewProject;
ButtonPanel.OKButton.Enabled:=false;
end;
ANode := Tree.Selected;
if Assigned(ANode) and Assigned(ANode.Data) then
begin
FProjectDescriptor:=TProjectDescriptor(ANode.Data);
HelpLabel.Caption:=FProjectDescriptor.GetLocalizedDescription;
ButtonPanel.OKButton.Enabled:=true;
end
else
begin
FProjectDescriptor:=nil;
HelpLabel.Caption:=lisChooseOneOfTheseItemsToCreateANewProject;
ButtonPanel.OKButton.Enabled:=false;
end;
end;
procedure TNewProjectDialog.SetupComponents;
@ -116,33 +118,27 @@ begin
NIndexFolder:=IDEImages.LoadImage(16, 'folder');
NIndexTemplate:=IDEImages.LoadImage(16, 'template');
with Tree do begin
Items.BeginUpdate;
Tree.Items.BeginUpdate;
RootNode:=Tree.Items.Add(nil, dlgProject);
RootNode.ImageIndex:=NIndexFolder;
RootNode.SelectedIndex:=NIndexFolder;
for i:=0 to ProjectDescriptors.Count-1 do
if ProjectDescriptors[i].VisibleInNewDialog then
begin
ItemNode:=Tree.Items.AddChildObject(RootNode, ProjectDescriptors[i].GetLocalizedName,
ProjectDescriptors[i]);
ItemNode.ImageIndex:=NIndexTemplate;
ItemNode.SelectedIndex:=NIndexTemplate;
end;
Tree.FullExpand;
Tree.Items.EndUpdate;
RootNode:=Items.Add(nil, dlgProject);
RootNode.ImageIndex:=NIndexFolder;
RootNode.SelectedIndex:=NIndexFolder;
for i:=0 to ProjectDescriptors.Count-1 do
if ProjectDescriptors[i].VisibleInNewDialog then
begin
ItemNode:=Items.AddChildObject(RootNode, ProjectDescriptors[i].GetLocalizedName, ProjectDescriptors[i]);
ItemNode.ImageIndex:=NIndexTemplate;
ItemNode.SelectedIndex:=NIndexTemplate;
end;
FullExpand;
Items.EndUpdate;
//select first child node
//select first child node
with Tree do
if Items.Count>0 then
Selected:=Items[1];
end;
DescriptionGroupBox.Caption:=lisCodeHelpDescrTag;
ButtonPanel.OKButton.Caption:=lisOk;
ButtonPanel.CancelButton.Caption:=lisCancel;
ButtonPanel.HelpButton.Caption:=lisHelp;
end;
procedure TNewProjectDialog.HelpButtonClick(Sender: TObject);
@ -150,13 +146,15 @@ begin
LazarusHelp.ShowHelpForIDEControl(Self);
end;
procedure TNewProjectDialog.TreeDblClick(Sender: TObject);
procedure TNewProjectDialog.OkClick(Sender: TObject);
var
Pnt: TPoint;
ANode: TTreeNode;
begin
Pnt:=Tree.ScreenToClient(Mouse.CursorPos);
if Assigned(Tree.GetNodeAt(Pnt.X, Pnt.Y)) then
ModalResult:=mrOk;
ANode := Tree.Selected;
if Assigned(ANode) and Assigned(ANode.Data) then
ModalResult:=mrOk
else
ModalResult:=mrNone;
end;
procedure TNewProjectDialog.TreeSelectionChange(Sender: TObject);