得到其他窗口中 ListBox 内的内容

AP 2000-08-29 06:15:00
如何得到其他窗口中某个 ListBox 的内容。
...全文
171 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
AP 2000-08-30
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
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.
yinfudan 2000-08-29
  • 打赏
  • 举报
回复
这个我会,但不能在Win2000中实现。
若你真有意给这么高分,我这星期六给你源代码。
yinfudan@yahoo.com
「已注销」 2000-08-29
  • 打赏
  • 举报
回复
可以用SendMessage进行处理呀。消息LB_GETCOUNT取得总数目。
LB_GETITEMDATA
LB_GETITEMHEIGHT
等List Box Messages啊

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧