zoukankan      html  css  js  c++  java
  • 记录类型指针

    以下例子利用记录类型指针实现:

    获取窗体所有按钮的名字和对应的id值。

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      pmyrec=^Tmyrec;//記錄類型指針要定義在對應的記錄類型之前。
      Tmyrec=record
        id:Integer;
        mybutt:TButton;
        pior:pmyrec;
        next:pmyrec;
      end;
      //pmyrec=^Tmyrec;//記錄類型指針定義在對應的記錄類型之後會報錯:Identifier redeclared: 'pmyrec'
    
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure Button1Click(Sender: TObject);
      private
        firstnode:pmyrec;//記錄類型指針pmyrec定義在前面這裡才能引用(故將其定義在type之後是有原因滴~)。
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      currnode,trannode,p1,p2:pmyrec;
      i,j:Integer;
    
    begin
      trannode:=nil;
      j:=0;
      for i:=0 to Self.ComponentCount-1 do
      begin
        if (Self.Components[i]is TButton) then
        begin
          inc(j);
          currnode:=new(pmyrec);
          currnode^.id:=j;//對於記錄類型指針,這裡有無尖角符都可以。
          currnode.mybutt:=Self.components[i]as TButton;
          currnode.pior:=nil;//此句在當次的循環就用到了,將下面的currnode.pior初始化為nil。
          currnode.next:=nil;//此句在下次的循環才用到,將trannode.next初始化為nil。
          if trannode=nil then
            firstnode:=currnode
          else
            trannode.next:=currnode;//‘上一個地址’的下一個指向地址是‘當前地址’!
          currnode.pior:=trannode;//‘當前地址’的前一個指向地址是‘上一個地址’!
          trannode:=currnode;//把‘當前地址’賦給‘上一個地址’變量,留待下一次循環賦值。
        end;
      end;
      p1:=firstnode;
      while p1<>nil do
      begin
        p2:=p1;
        ShowMessageFmt('按鈕名:%s,id值:%d',[p2.mybutt.Name,p2.id]);
        p1:=p2.next;
      end;
      Dispose(currnode); 
    end;
    
    end.

     

  • 相关阅读:
    java 学习之JVM深入分析(一)
    选择排序算法实现十个1100的随机数的排序
    spring基础知识概述
    mybatis 总结一
    ACM之java判断回文数
    Spring mvc框架
    C#实现窗体最小化到状态栏,双击运行时又能正常显示窗体
    Android调用相机并将照片存储到SD卡上实现方法
    c#中如何让一个窗体在另一个旁边
    C#实现获取时间
  • 原文地址:https://www.cnblogs.com/168-h/p/14805045.html
Copyright © 2011-2022 走看看