长了一点,请各位高手耐心看一下!!!
下面有两段代码,第一段为主窗口单元文件(部分),第二段为自定义单元文件中一函数;
(((第一段)))
unit MainForm;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, MapXLib_TLB, ComCtrls, ExtCtrls, ToolWin,
  Menus, ScktComp,uwinsock;type
  TfrmMain = class(TForm)
    MainMenu1: TMainMenu;
    mmFile: TMenuItem;
    miExit: TMenuItem;
    mmAbout: TMenuItem;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    btnArrow: TToolButton;
    btnZoomIn: TToolButton;
    btnZoomOut: TToolButton;
    btnCall: TToolButton;
    btnStopCall: TToolButton;
    Panel1: TPanel;
    Map1: TMap;
    btnSelectAll: TButton;
    btnCancel: TButton;
    btnPan: TToolButton;
    tcpClient: TClientSocket;
    Panel2: TPanel;
    lvCar: TListView;
    btnSet: TToolButton;
    Memo1: TMemo;
    procedure btnArrowClick(Sender: TObject);
    procedure btnZoomInClick(Sender: TObject);
    procedure btnZoomOutClick(Sender: TObject);
    procedure btnPanClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure tcpClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure tcpClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure btnCallClick(Sender: TObject);
    procedure btnSetClick(Sender: TObject);
    procedure btnStopCallClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  frmMain: TfrmMain;implementationuses CallForm, LoginForm,uType,uFunction, GisSetForm,uDataBase;
{$R *.dfm}
procedure position;
var
  P420:CA420;
  i:Integer;
  sMid:string;
  lTemp:integer;
  strTemp:String;
  ListItem:TListItem;
  frmMain:TfrmMain;
begin
  PullInt(strpPackage, lTemp);
  P420.RecNum := lTemp;
  PullInt(strpPackage, lTemp);
  P420.GpsId := lTemp;
  PullInt(strpPackage, lTemp);
  P420.GpsType := lTemp;
  PullStr(strpPackage, strTemp);
  P420.time := strTemp;
  PullInt(strpPackage, lTemp);
  P420.Longitude := lTemp;
  PullInt(strpPackage, lTemp);
  P420.Latitude := lTemp;
  PullInt(strpPackage, lTemp);
  P420.Speed := lTemp;
  PullInt(strpPackage, lTemp);
  P420.Direction := lTemp;
  PullInt(strpPackage, lTemp);
  P420.Condition1 := lTemp;
  PullInt(strpPackage, lTemp);
  P420.CallInterval := lTemp;
  PullStr(strpPackage, strTemp);
  P420.SmDate := strTemp;
  PullStr(strpPackage, strTemp);
  P420.SmTime := strTemp;
  PullStr(strpPackage, strTemp);
  P420.SatInfo := strTemp;
  PullStr(strpPackage, strTemp);
  P420.SimNo := strTemp;
  sMid:=GetMid(P420.GpsId);
  ListItem :=frmMain.lvCar.Items.Add;
  ListItem.Caption := sMId;
  ListItem.SubItems.Add(IntToStr(P420.GpsId));
  ListItem.SubItems.Add(P420.SimNo);
  ListItem.SubItems.Add(FloatToStr(P420.Longitude/100000));
  ListItem.SubItems.Add(FloatToStr(P420.Latitude/100000));
  ListItem.SubItems.Add(FloatToStr(P420.Speed/10000));
  ListItem.SubItems.Add(Direction(P420.Direction));
  ListItem.SubItems.Add(P420.Time);
  ListItem.SubItems.Add(P420.SatInfo);
end;
Procedure ReceiveMessage();
var
  lCmd:integer;
begin
  strpPackage:=Trim(strpPackage);
  PullInt(strpPackage, lCmd);
  Case lCmd of
    101:Login;
    401:Position;  
  end;
end;
Procedure TCPConnection(strHostName:string;lHostPort:integer);
begin
  If strHostName <> '' Then
    frmMain.tcpClient.Host:=strHostName;
  If lHostPort <> 0 Then
    frmMain.tcpClient.Port:=lHostPort;
  frmMain.tcpClient.Open;
end;procedure TfrmMain.tcpClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Login:C101;
begin
  with Login do
  begin
    Username:=gbl_strUserName;
    Password:=gbl_strPassWord;
    TerminaterType:=2;
  end;
  memo1.Lines.Add('连接中心成功'+#13);
  strPackage:='';
  strPackage:='101'+' '+'0'+' '+Login.Username+' '+Login.Password+' '+IntToStr(Login.TerminaterType)+#10;
  tcpClient.Socket.SendText(strPackage);
end;procedure TfrmMain.tcpClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  strpPackage:=tcpClient.socket.ReceiveText;
  While gpsGetPackage(strpPackage) do
  begin
    showmessage(strpPackage);
    ReceiveMessage;
  end;
end;procedure TfrmMain.FormCreate(Sender: TObject);
begin
  TCPConnection('192.168.51.3', 5000); 
end;end.((((第二段)))))
Procedure login();
var
  P101:A101;
  func:array[1..5] of integer;
  i:Integer;
  lTemp:integer;
  strTemp:String;
begin
  PullInt(strpPackage, lTemp);
  P101.RecNum := lTemp;
  If P101.RecNum = 0 Then
  begin
    PullInt(strpPackage, lTemp);
    P101.UserId := lTemp;
    PullInt(strpPackage, lTemp);
    P101.CallIntervalBase := lTemp;
    PullInt(strpPackage, lTemp);
    P101.AlarmInterval := lTemp;
    PullInt(strpPackage, lTemp);
    P101.DataRedisRecordUpLim := lTemp;
    P101.UserFunction := '';
    For i := 1 To 5 do
    begin
      PullInt(strpPackage, func[i]);
      P101.UserFunction := P101.UserFunction + IntToStr(func[i]);
    end;
    PullInt(strpPackage, lTemp);
    P101.lFlag := lTemp;
    PullStr(strpPackage, strTemp);
    P101.Version := strTemp;
    frmMain.memo1.Lines.Add('用户注册成功'+#13);
    gbl_iUserId := P101.UserId;
  end
End;第一段代码顺利运行,但:
  ListItem :=frmMain.lvCar.Items.Add;
  ListItem.Caption := sMId;
  ListItem.SubItems.Add(IntToStr(P420.GpsId));
  ListItem.SubItems.Add(P420.SimNo);
  ListItem.SubItems.Add(FloatToStr(P420.Longitude/100000));
  ListItem.SubItems.Add(FloatToStr(P420.Latitude/100000));
  ListItem.SubItems.Add(FloatToStr(P420.Speed/10000));
  ListItem.SubItems.Add(Direction(P420.Direction));
  ListItem.SubItems.Add(P420.Time);
  ListItem.SubItems.Add(P420.SatInfo);
 在同一窗体单元中为什么"ListItem :=frmMain.lvCar.Items.Add;"中要加"frmMain."对象名?
 这一段代码好像没有运行到,listview控件(lvcar)没有任何显示,但是在窗体的按钮事件或显示事件中去除"ListItem :=frmMain.lvCar.Items.Add;"中的frmMain.却能在listview中显示数据,为什么?第二段代码也是相同的问题,"frmMain.memo1.Lines.Add('用户注册成功'+#13);"没达到程序执行结果,而第一段代码中的"memo1.Lines.Add('连接中心成功'+#13);"却能达到程序执行结果,WHY?