问题如下:
1、我自己做了一个小小软件,其中有一个功能是锁定系统。
按钮选中之后就会弹出一个模态对话框,方便用户登陆,如果登陆不成功当然不能进入系统。不过我发现有个问题,就是如果我不登陆直接alt+f4就可以关闭这个窗口。就可以直接用了。不知道这个问题怎么解决。各位指点一下。2、因为我对delphi不是很熟悉,用了treeview一时又找不到教程。
我想问问在treeview里面添加了节点之后,如何对每个节点进行onclick事件的添加。问题就是这些,应该不难,因为小弟的分不多,所以先发50分,如果解决另外再送50分。希望大家帮帮忙。我的QQ86777770
1、我自己做了一个小小软件,其中有一个功能是锁定系统。
按钮选中之后就会弹出一个模态对话框,方便用户登陆,如果登陆不成功当然不能进入系统。不过我发现有个问题,就是如果我不登陆直接alt+f4就可以关闭这个窗口。就可以直接用了。不知道这个问题怎么解决。各位指点一下。2、因为我对delphi不是很熟悉,用了treeview一时又找不到教程。
我想问问在treeview里面添加了节点之后,如何对每个节点进行onclick事件的添加。问题就是这些,应该不难,因为小弟的分不多,所以先发50分,如果解决另外再送50分。希望大家帮帮忙。我的QQ86777770
解决方案 »
- [致命错误] photo.dpr(11): File not found: 'bsSkinData.dcu'
- 如何禁止控件闪动?????????????
- 如何应用dxExpress的SimpleDataSet读取其导出的XML文件。
- 一个简单的小问题,请大家帮我看一下!
- 请问,如何取MEMO控件中文本的行数?
- 关于数据库的即时更新问题
- 程序员增值合定本中IntraWeb应用的例子的问题?
- delphi7 滚动条颜色
- 一个小问题???????
- ***********请问如何在窗体外的屏幕上画一个点或输出一段文字?***********!!!!!!!!!!!!!!!!!!!!!!!!!!!!?????????????????????
- 如何查看各种颜色所对应的值?
- 关于获取BIOS ID的问题,高手帮忙!!!!!!!!!!!!!!!!!!
if(Key=VK_F4) and ([ssAlt]=shift) then
Key:=#0;实现定义一个事件,单类型要和OnClick事件一样(即参数列表完全一致),然后在添加了节点后赋予值,假设添加后接点对象为TVItem,那么:
TVItem.OnClick:=SomeProcYourPredined;
但TTreeView有个Selected(TTreeNode类型)属性可以指定当前选择的是哪个结点你在添加了结点后可以通过这个属性进行判断,返回当前点击的是哪个结点!
其实你可以申明一个全局的私有变量
private
{ Private declarations }
bLogin : Boolean;窗体创建的时候将这个变量设置为False
bLogin : =False
在你的密码输入成功以后 你在将这个变量置为True
然后你在窗体的OnCloseQuery事件中写入下列代码
procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := bLogin;
end;
这样也可以屏蔽掉Alt+F4
1. Selected 会返回给你一个TTreeNode的结构给你 这个结构就是你触发OnClick事件所选择的节点
下面是TTreeNode的属性
1. HasChildren 会返回一个boole型的变量 显示你所指定的节点下面是否有子节点
2. HasAsParent(Value: TTreeNode) 会返回一个boole型的变量 显示你指定的节点是否属于某个根节点给你一段我写的代码好了
procedure TfrmMain.tvNetWorkGroupClick(Sender: TObject);
var
tnFatherNode : TTreeNode;
tnSelectNode : TTreeNode;
slServerList : TStringList;
liTmpItem : TListItem;
i, j : integer;
begin
slServerList := TStringList.Create; Panel5.Caption := '网络逻辑分组以及工作站情况列表'; lvClientInfo.Items.Clear; tnFatherNode := tvNetWorkGroup.Items[0];
tnSelectNode := tvNetWorkGroup.Selected; if tnFatherNode = tnSelectNode then
begin
//如果不能列举出任何的工作组(列举失败)退出
if not GetServerList(slServerList) then
Exit; //检查列表中分组信息是否为空或者现有网络逻辑分组是否更新过
if (tvNetWorkGroup.Items.Count=1) or
(slServerList.Count <> tnFatherNode.Count) then
begin
//列表框的刷新过程
tnFatherNode.DeleteChildren;
for i := 0 to slServerList.Count-1 do
tvNetWorkGroup.Items.AddChild(tnFatherNode,slServerList.Strings[i]);
end; //为TListView添加逻辑分组信息
for i:= 0 to slServerList.Count-1 do
begin
liTmpItem := lvClientInfo.Items.Add;
liTmpItem.Caption := slServerList.Strings[i];
liTmpItem.ImageIndex:=1; for j := 0 to 7 do
begin
if j = 1 then
liTmpItem.SubItems.Append('网络逻辑工作组');
liTmpItem.SubItems.Append('');
end;
end;
end
else
begin
MessageBox(self.Handle, PChar('系统正在查找工作组中的计算机,请稍候...'),
PChar('系统提示'), MB_OK or MB_ICONINFORMATION); lvClientInfo.Cursor := crHourGlass;
tvNetWorkGroup.Cursor := crHourGlass; //如果没有列举出任何计算机信息(列举失败)退出
if not GetUsers(tnSelectNode.Text, slServerList) then
Exit; lvClientInfo.Cursor := crDefault;
tvNetWorkGroup.Cursor := crHandPoint; //为TListView添加计算机信息
for i:= 0 to slServerList.Count-1 do
begin
liTmpItem := lvClientInfo.Items.Add;
liTmpItem.Caption := slServerList.Strings[i];
liTmpItem.ImageIndex:=2; for j := 0 to 7 do
liTmpItem.SubItems.Append('情况未知');
end;
end; slServerList.Destroy;
end;希望你能看懂