📄 link.pas
字号:
unit Link;interfaceuses Point, Table, Qt, SysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs, QStdCtrls;type TFrmMain = class(TForm) Memo: TMemo; BtnAdd: TButton; BtnDelete: TButton; BtnInsert: TButton; BtnSearch: TButton; procedure FormCreate(Sender: TObject); procedure BtnAddClick(Sender: TObject); procedure BtnInsertClick(Sender: TObject); procedure BtnDeleteClick(Sender: TObject); procedure BtnSearchClick(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } FList: PMyList; public { Public declarations } procedure DoDisplay(); end;var FrmMain: TFrmMain;implementationuses Add, Insert, Delete, Search;{$R *.xfm}procedure TFrmMain.FormCreate(Sender: TObject);begin FList := Table.Create();end;procedure TFrmMain.BtnAddClick(Sender: TObject);var FrmAdd: TFrmAdd; Data: PMyData;begin FrmAdd := TFrmAdd.Create( Self ); try if FrmAdd.ShowModal() = mrOK then begin // Create a new Data record New( Data ); Data^.X := StrToIntDef( FrmAdd.EdtX.Text, 0 ); Data^.Y := StrToIntDef( FrmAdd.EdtY.Text, 0 ); // Add it Table.Add( FList, Data ); DoDisplay(); end; finally FrmAdd.Free(); FrmAdd := nil; end;end;procedure TFrmMain.BtnInsertClick(Sender: TObject);var FrmInsert: TFrmInsert; Data: PMyData;begin FrmInsert := TFrmInsert.Create( Self ); try if FrmInsert.ShowModal() = mrOK then begin // Create a new Data record New( Data ); Data^.X := StrToIntDef( FrmInsert.EdtX.Text, 0 ); Data^.Y := StrToIntDef( FrmInsert.EdtY.Text, 0 ); // Insert it Table.Insert( FList, Data, StrToIntDef( FrmInsert.EdtPosition.Text, -1 ) ); DoDisplay(); end; finally FrmInsert.Free(); FrmInsert := nil; end;end;procedure TFrmMain.BtnDeleteClick(Sender: TObject);var FrmDelete: TFrmDelete;begin FrmDelete := TFrmDelete.Create( Self ); try if FrmDelete.ShowModal() = mrOK then begin // Delete it Table.Delete( FList, StrToIntDef( FrmDelete.EdtPosition.Text, -1 ) ); DoDisplay(); end; finally FrmDelete.Free(); FrmDelete := nil; end;end;procedure TFrmMain.BtnSearchClick(Sender: TObject);var FrmSearch: TFrmSearch; Data: PMyData; PosReturn: Integer; Msg: string;begin FrmSearch := TFrmSearch.Create( Self ); try if FrmSearch.ShowModal() = mrOK then begin // Create a new Data record New( Data ); Data.X := StrToIntDef( FrmSearch.EdtX.Text, 0 ); Data.Y := StrToIntDef( FrmSearch.EdtY.Text, 0 ); // Search it PosReturn := Table.Search( FList, Data ); if PosReturn = -1 then begin Msg := Format( '[ %d, %d ] not Found.', [ Data.X, Data.Y ] ); Application.MessageBox( Msg, 'Search Result', [ smbOK ], smsInformation ); if Memo.HasSelection then Memo.UnSelect(); end else begin// Msg := Format( '[ %d, %d ] at Node %d.', [ Data.X, Data.Y, PosReturn ] );// Application.MessageBox( Msg, 'Search Result', [ smbOK ], smsInformation ); if Memo.HasSelection then Memo.UnSelect(); Memo.SetFocus(); QMultiLineEdit_setCursorPosition( Memo.Handle, 2*PosReturn+2, 0, false ); // false means whether extends old selection. Memo.SelLength := Length( Memo.Lines[ 2*PosReturn+2 ] ) + Length( Memo.Lines[ 2*PosReturn+3 ] ) + 2; end; end; finally FrmSearch.Free(); FrmSearch := nil; end;end;procedure TFrmMain.DoDisplay;var CurrNode: PMyNode; NewLine: string; i: Integer; X, Y: Integer;begin Memo.Lines.Clear(); case FList^.Count of 0: NewLine := 'No Nodes.'; 1: NewLine := 'Total 1 Node.'; else NewLine := Format( 'Total %d Nodes.', [ FList^.Count ] ); end; Memo.Lines.Add( NewLine ); Memo.Lines.Add( '======================================' ); // Show the last node of the list CurrNode := FList^.Node; i := 0; while CurrNode <> nil do begin NewLine := Format( 'Node %d:', [ i ] ); Memo.Lines.Add( NewLine ); Point.Access( PMyData( CurrNode^.Data ), X, Y ); NewLine := Format( ' X = %d; Y = %d.', [ X, Y ] ); Memo.Lines.Add( NewLine ); CurrNode := CurrNode^.Next; Inc( i ); end;end;procedure TFrmMain.FormDestroy(Sender: TObject);begin Table.Destroy( FList );end;end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -