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

📄 link.~pas

📁 《Kylix程序设计》一书中附带的例程源代码
💻 ~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 + -