可以用SendMessage进行处理呀。消息LB_GETCOUNT取得总数目。
LB_GETITEMDATA
LB_GETITEMHEIGHT
等List Box Messages啊

解决方案 »

  1.   

    这个我会,但不能在Win2000中实现。
    若你真有意给这么高分,我这星期六给你源代码。
    [email protected]
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, ExtCtrls, yupack, vrclass, vrlcd, Tabs, DBCGrids,
      DBCtrls;type
      TMainForm = class(TForm)
        Timer1: TTimer;
        Bevel1: TBevel;
        Label1: TLabel;
        Shape2: TShape;
        Shape1: TShape;
        Shape3: TShape;
        YusoftWallpaper1: TYusoftWallpaper;
        Bevel2: TBevel;
        Label2: TLabel;
        VrNum1: TVrNum;
        Label3: TLabel;
        TabSet1: TTabSet;
        Notebook1: TNotebook;
        Memo1: TMemo;
        DBCtrlGrid1: TDBCtrlGrid;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        BitBtn3: TBitBtn;
        DBNavigator1: TDBNavigator;
        DBNavigator2: TDBNavigator;
        DBNavigator3: TDBNavigator;
        DBNavigator4: TDBNavigator;
        DBNavigator5: TDBNavigator;
        BitBtn4: TBitBtn;
        BitBtn5: TBitBtn;
        YusoftWallpaper2: TYusoftWallpaper;
        YusoftWallpaper3: TYusoftWallpaper;
        Bevel3: TBevel;
        Bevel4: TBevel;
        Image1: TImage;
        SaveDialog1: TSaveDialog;
        procedure Timer1Timer(Sender: TObject);
        procedure TabSet1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure BitBtn1Click(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var MainForm: TMainForm;
        WHandle,ListBoxHandle:Hwnd;
        YHDM:String;
        GZSJ:Integer;
        GZLX:String;implementation{$R *.DFM}
    procedure TMainForm.Timer1Timer(Sender: TObject);
    Var Stemp,LastLine,SecondLine:PChar;
        LineCount,I,N, X,Y:Integer;
        DM:String;
    begin
         Shape1.Brush.Color:=clRed;
         Shape2.Brush.Color:=clRed;
         Shape3.Brush.Color:=clRed;     WHandle:=FindWindow(PChar('V6W'),Nil);
         If WHandle<=0 Then
         Begin
              WinExec('V6W.EXE',0);
              Exit;
         End;
         ShowWindow(WHandle,SW_HIDE);
         Shape1.Brush.Color:=clGreen;     ListBoxHandle:=FindWindowEx(WHandle,0,Nil,Nil)+4;
         LineCount:=SendMessage(ListBoxHandle,LB_GETCOUNT,0,0);
         If LineCount<=0 Then
         Begin
              SendMessage(WHandle,WM_Close,0,0);
              Exit;
         End;     Shape2.Brush.Color:=clGreen;
         GetMem(Stemp,80);
         GetMem(LastLine,80);
         GetMem(SecondLine,80);     If LineCount>0 Then
            SendMessage(ListBoxHandle,LB_GETTEXT,0,Longint(LastLine));
         If LineCount>1 Then
            SendMessage(ListBoxHandle,LB_GETTEXT,0,Longint(SecondLine));     N:=0;
         For I:=0 To Memo1.Lines.Count-2 Do
         If ((Memo1.Lines[I]=LastLine) AND (Memo1.Lines[I]=SecondLine)) Then
         Begin
              N:=I;
              Break;
         End;     For I:=ABS(N-Memo1.Lines.Count) To LineCount-1 Do
         Begin
              SendMessage(ListBoxHandle,LB_GETTEXT,I,Longint(Stemp));
              If Length(Stemp)>0 Then
              Begin
                   Memo1.Lines.Add(Stemp);               If Pos('DM:=[',Stemp)>0 Then
                   Begin
                        //1 不同于YHDM 则保存原故障信息 记录用户代码
                        X:=Pos('DM:=[',Stemp);
                        Y:=Pos(']',Stemp);                    DM:=Copy(Stemp,X+5,Y-X-5);                    If DM<>YHDM Then
                        Begin
                             //保存投诉信息                         YHDM:=DM;
                             GZSJ:=0;
                        End;
                   End;               If Pos('GZ:=[',Stemp)>0 Then
                   Begin
                        //2 记录故障代码
                        X:=Pos('GZ:=[',Stemp);
                        Y:=Pos(']',Stemp);                    GZLX:=Copy(Stemp,X+5,Y-X-5);
                   End;
              End;
         End;     FreeMem(SecondLine,80);
         FreeMem(LastLine,80);
         FreeMem(Stemp,80);     VrNum1.Value:=Memo1.Lines.Count;
         If YHDM<>'' Then
         Begin
              Inc(GZSJ);
              If GZSJ>30 Then
              Begin
                   //保存故障投诉信息               YHDM:='';
                   GZSJ:=0;
              End;
         End;
    end;procedure TMainForm.TabSet1Click(Sender: TObject);
    begin
         Notebook1.PageIndex:=TabSet1.TabIndex;
    end;procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
         If WHandle<>0 Then
            SendMessage(WHandle,WM_Close,0,0);
    end;procedure TMainForm.BitBtn1Click(Sender: TObject);
    begin
         Memo1.Clear;
    end;procedure TMainForm.BitBtn2Click(Sender: TObject);
    begin
         IF SaveDialog1.Execute Then
            Memo1.Lines.SaveToFile(SaveDialog1.FileName);
    end;Initialization
        WHandle:=0;
        ListBoxHandle:=0;
        YHDM:='';
        GZSJ:=0;
        GZLX:='';
    end.