看了一些控件的源码?发现好多语法问题困扰,无奈。
type  TQSData = packed record
    P0,P1,P2: TPoint;
    Px2,DPx2,Qx: TPoint;
    Result: Integer;
    Step,Limit: Word;
    Mode,Last: Byte;
    case Integer of
//问题1:这里的Integer是Integer类型吗?可否用一个Integer类型的变量a来代替呢?
    0: (Source,Prev: TPoint);
    1: (Rect: TRect);
  end;
  TPointArray = array[0..$FFFFFF] of TPoint;
//问题2:以上的含义是定义array[0..$FFFFFF] of TPoint类型的数据吗?如果是定义为什么不用
var 
  TPointArray:array[0..$FFFFFF] of TPoint呢?这两种写法有什么差异?
  另外数组定义中$FFFFFF这种表示法与普通如200的表示法有什么差异?  PPointArray = ^TPointArray;
  //问题3:以上的含义是定义TPointArray类型的指针吧?与Var PPointArray:^TPointArray的差别是
  什么呢?
  PPoint = ^TPoint;
  TPointFunc = function(LType:TLineType;P:PPointArray;I,Count:Integer;var Data: TQSData): Boolean;
  //问题4:以上函数的前面是什么意思?为什么要加TPointFunc?加了之后对函数原定义有什么影响?TPointFunc具体的含义是什么呢?
procedure ExtendRect(var R: TRect; const P: TPoint);
//问题5:以上定义的过程,R表示传递应用?P表示传递值,那为什么加const,与不加const有什么差别?
--谢谢 !,另外如果各位能留下MSN在线交流就更方便了:)我的MSN:[email protected]

解决方案 »

  1.   

    TPointArray = array[0..$FFFFFF] of TPoint;
    //问题2:以上的含义是定义array[0..$FFFFFF] of TPoint类型的数据吗?如果是定义为什么不用
    var 
      TPointArray:array[0..$FFFFFF] of TPoint呢?这两种写法有什么差异?
      另外数组定义中$FFFFFF这种表示法与普通如200的表示法有什么差异?
    ///////////////////////////////////////////
    TPointArray = array[0..$FFFFFF] of TPoint;是定义一种数据类型,而
    var 
      TPointArray: array[0..$FFFFFF] of TPoint;
    刚是定义变量.
    应该说var pa: array[0..$FFFFFF] of TPoint;和var pa: TPonintArray;是等同的PPointArray = ^TPointArray;
    //问题3:以上的含义是定义TPointArray类型的指针吧?与Var PPointArray:^TPointArray的差别是什么呢?
    ////////////////////////////////////
    和问题2是一样的  TPointFunc = function(LType:TLineType;P:PPointArray;I,Count:Integer;var Data: TQSData): Boolean;
      //问题4:以上函数的前面是什么意思?为什么要加TPointFunc?加了之后对函数原定义有什么影响?TPointFunc具体的含义是什么呢?
    ///////////////////////////////////////
    这是定义函数指针procedure ExtendRect(var R: TRect; const P: TPoint);
    //问题5:以上定义的过程,R表示传递应用?P表示传递值,那为什么加const,与不加const有什么差别?
    ///////////////////////////////////////
    变量前加const当然表示它是不可修改的
      

  2.   

    谢谢 Microsnow(冰火)的解答,请问能具体说一下问题4,在什么情况下需要这样处理吗?
      TPointFunc = function(LType:TLineType;P:PPointArray;I,Count:Integer;var Data: TQSData): Boolean;
      //问题4:以上函数的前面是什么意思?为什么要加TPointFunc?加了之后对函数原定义有什么影响?TPointFunc具体的含义是什么呢?
    ///////////////////////////////////////
    这是定义函数指针
      

  3.   

    我在Delphi中调用VC写的一个DLL文件的时候,就定义了一个DLL里的函数指针.不知道你有没有使用DLL编程
      

  4.   

    to Microsnow(冰火)用的比较少,通常接触的都是数据库方面东西,可以贴出来吗?另外方便留下MSN吗?或则添加我:MSN:[email protected],thanks!
      

  5.   

    贴一段代码摘录:
    type SJBID = packed record
      dwSize: DWORD;
      bSN: array[0..11]of Byte;
      wDrive: WORD;
      wPID: WORD;
      wVID: WORD;
      dwMajor: DWORD;
      dwMinor: DWORD;
    end;
      JBID = SJBID;
      LPJBID = ^JBID;  pDWORD = ^DWORD;type JoyBeeExist = function(Number: pDWORD): LPJBID; cdecl;......
    ......
    procedure TF_main.Button1Click(Sender: TObject);
    var
      hInst: THandle;
      MyJoyBeeExist: JoyBeeExist;
      dwNum: DWORD;
      retCode: LongInt;
      lpJBIDArray: LPJBID;
      OSVersion: OSVERSIONINFO;
      Space: Double;
      temp: Word;
    begin
      if USBDrive>1 then
      begin
        Application.MessageBox(PChar(Str12+#13+Str13), 'Joybee 720 Software Upgrade',
          MB_ICONINFORMATION+MB_YESNO);
        button1.Enabled := False;
        Exit;
      end;
      OSVersion.dwOSVersionInfoSize := Sizeof(OSVERSIONINFO);
      GetVersionEx(OSVersion);
      dwNum := 0;
      if OSVersion.dwMajorVersion >= 5 then
        hInst := LoadLibrary('PJoybee720.dll')
      else
        hInst := LoadLibrary('RJoybee720.dll');
      if hInst = 0 then
      begin
        ShowMessage('Don''t find the Joybee720.dll.');
        Exit;
      end;
      MyJoyBeeExist := GetProcAddress(hInst, 'JoyBeeExist');
      lpJBIDArray := MyJoyBeeExist(@dwNum);
      if lpJBIDArray <> nil then
      begin
        if dwNum=0 then
        begin
          ShowMessage('Don''t find Joybee 720 connected to the system.');
          Exit;
        end
        else
        begin
          temp := lpJBIDArray.wDrive;
          Space := GetDiskSpace(Chr(temp+65)+':');
          if (Space>4.5) and (Space<5.0) then
            dwDrive := temp
          else
            dwDrive := Pebble;
          if Application.MessageBox(PChar(Str1+#13+Str2), 'Joybee 720 Software Upgrade',
            MB_ICONQUESTION+MB_YESNO)=IDYES then
          begin
            if dwDrive <> 0 then
            begin
              if Application.MessageBox(PChar(Str3+#13+Str4),
                'Joybee 720 Software Upgrade', MB_ICONQUESTION+MB_YESNO)
                =IDYES then
              begin
                //Label1.Caption := 'Formating Joybee 720 system...';
                retCode := SHFormatDrive(Application.Handle, dwDrive, $FFFF, 1);
                if retCode=0 then
                  if Application.MessageBox(PChar(Str5+#13+Str6), 'Joybee 720 Software Upgrade',
                    MB_ICONQUESTION+MB_YESNO)=IDYES then
                  begin
                    CopyFiles;
                  end;
              end
              else
              begin
                if Application.MessageBox(PChar(Str6),'Joybee 720 Software Upgrade', MB_ICONQUESTION+MB_YESNO)=IDYES then
                begin
                  CopyFiles;
                end;
              end;
            end;
          end;
        end;
      end
      else
      begin
        Label1.Caption := Str7;
      end;  FreeLibrary(hInst);
    end;
      

  6.   

    另外请到贴占个坑,好给分:http://community.csdn.net/Expert/TopicView.asp?id=4153637
      

  7.   

    另外请 Microsnow(冰火) 到贴占个坑,好给分:http://community.csdn.net/Expert/TopicView.asp?id=4153637,谢谢!