窗口互斥的问题,像QQ发送消息窗口那样,已打开则show它,发给其它好友的又可以新创建??

phoenixsharp 2004-08-27 06:05:34
程序类似QQ发送消息的窗口:
1.若已经打开了发给好友A的窗口,再次点击的话则把它show到前面.
2.若是点击发给其它好友,则可以新创建一个窗口.

现在我的问题是,点发给A的话(已打开),可以show它,没有新建,点击发给B的话也可以新建,若回头再点A,就乱套了.代码如下:
互斥部分:
function createform(id:pchar):string;
procedure DestroyMutex;

implementation
var Mutex: hWnd;
{$R *.dfm}
procedure DestroyMutex;
begin
if Mutex <> 0 then
CloseHandle(Mutex);
end;
function createform(id:pchar):string;
var mUTEX:HWND;
begin
Mutex := Windows.CreateMutex(nil, False, id);
if (GetLastError = ERROR_ALREADY_EXISTS) or (Mutex = 0) then
begin
sendfm.Show;
if sendfm.WindowState<>wsNormal then sendfm.WindowState:=wsNormal;
Result:='Created';
end
else
begin
Result:='NoSame';
end;
end;
创建窗口部分:
button的name作为ID以创建不同的ID实例
if createform(pchar(pbutton.Name ))='NoSame' then CallCreateFrm(pButton.Name);

另当窗口关闭时,如果调用destroyMutex?
代码是放在main单元中,发送窗口sendunit已经uses了它,现在怎么调用main单元中的destroyMutex.打算用消息处理,请高手指点...
...全文
148 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
phoenixsharp 2004-08-31
  • 打赏
  • 举报
回复
up
kaguo 2004-08-30
  • 打赏
  • 举报
回复
form 里边建立一个Public 变量,用来标示属于哪个ID,
创建form之前
循环查找application.Components[i]中的Tform1,
(application.Components[i] as Tform1).TheID,找不到就创建...
beyondtkl 2004-08-30
  • 打赏
  • 举报
回复
你的FORM中间加一data member friend_ID 表示这个form是与谁建立的
逻辑不是很难...自己再去想想
phoenixsharp 2004-08-30
  • 打赏
  • 举报
回复
楼上的大虾能不能详细一下呢?
zzlingaaa 2004-08-30
  • 打赏
  • 举报
回复
自己定义一个Form类,管理消息接受,发送和显示
Main只负责创建它的实例,以及管理记录
其实思路应该很清晰,不会出现什么混乱啊
phoenixsharp 2004-08-30
  • 打赏
  • 举报
回复
继顶....
phoenixsharp 2004-08-30
  • 打赏
  • 举报
回复
up.
beyondtkl 2004-08-30
  • 打赏
  • 举报
回复
你将所有创建好的form窗口指针放到一个容器里面去 VC里面可以用CMap,不知道DELPHI有没有类似的冬冬, 然后根据这个ID遍历这个MAP直接获取其中的窗口指针就OK
phoenixsharp 2004-08-30
  • 打赏
  • 举报
回复
江湖救急啊......
phoenixsharp 2004-08-30
  • 打赏
  • 举报
回复
我也是用楼上的方法来创建一个public变量,存放被点击者的ID号.但采用你的(application.Components[i] as SendForm).TheID 要出错,这样能找到SendForm(发消息窗口) 的所有实例吗???现在是看能不能逮住已经创建的所有SendForm窗口的实例?:(请各位大虾们帮帮忙.

5,388

社区成员

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

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