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

📄 unit1.~pas

📁 电气控制仿真软件
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
procedure TForm1.SpeedButton63Click(Sender: TObject);
var
  p : TPoint;
begin
  p := Point( 0, SpeedButton63.Height );
  p := SpeedButton63.ClientToScreen( p );
  PopupMenu3.Popup( p.x, p.y );
end;

procedure TForm1.N19Click(Sender: TObject);
var
  m, n : Integer;
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  n := IGroup( Sheet1.Selection ).Protect;
  m := TMenuItem(Sender).Tag;
  if( ( n and m ) = m ) then
    n := n - m
  else
    n := n + m;
  IGroup( Sheet1.Selection ).Protect := n;
end;

procedure TForm1.CmAddSheetClick(Sender: TObject);
begin

  vgctrl3.AddSheet;
//等价于下面的程序
//  vgctrl3.Execute( 'AddSheet()' );

end;

procedure TForm1.CmDeleteSheetClick(Sender: TObject);
var
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  vgctrl3.DeleteSheet( Sheet1 );
//等价于下面的程序
//  vgctrl3.Execute( 'DeleteSheet( ActiveSheet )' );

end;

procedure TForm1.ListBox5Click(Sender: TObject);
begin
  CmDeleteSheet.Enabled := ListBox5.ItemIndex >= 0;

  vgctrl3.ActiveSheetIndex := ListBox5.ItemIndex;
//等价于下面的程序
//  vgctrl3.Execute( 'ActiveSheetIndex = ' + IntToStr( ListBox5.ItemIndex ) );

end;

procedure TForm1.SpeedButton64Click(Sender: TObject);
var
  Index : Integer;
begin
  ShowMessage( 'Visual Graph支持自行开发元件库,选择下面列表中的元件,然后在窗口内画。' );
  if OpenDialog1.Execute then
  begin
    Index := ComboBox1.Items.IndexOf( OpenDialog1.FileName );
    if( Index < 0 )then
      ComboBox1.ItemIndex := ComboBox1.Items.Add( OpenDialog1.FileName );
    ComboBox1.OnClick( ComboBox1 );
  end;
end;

procedure TForm1.ListBox4Click(Sender: TObject);
begin

  vgctrl3.NewUnit( ListBox4.Items.Strings[ListBox4.ItemIndex], 0 );
//等价于下面的程序
//  vgctrl3.Execute( 'NewUnit( "' + ListBox4.Items.Strings[ListBox4.ItemIndex] + '", 0 )' );

end;

procedure TForm1.ComboBox1Click(Sender: TObject);
var
  i, n : Integer;
  s : String;
begin
  lib.Run( ComboBox1.Items.Strings[ComboBox1.ItemIndex] );

  n := lib.SheetCount;
  ListBox4.Items.Clear();
  for i := 0 to n - 1 do
  begin
    s := ISheet( lib.Sheets[i] ).Name;
    ListBox4.Items.Add( s );
  end;
  lib.Library_ := true;
end;

procedure TForm1.ListBox4MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ListBox4.ItemIndex >= 0 then
    ListBox4.BeginDrag( false );
end;

procedure TForm1.vgctrl3DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source = ListBox4 then
    ListBox4.EndDrag( true );
end;

procedure TForm1.vgctrl3DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source = ListBox4 then
  begin
//设置当前的元件库,元件可以拖动到画面中
    vgctrl3.NewUnit( ListBox4.Items.Strings[ListBox4.ItemIndex], 1 );
//等价于下面的程序
//    vgctrl3.Execute( 'NewUnit( "' + ListBox4.Items.Strings[ListBox4.ItemIndex] + '", 1 )' );
  end;
end;

procedure TForm1.SpeedButton65Click(Sender: TObject);
begin
  ListBox5.Items.Clear;
  vgctrl3.Design( '' );
end;

procedure TForm1.SpeedButton66Click(Sender: TObject);
begin

  vgctrl3.SaveToFile('');
//等价于下面的程序
//  vgctrl3.Execute( 'SaveToFile("")' );

end;

procedure TForm1.SpeedButton67Click(Sender: TObject);
var
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  IGroup( Sheet1.Selection ).MakeElliment;
//等价于下面的程序
//  vgctrl3.Execute( 'Selection.MakeElliment()' );

end;

procedure TForm1.SpeedButton68Click(Sender: TObject);
var
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  IGroup( Sheet1.Selection ).SplitElliment;
//等价于下面的程序
//  vgctrl3.Execute( 'Selection.SplitElliment()' );

end;

procedure TForm1.SpeedButton69Click(Sender: TObject);
var
  p : TPicture;
  d : IShape;
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  if OpenPictureDialog1.Execute then
  begin
    p := TPicture.Create;
    try
      p.LoadFromFile( OpenPictureDialog1.FileName );

      d := IShape( Sheet1.AddUnit( 'Shape', 0, 0, p.Width, p.Height ) );
      d.Type_ := 'Rect';
      d.Picture := OpenPictureDialog1.FileName;
      d.Protect := 12;
//等价于下面的程序
//      vgctrl3.Execute( 'd = AddUnit("Shape",0,0,' + IntToStr( p.Width ) + ',' + IntToStr( p.Height ) + ');d.Type="Rect";d.Picture="' + OpenPictureDialog1.FileName + '";d.Protect=12' );

    finally
      p.Free;
    end;
  end;
end;

procedure TForm1.CmWVClick(Sender: TObject);
var
  n, d : Integer;
  s : String;
begin
  s := CmWV.Text;
  n := Length( s );

  if( n > 0 ) and ( s[n] = '%' )then
    s[n] := #0;
  d := StrToIntDef( s, 100 );
  if( d < 25 )then
    d := 25;
  if( d > 10000 )then
    d := 10000;

  vgctrl3.Zoom := d;
//等价于下面的程序
//  vgctrl3.Execute( 'Zoom = ' + IntToStr( d ) );

  Windows.SetFocus( vgctrl3.Handle );
end;

procedure TForm1.vgctrl3SelectChange(Sender: TObject);
var
  i, n : Integer;
  cn : String;
  cid : Integer;
  HasElliment, HasText : Boolean;
  Sheet : ISheet;
  Selection : IGroup;
  u : IUnit;
begin
  Sheet := ISheet( vgctrl3.ActiveSheet );
  Selection := IGroup( Sheet.Selection );
  n := Selection.UnitCount;
  SpeedButton67.Enabled := n > 0;
  for i := 0 to n - 1 do
  begin
    u := IUnit( Selection.Units[i] );
    cid := u.ClassId;
    if cid = 99 then
      HasElliment := true
    else if cid = 1 then
      HasText := true;
  end;

  SpeedButton68.Enabled := ( n > 0 ) and ( HasElliment );
  SpeedButton7.Enabled := n > 0;
  SpeedButton8.Enabled := n > 0;
  SpeedButton10.Enabled := n > 0;
  SpeedButton12.Enabled := n > 0;
  SpeedButton13.Enabled := n > 0;
  SpeedButton14.Enabled := n > 0;
  SpeedButton15.Enabled := n > 0;
  SpeedButton16.Enabled := n > 0;
  SpeedButton17.Enabled := n > 0;
  SpeedButton18.Enabled := n > 0;
  SpeedButton19.Enabled := n > 0;
  SpeedButton20.Enabled := n > 0;
  SpeedButton21.Enabled := n > 0;
  SpeedButton28.Enabled := n > 0;
  SpeedButton50.Enabled := n > 0;
  SpeedButton53.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton54.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton55.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton56.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton57.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton58.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton59.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton60.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton61.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton62.Enabled := ( n > 0 ) and ( HasText );
  SpeedButton63.Enabled := n > 0;
  SpeedButton29.Enabled := n > 0;
  SpeedButton70.Enabled := n > 0;
  SpeedButton71.Enabled := n > 0;
  SpeedButton72.Enabled := n > 0;
end;

procedure TForm1.CmWVKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    CmWV.OnClick( CmWV );
  end;
end;

procedure TForm1.vgctrl3Error(Sender: TObject; const Msg: WideString);
begin
  ShowMessage( Msg );
end;

procedure TForm1.PopupMenu3Popup(Sender: TObject);
var
  i, m, n : Integer;
  mi : TMenuItem;
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  n := IGroup( Sheet1.Selection ).Protect;
//等价于下面的程序
//  n := vgctrl3.Calculate( 'Selection.Protect' );

  for i := 0 to PopupMenu3.Items.Count - 1 do
  begin
    mi := TMenuItem( PopupMenu3.Items[i] );
    m := mi.Tag;
    mi.Checked := ( ( n and m ) = m );
  end;
end;

procedure TForm1.SpeedButton29Click(Sender: TObject);
var
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  IGroup( Sheet1.Selection ).Left := IGroup( Sheet1.Selection ).Left - 1;
//等价于下面的程序
//  vgctrl3.Execute( 'Selection.Left = Selection.Left - 1' );

end;

procedure TForm1.SpeedButton70Click(Sender: TObject);
var
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  IGroup( Sheet1.Selection ).Top := IGroup( Sheet1.Selection ).Top - 1;
//等价于下面的程序
//  vgctrl3.Execute( 'Selection.Top = Selection.Top - 1' );

end;

procedure TForm1.SpeedButton71Click(Sender: TObject);
var
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  IGroup( Sheet1.Selection ).Left := IGroup( Sheet1.Selection ).Left + 1;
//等价于下面的程序
//  vgctrl3.Execute( 'Selection.Left = Selection.Left + 1' );

end;

procedure TForm1.SpeedButton72Click(Sender: TObject);
var
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  IGroup( Sheet1.Selection ).Top := IGroup( Sheet1.Selection ).Top + 1;
//等价于下面的程序
//  vgctrl3.Execute( 'Selection.Top = Selection.Top + 1' );

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i : Integer;
begin
  vgctrl4.Run( '马鞍山.tbl' );
  for i := 0 to Panel12.ControlCount - 1 do
  begin
    Panel12.Controls[i].Enabled := true;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  with TForm2.Create( Self ) do
  begin
    vgctrl := vgctrl4;
    ShowModal;
    Free;
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  with TForm3.Create( Self ) do
  begin
    vgctrl := vgctrl4;
    ShowModal;
    Free;
  end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  i : Integer;
  dn : string;
  tick : Longword;
  d : IUnit;
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl4.ActiveSheet );
  dn := '变电所标签7';
  ShowMessage( '因设备出现故障,报警信息来到,相关的设备自动滚动到屏幕中央,并闪烁。' );

  d := IUnit( Sheet1.UnitByName( dn ) );
  vgctrl4.ScrollToCenter( d.Left, d.Top );
//等价于下面的程序
//  vgctrl4.Execute( 'ScrollToCenter( ' + dn + '.Left, ' + dn + '.Top )' );

  for i := 0 to 5 do
  begin

    d.Visible := not d.Visible;
    UpdateWindow( vgctrl4.Handle );
//等价于下面的程序
//    vgctrl4.Execute( dn + '.Visible = not ' + dn + '.Visible;Update()' );

    tick := GetTickCount;
    while GetTickCount - tick < 300 do
    begin
      ;
    end;
  end;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i, n : Integer;
  IsElliment : Boolean;
  nm, tp : String;
  li :  TListItem;
  d : IUnit;
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl4.ActiveSheet );
  n := Sheet1.UnitCount;
  for i := 0 to n - 1 do
  begin
    d := IUnit( Sheet1.Units[i] );
    IsElliment := d.ClassId = 99;
    if IsElliment and ( IElliment( d ).Type_ = '数据标签' ) then
    begin
      d.SetPropertyValue( 'YCValue', Random( 1000 ) / 100. );//YCValue是数据标签的隐藏属性。
    end;
  end;
//注意,为了加快刷新的速度,推荐:
//读入图形后,马上建立一张设备接口和图形对象的关系表(排序),设备接口存放在比如图形的Description或Id或Tag属性中。
//然后,在此,根据设备接口查找相对应的图形对象就快多了。
//这里为了简便,驱动图形数据的是一些随机值。
end;

procedure TForm1.SpeedButton73Click(Sender: TObject);
begin
//以下代码是分配全局内存,载入Memo1中存放的tbl文件,实际工作中,可以把tbl放在数据库中管理。
  ListBox5.Items.Clear;
  vgctrl3.LoadFromBuffer( Memo1.Lines.Text );
end;

procedure TForm1.SpeedButton74Click(Sender: TObject);
var
  s : WideString;
begin
//保存到Memo1中去,实际工作中,可以把图形存放到数据库里面。
  s := vgctrl3.SaveToBuffer;
  Memo1.Lines.Text := s;
end;

procedure TForm1.vgctrl3ModifyChange(Sender: TObject; Modified: WordBool);
begin
  SpeedButton2.Enabled := Modified;
end;

procedure TForm1.vgctrl3Message(Sender: TObject; Index: Integer;
  const Msg: WideString);
begin
  StatusBar1.Panels[Index-1].Text := Msg;
end;

procedure TForm1.vgctrl3ZoomChange(Sender: TObject; Zoom: Integer);
begin
  CmWV.Text := IntToStr( Zoom ) + '%';
end;

procedure TForm1.vgctrl3AddSheet(Sender: TObject; const ASheet: ISheet);
begin
  ListBox5.Items.Add( ASheet.Name );
end;

procedure TForm1.vgctrl3DeleteSheet(Sender: TObject; const ASheet: ISheet);
begin
  if( ASheet <> nil )then
    ListBox5.Items.Delete( ListBox5.ItemIndex );
end;

procedure TForm1.vgctrl3AddUnit(Sender: TObject; const AUnit: IUnit);
var
  i, n : Integer;
  HasText : Boolean;
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  n := Sheet1.UnitCount;
  for i := 0 to n - 1 do
  begin
    if IUnit( Sheet1.Units[i] ).ClassId = 1 then
      HasText := true;
  end;
  SpeedButton11.Enabled := n > 0;
  SpeedButton30.Enabled := ( n > 0 ) and ( HasText );
end;

procedure TForm1.vgctrl3DeleteUnit(Sender: TObject; const AUnit: IUnit);
var
  i, n : Integer;
  HasText : Boolean;
  Sheet1 : ISheet;
begin
  Sheet1 := ISheet( vgctrl3.ActiveSheet );
  n := Sheet1.UnitCount;
  for i := 0 to n - 1 do
  begin
    if IUnit( Sheet1.Units[i] ).ClassId = 1 then
      HasText := true;
  end;
  SpeedButton11.Enabled := n > 0;
  SpeedButton30.Enabled := ( n > 0 ) and ( HasText );
end;

procedure TForm1.vgctrl4Click(Sender: TObject);
var
  AUnit : IUnit;
begin
  AUnit := vgctrl4.ActiveSheet.UnitAtCursor( nil );
  if( AUnit <> nil )then
    ListBox3.Items.Add( 'OnUnitClick(' + AUnit.Name + ')' )
  else
    ListBox3.Items.Add( 'OnUnitClick()' );
  ListBox3.TopIndex := ListBox3.Items.Count - 6;
end;

procedure TForm1.vgctrl4DblClick(Sender: TObject);
var
  AUnit : IUnit;
begin
  AUnit := vgctrl4.ActiveSheet.UnitAtCursor( nil );
  if( AUnit <> nil )then
    ListBox3.Items.Add( 'OnUnitDblClick(' + AUnit.Name + ')' )
  else
    ListBox3.Items.Add( 'OnUnitDblClick()' );
  ListBox3.TopIndex := ListBox3.Items.Count - 6;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -