📄 jvqwizardeditorform.pas
字号:
Result := RsNewInteriorPage;
3:
Result := RsNextPage;
4:
Result := RsPreviousPage;
5:
Result := RsDeletePage;
end;
end;
function TJvWizardEditor.GetVerbCount: Integer;
begin
Result := 6;
end;
procedure TJvWizardEditor.NextPage(Step: Integer);
var
Page: TJvWizardCustomPage;
begin
Page := Wizard.FindNextPage(Wizard.ActivePageIndex, Step, False);
if Assigned(Page) and (Page <> Wizard.ActivePage) then
begin
if Component is TJvWizardCustomPage then
Designer.SelectComponent(Page);
Wizard.ActivePage := Page;
Designer.Modified;
end;
end;
//=== { TJvWizardPageListEditor } ============================================
procedure TJvWizardPageListProperty.Edit;
begin
ShowWizardPageListEditor(Designer, TJvWizard(GetComponent(0)));
end;
function TJvWizardPageListProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paReadOnly];
end;
function TJvWizardPageListProperty.GetValue: string;
var
APageList: TList;
begin
APageList := TList(Pointer(GetOrdValue));
if not Assigned(APageList) or (APageList.Count <= 0) then
Result := RsNone
else
Result := Format('(%s)', [GetPropType^.Name]);
end;
//=== { TJvWizardPageList Dialog Form } ======================================
procedure TJvWizardPageListEditor.UpdatePageList(const CurrItemIndex: Integer);
var
I: Integer;
begin
if Assigned(FWizard) then
begin
lbxWizardPages.Items.BeginUpdate;
try
lbxWizardPages.Items.Clear;
for I := 0 to FWizard.PageCount - 1 do
lbxWizardPages.Items.Add(TJvWizardCustomPage(FWizard.Pages[I]).Name);
if (CurrItemIndex >= 0) and (CurrItemIndex < lbxWizardPages.Items.Count) then
lbxWizardPages.ItemIndex := CurrItemIndex
else
lbxWizardPages.ItemIndex := -1;
finally
lbxWizardPages.Items.EndUpdate;
end;
end;
end;
procedure TJvWizardPageListEditor.SelectWizardPage(const Index: Integer);
var
Page: TJvWizardCustomPage;
begin
if Assigned(FWizard) and Active then
begin
Page := nil;
if (Index >= 0) and (Index < FWizard.PageCount) then
Page := TJvWizardCustomPage(FWizard.Pages[Index]);
Designer.SelectComponent(Page);
Wizard.ActivePage := Page;
Designer.Modified;
end;
end;
procedure TJvWizardPageListEditor.Activated;
begin
if (lbxWizardPages.ItemIndex < 0) and (lbxWizardPages.Items.Count > 0) then
lbxWizardPages.ItemIndex := 0;
if Assigned(FWizard) and Assigned(FWizard.ActivePage) and
(FWizard.ActivePage.PageIndex <> lbxWizardPages.ItemIndex) then
lbxWizardPages.ItemIndex := FWizard.ActivePage.PageIndex;
SelectWizardPage(lbxWizardPages.ItemIndex);
end;
procedure TJvWizardPageListEditor.DesignerClosed(const Designer: IDesigner;
AGoingDormant: Boolean);
begin
if Designer = Self.Designer then
Close;
end;
procedure TJvWizardPageListEditor.ItemDeleted(const ADesigner: IDesigner;
Item: TPersistent);
begin
if Item = FWizard then
begin
FWizard := nil;
Close;
end;
end;
procedure TJvWizardPageListEditor.ItemsModified(const Designer: IDesigner);
begin
if not (csDestroying in ComponentState) then
UpdatePageList(lbxWizardPages.ItemIndex);
end;
function TJvWizardPageListEditor.GetEditState: TEditState;
begin
Result := [];
end;
procedure TJvWizardPageListEditor.SetWizard(const Value: TJvWizard);
begin
if FWizard <> Value then
begin
FWizard := Value;
UpdatePageList(0);
end;
end;
procedure TJvWizardPageListEditor.AddPage(Page: TJvWizardCustomPage);
begin
Page.Parent := Wizard;
Page.Wizard := Wizard;
Wizard.ActivePage := Page;
Designer.SelectComponent(Page);
//Designer.Modified; !!! otherwise for some reason, the last item of the
//list box will show twice when adding either welcome page or interior page.
lbxWizardPages.ItemIndex := lbxWizardPages.Items.Add(Page.Name);
end;
procedure TJvWizardPageListEditor.AddInteriorPage;
var
APage: TJvWizardCustomPage;
begin
APage := TJvWizardInteriorPage.Create(Designer.GetRoot);
try
APage.Name := UniqueName(APage);
AddPage(APage);
except
APage.Free;
raise;
end;
end;
procedure TJvWizardPageListEditor.AddWelcomePage;
var
APage: TJvWizardCustomPage;
begin
APage := TJvWizardWelcomePage.Create(Designer.GetRoot);
try
APage.Name := UniqueName(APage);
AddPage(APage);
except
APage.Free;
raise;
end;
end;
procedure TJvWizardPageListEditor.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TJvWizardPageListEditor.actAddWelcomePageExecute(Sender: TObject);
begin
AddWelcomePage;
end;
procedure TJvWizardPageListEditor.actAddInteriorPageExecute(Sender: TObject);
begin
AddInteriorPage;
end;
procedure TJvWizardPageListEditor.actDeletePagesExecute(Sender: TObject);
begin
if Assigned(Wizard.ActivePage) then
begin
if lbxWizardPages.ItemIndex >= 0 then
lbxWizardPages.Items.Delete(Wizard.ActivePage.PageIndex);
Designer.SelectComponent(Wizard);
Wizard.ActivePage.Free;
Designer.Modified;
end;
end;
procedure TJvWizardPageListEditor.actDeletePagesUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled :=
(lbxWizardPages.Items.Count > 0) and (lbxWizardPages.ItemIndex >= 0);
end;
procedure TJvWizardPageListEditor.lbxWizardPagesClick(Sender: TObject);
begin
SelectWizardPage(lbxWizardPages.ItemIndex);
end;
procedure TJvWizardPageListEditor.lbxWizardPagesMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
lbxWizardPages.BeginDrag(False);
end;
procedure TJvWizardPageListEditor.lbxWizardPagesDragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept :=
(Source is TListBox) and
(lbxWizardPages.ItemAtPos(Point(X, Y), True) <> -1) and
(lbxWizardPages.ItemAtPos(Point(X, Y), True) <> lbxWizardPages.ItemIndex);
end;
procedure TJvWizardPageListEditor.lbxWizardPagesDragDrop(Sender, Source: TObject;
X, Y: Integer);
var
OldIndex, NewIndex: Integer;
begin
OldIndex := lbxWizardPages.ItemIndex;
NewIndex := lbxWizardPages.ItemAtPos(Point(X,Y), True);
lbxWizardPages.Items.Move(OldIndex, NewIndex);
if Assigned(FWizard) then
begin
TJvWizardCustomPage(FWizard.Pages[OldIndex]).PageIndex := NewIndex;
lbxWizardPages.ItemIndex := NewIndex;
end;
end;
procedure TJvWizardPageListEditor.actWizardPagesUpdate(Action: TBasicAction;
var Handled: Boolean);
begin
acMoveUp.Enabled := lbxWizardPages.ItemIndex > 0;
acMoveDown.Enabled :=
(lbxWizardPages.ItemIndex <> -1) and
(lbxWizardPages.ItemIndex < lbxWizardPages.Items.Count - 1);
end;
procedure TJvWizardPageListEditor.acMoveUpExecute(Sender: TObject);
var
I: Integer;
begin
I := lbxWizardPages.ItemIndex;
lbxWizardPages.Items.Move(I, I-1);
if Assigned(FWizard) then
begin
TJvWizardCustomPage(FWizard.Pages[I]).PageIndex := I - 1;
lbxWizardPages.ItemIndex := I - 1;
end;
end;
procedure TJvWizardPageListEditor.acMoveDownExecute(Sender: TObject);
var
I: Integer;
begin
I := lbxWizardPages.ItemIndex;
lbxWizardPages.Items.Move(I, I+1);
if Assigned(FWizard) then
begin
TJvWizardCustomPage(FWizard.Pages[I]).PageIndex := I + 1;
lbxWizardPages.ItemIndex := I + 1;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -