📄 iplotmanagers.pas
字号:
if not Assigned(AOnRename) then raise Exception.Create('AOnRename event handler can not be null');
FList := TStringList.Create;
FList.Sorted := False;
FOwner := AOwner;
FOnChange := AOnChange;
FOnInsert := AOnInsert;
FOnRemove := AOnRemove;
FOnRename := AOnRename;
FOnInsert(Self);
end;
//*************************************************************************************************************************************
destructor TiPlotObjectManagerCustom.Destroy;
begin
Clear;
FOnRemove(Self); //Must be after clear
FList.Free;
inherited;
end;
//****************************************************************************************************************************************************
function TiPlotObjectManagerCustom.GetNextName: String;
var
x : Integer;
HighestFound : Integer;
BaseName : String;
SearchName : String;
iPlotObject : TiPlotObject;
PostBase : String;
begin
HighestFound := 0;
BaseName := GetName;
Result := BaseName;
for x := 0 to FList.Count-1 do
begin
iPlotObject := FList.Objects[x] as TiPlotObject;
SearchName := iPlotObject.Name;
if UpperCase(Copy(SearchName, 1, Length(BaseName))) = UpperCase(BaseName) then
begin
PostBase := Copy(SearchName, Length(BaseName)+1, Length(SearchName) - Length(BaseName));
try
if StrToInt(PostBase) > HighestFound then HighestFound := StrToInt(PostBase);
except
on Exception do;
end;
end;
end;
Result := BaseName + ' ' + IntToStr(HighestFound + 1);
end;
//****************************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.InsertObject(AObject: TiPlotObject);
begin
if FList.IndexOfObject(AObject) = -1 then FList.AddObject('', AObject)
end;
//****************************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.NotificationRemove(Sender: TObject);
var
x : Integer;
begin
for x := Count-1 downto 0 do
if (FList.Objects[x] = Sender) then
begin
FList.Delete(x);
RemovingObject(Sender as TiPlotObject);
DoChange;
Break;
end;
end;
//****************************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.NotificationRename(Sender: TObject);
var
x : Integer;
begin
for x := 0 to Count-1 do
TiPlotObjectAccess((FList.Objects[x] as TiPlotObject)).NotificationRename(Sender);
end;
//****************************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.NotificationSetFocus(Sender: TObject);
var
x : Integer;
begin
for x := 0 to Count-1 do
TiPlotObjectAccess((FList.Objects[x] as TiPlotObject)).NotificationSetFocus(Sender);
end;
//*************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.Clear;
begin
{ while FList.Count <> 0 do
begin
TiPlotObjectAccess(Items[Count-1]).OnLayoutChange := nil;
TiPlotObjectAccess(Items[Count-1]).OnChange := nil;
Delete(Count-1);
end;
DoChange;}
end;
//*************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.Delete(Index : Integer);
begin
FList.Delete(Index);
end;
//*************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.DoChange;
begin
if Assigned(FOnChange) then FOnChange(Self);
end;
//****************************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.RemovingObject(AObject: TiPlotObject);
begin
end;
//*************************************************************************************************************************************
function TiPlotObjectManagerCustom.GetCount: Integer;
begin
Result := FList.Count;
end;
//*************************************************************************************************************************************
function TiPlotObjectManagerCustom.GetObject(Index : Integer): TiPlotObject;
begin
Result := FList.Objects[Index] as TiPlotObject;
end;
//****************************************************************************************************************************************************
function TiPlotObjectManagerCustom.GetItem(Index: Integer): TiPlotObject;
begin
Result := GetObject(Index) as TiPlotObject;
end;
//*************************************************************************************************************************************
function TiPlotObjectManagerCustom.DoWriteToStream: Boolean;
begin
Result := Count <> 0;
end;
//*************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.WriteToStream(Writer: TWriter);
var
x : Integer;
begin
Writer.RootAncestor := Owner;
TWriterAccess(Writer).WriteValue(vaCollection);
for x := 0 to Count - 1 do
begin
Writer.WriteListBegin;
WriterWriteProperties(Writer, GetObject(x));
Writer.WriteListEnd;
end;
Writer.WriteListEnd;
end;
//*************************************************************************************************************************************
procedure TiPlotObjectManagerCustom.ReadFromStream(Reader: TReader);
var
Item : TiPlotObject;
begin
Clear;
if not Reader.EndOfList then Clear;
if TReaderAccess(Reader).ReadValue <> vaCollection then exit;
while not Reader.EndOfList do
begin
Item := CreateObject;
Reader.ReadListBegin;
while not Reader.EndOfList do TReaderAccess(Reader).ReadProperty(Item);
Reader.ReadListEnd;
TiPlotObjectAccess(Item).Loaded;
end;
Reader.ReadListEnd;
end;
//****************************************************************************************************************************************************
function TiPlotObjectManagerCustom.GetIndex(AObject: TiPlotObject): Integer;
begin
Result := FList.IndexOfObject(AObject);
end;
//****************************************************************************************************************************************************
function TiPlotObjectManagerCustom.GetObjectByName(Value: String): TiPlotObject;
var
x : Integer;
iPlotObject : TiPlotObject;
begin
Result := nil;
for x := 0 to FList.Count-1 do
begin
iPlotObject := FList.Objects[x] as TiPlotObject;
if UpperCase(iPlotObject.Name) = UpperCase(Value) then
begin
Result := iPlotObject;
Exit;
end;
end;
end;
//****************************************************************************************************************************************************
function TiPlotObjectManagerCustom.GetIndexByName(Value: String): Integer;
var
x : Integer;
begin
Result := -1;
for x := 0 to Count-1 do
if UpperCase(Items[x].Name) = UpperCase(Value) then
begin
Result := x;
Exit;
end;
end;
//*************************************************************************************************************************************
{ TiPlotObjectOwnedManager }
//****************************************************************************************************************************************************
procedure TiPlotObjectOwnedManager.Clear;
var
AList : TStringList;
begin
AList := TStringList.Create;
try
AList.Assign(FList);
while AList.Count <> 0 do
begin
AList.Objects[0].Free;
AList.Delete(0);
end;
finally
AList.Free;
end;
end;
{//****************************************************************************************************************************************************
procedure TiPlotObjectOwnedManager.Delete(Index: Integer);
var
AObject : TObject;
begin
AObject := FList.Objects[Index];
//inherited Delete(Index);
AObject.Free;
DoChange;
end;}
//****************************************************************************************************************************************************
procedure TiPlotObjectOwnedManager.NotificationRemove(Sender: TObject);
var
x : Integer;
begin
if Sender = Self then exit;
for x := 0 to Count-1 do
if FList.Objects[x] <> Sender then
TiPlotObjectAccess((FList.Objects[x] as TiPlotObject)).NotificationRemove(Sender);
inherited NotificationRemove(Sender);
end;
//****************************************************************************************************************************************************
{TiPlotToolBarManager}
//****************************************************************************************************************************************************
function TiPlotToolBarManager.CreateObject : TiPlotObject;
begin
Result := TiPlotToolBar.Create(FOwner, FOnChange, FOnInsert, FOnRemove, FOnRename);
end;
//****************************************************************************************************************************************************
procedure TiPlotToolBarManager.NotificationInsert(Sender: TObject);
var
iPlotToolBar : TiPlotToolBar;
begin
if Sender is TiPlotToolBar then
begin
iPlotToolBar := Sender as TiPlotToolBar;
InsertObject(iPlotToolBar);
if iPlotToolBar.Name = '' then
begin
iPlotToolBar.Name := GetNextName;
end;
end;
end;
//****************************************************************************************************************************************************
function TiPlotToolBarManager.GetItem(Index: Integer): TiPlotToolBar;
begin
Result := GetObject(Index) as TiPlotToolBar;
end;
//****************************************************************************************************************************************************
function TiPlotToolBarManager.GetName: String;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -