⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iplotmanagers.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  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 + -