📄 main.pas
字号:
unit Main;interfaceuses SysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs, QStdCtrls;type TFrmMain = class(TForm) Memo: TMemo; BtnShow: TButton; BtnShowMsg: TButton; BtnCast: TButton; procedure BtnShowClick(Sender: TObject); procedure BtnShowMsgClick(Sender: TObject); procedure BtnCastClick(Sender: TObject); private { Private declarations } public { Public declarations } end; PInt = ^Integer; TRec = record case Boolean of true: ( I: Integer; ); false: ( P: PInt; ); end; PRec = ^TRec;var FrmMain: TFrmMain; X, Y: Integer; P1, P2, Q: PInt; Rec1, Rec2: TRec; Msg: string;implementation{$R *.xfm}procedure TFrmMain.BtnShowClick(Sender: TObject);label 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;begin Memo.Lines.Clear();// Memo.Lines.Add( IntToHex( Integer( P1 ), 8 ) ); 1: X := 100; Msg := 'X: $' + IntToHex( X, 8 ); Memo.Lines.Add( Msg ); Msg := '@X: $' + IntToHex( Integer( @X ), 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 2: Y := 1024; Msg := 'Y: $' + IntToHex( Y, 8 ); Memo.Lines.Add( Msg ); Msg := '@Y: $' + IntToHex( Integer( @Y ), 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 3: Rec1.P := @X; Msg := '@Rec1: $' + IntToHex( Integer( @Rec1 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'Rec1.P: $' + IntToHex( Integer( @Rec1.P ), 8 ); Memo.Lines.Add( Msg ); Msg := 'Rec1.I: $' + IntToHex( Rec1.I, 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 4: New( P1 ); Msg := 'P1: $' + IntToHex( Integer( P1 ), 8 ); Memo.Lines.Add( Msg ); Msg := '@P1: $' + IntToHex( Integer( @P1 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'P1^: $' + IntToHex( Integer( P1^ ), 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 5: P1^ := 256; Msg := 'P1^: $' + IntToHex( P1^, 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 6: P2 := P1;// Msg := 'P2^: $' + IntToStr( P2^ ); Msg := '@P2: $' + IntToHex( Integer( @P2 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'P2: $' + IntToHex( Integer( P2 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'P2^: $' + IntToHex( Integer( P2^ ), 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 7: Q := @Rec1; Msg := '@Q: $' + IntToHex( Integer( @Q ), 8 ); Memo.Lines.Add( Msg ); Msg := 'Q: $' + IntToHex( Integer( Q ), 8 ); Memo.Lines.Add( Msg ); Msg := 'Q^: $' + IntToHex( Integer( Q^ ), 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 8: Rec2 := Rec1; Msg := '@Rec2: $' + IntToHex( Integer( @Rec2 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'Rec2.I: $' + IntToHex( Rec2.I, 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 9: P1^ := P2^; Msg := '@P1: $' + IntToHex( Integer( @P1 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'P1: $' + IntToHex( Integer( P1 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'P1^: $' + IntToHex( Integer( P1^ ), 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); 10: P1^ := Integer( P2 ); Msg := '@P1: $' + IntToHex( Integer( @P1 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'P1: $' + IntToHex( Integer( P1 ), 8 ); Memo.Lines.Add( Msg ); Msg := 'P1^: $' + IntToHex( Integer( P1^ ), 8 ); Memo.Lines.Add( Msg ); Memo.Lines.Add( '------------------------------' ); Dispose( P1 );end;procedure TFrmMain.BtnShowMsgClick(Sender: TObject);var Return: TMessageButton; pText, pCaption: PChar;begin pText := 'Hello, June'; pCaption := 'Greeting'; Return := Application.MessageBox( pText, pCaption, [ smbOK, smbCancel ], smsInformation, smbOK, smbCancel ); case Return of smbOK: ; smbCancel: ; end;end;procedure TFrmMain.BtnCastClick(Sender: TObject);label 1, 2, 3, 4, 5, 6, 7, 8;var i: Integer; s, s1, s2: string; p, p1, p2: PChar;begin{ 1: SetLength( s1, 8 ); 2: SetLength( s2, 20 ); 3: s1 := 'June'; Memo.Lines.Add( 'After 3, s1 = ' + s1 ); 4: p1 := PChar( s1 ); Memo.Lines.Add( 'After 4, s1 = ' + s1 ); Memo.Lines.Add( 'After 4, p1 = ' + p1 ); 5: s1 := 'July'; Memo.Lines.Add( 'After 5, s1 = ' + s1 ); Memo.Lines.Add( 'After 5, p1 = ' + p1 );// UniqueString( s1 ); 6: s2 := ' is'; Memo.Lines.Add( 'After 6, s2 = ' + s2 ); 7: p2 := PChar( s1 + s2 ); Memo.Lines.Add( 'After 7, s2 = ' + s2 ); Memo.Lines.Add( 'After 7, p2 = ' + p2 ); 8: s2 := s2 + ' half a year.'; Memo.Lines.Add( 'After 8, s2 = ' + s2 ); Memo.Lines.Add( 'After 8, p2 = ' + p2 );// Memo.Lines.Add( p2 );// Memo.Lines.Add( p1 );}{// SetLength( s, 10 ); s := 'June'; UniqueString( s );// SetString( s, nil, 0 ); p := PChar( s ); for i := 0 to 2 do p[i] := 'M';// p[0] := Char( 'C' );// SetLength( s, 2 );// s := Copy( s, 0, 2 );// SetString Memo.Lines.Add( p ); // MMMe} s := 'June'; UniqueString( s ); // No this, no P[3]// SetString( s, nil, 0 ); p := PChar( s ); for i := 0 to 2 do p[i] := 'M'; Memo.Lines.Add( 'p = ' + p ); // MMMe Memo.Lines.Add( 's = ' + s ); p[3] := #0; Memo.Lines.Add( 'p = ' + p ); // MMM Memo.Lines.Add( 's = ' + s );end;end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -