关于listbox控件使用,达到QQ中的类似的功能。(100分)

  • 主题发起人 主题发起人 cjsam
  • 开始时间 开始时间
C

cjsam

Unregistered / Unconfirmed
GUEST, unregistred user!
在QQ中一条消息过来后,你在聊天记录里鼠标双击就可以选择这次聊天的
所收到的信息,包括对方QQ号,发送时间,然后就是消息内容。
现在在我的Listbox里一次通讯收到的消息内容如果在在Listbox里显示是4行,
我点这4行中的任意一行,它都能显示这4行都被选择了,而其他的消息不会被选择到,
我就可以耕具这4行记录,判断我这次收到的消息能触发其他的事件。
 
有谁知道呀,不知道大家明白我所说的没有?[purple][/purple]
 
强烈关注

我也十分需要这个知识

我想有没有什么第三方控件可以做到这个?
 
1、你的记录应该有个ID号来进行唯一标识,而不是使用4个数据域进行组合标识
2、在你的ListBox里没有必要显示所有的数据,只要显示能代表你的这条记录的信息就够了;
使用一个Int数组对应存放List里面的记录的ID号。
3、当双击的时候得到选中Item的对应的ID就可以了~~
 
To:Beast,
当然你这样的做法在本地是能够实现的。我的LISTBOX接受的数据是远程传过来的,
基本是和QQ的原理一样。我本地没有数据库,接受到的数据直接需要全部显示到
LISTBOX中,而双击的事件是将这段数据按一定的格式分解成需要的显示格式,并不是
去从其他的地方根据ID去取出来分解,多做一步。而且我收到的消息是在源源不断的过
来不只是只一条的。
 
用AddObject,将ListBox的每一个item和一定的数据相关联。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

type
PListItem = ^TMyListItem;
TMyListItem = record
s1,s2: string; //或是其它类型的数据。
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
ListItemPtr: PListItem;
begin
new(ListItemPtr);
ListItemPtr.s1 := 's1';
ListItemPtr.s2 := 's2';
listbox1.Items.AddObject('k',TObject(ListItemPtr));
end;


procedure TForm1.ListBox1Click(Sender: TObject);
var ListItemPtr: PListItem;
begin
ListItemPtr:= PListItem(ListBox1.items.Objects[ListBox1.ItemIndex]);
label1.Caption:=ListItemPtr.s1+':'+ListItemPtr.s2;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
for i := 0 to ListBox1.items.count -1 do
freemem(PListItem(listbox1.Items.Objects));
end;

end.
 
你收到数据和你从数据库或者其他地方得到数据有什么区别?
你把数据添加到ListBox的同时写入你的数组一个可以唯一标识你的这条记录的值不就ok了?
或者就记录你添加到ListBox的Index不是也很ok?
至于选择一个就显示选择4个,把ListBox的MuiltSelect设置上,再手动维护界面显示吧。
这个简单的功能不至于再写一个组件~~
 
Beast,你说的有一定的道理
这样做也能行。但是QQ肯定不是这样做的。
找不到好的办法也就只有这样了。
不过这样还的清除Listbox的记录,来确保index不至于大到它的极限,也不知道到地是多大。
 
Integer有多大你的List就能有多少条记录。
你不是要看聊天记录吗?那QQ的聊天记录是存放在本地的呀。
 
后退
顶部