📄 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: TMyList; public { Public declarations } procedure DoDisplay(); end;var FrmMain: TFrmMain;implementationuses Add, Insert, Delete, Search;{$R *.xfm}procedure TFrmMain.FormCreate(Sender: TObject);begin FList := Table.TMyList.Create();end;procedure TFrmMain.BtnAddClick(Sender: TObject);var FrmAdd: TFrmAdd; Data: TMyData;begin FrmAdd := TFrmAdd.Create( Self ); try if FrmAdd.ShowModal() = mrOK then begin // Create a new Data record Data := TMyData.Create( StrToIntDef( FrmAdd.EdtX.Text, 0 ), StrToIntDef( FrmAdd.EdtY.Text, 0 ) ); // Add it FList.Add( Data ); DoDisplay(); end; finally FrmAdd.Free(); FrmAdd := nil; end;end;procedure TFrmMain.BtnInsertClick(Sender: TObject);var FrmInsert: TFrmInsert; Data: TMyData;begin FrmInsert := TFrmInsert.Create( Self ); try if FrmInsert.ShowModal() = mrOK then begin // Create a new Data record Data := TMyData.Create( StrToIntDef( FrmInsert.EdtX.Text, 0 ), StrToIntDef( FrmInsert.EdtY.Text, 0 ) ); // Insert it FList.Insert( 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 FList.Delete( StrToIntDef( FrmDelete.EdtPosition.Text, -1 ) ); DoDisplay(); end; finally FrmDelete.Free(); FrmDelete := nil; end;end;procedure TFrmMain.BtnSearchClick(Sender: TObject);var FrmSearch: TFrmSearch; Data: TMyData; X, Y: Integer; PosReturn: Integer; Msg: string;begin FrmSearch := TFrmSearch.Create( Self ); try if FrmSearch.ShowModal() = mrOK then begin // Create a new Data record Data := TMyData.Create( StrToIntDef( FrmSearch.EdtX.Text, 0 ), StrToIntDef( FrmSearch.EdtY.Text, 0 ) ); // Search it PosReturn := FList.Search( Data ); if PosReturn = -1 then begin Data.Access( X, Y ); Msg := Format( '[ %d, %d ] not Found.', [ X, 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 ); TMyData( CurrNode^.Data ).Access( 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 FList.Destroy();end;end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -