📄 unit1.~pas
字号:
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 + -