200分 !!!!!!@请帮忙@!!!!!!(200分)

  • 主题发起人 主题发起人 myyzg
  • 开始时间 开始时间
M

myyzg

Unregistered / Unconfirmed
GUEST, unregistred user!
本人见到有这么一个程序,在当前form中有多个格子,有的格子中放有一个‘标签’,其中反映了人员的‘编号,姓名,科室,职称’,和一个图标,有的格子为空,‘标签’的内容来自于数据库,当点击该标签后,可将其移到另一处空格中去,这样就完成了人员的调动。这种方法类似于排班表,十分直观,不知如何实现,
以上功能是否是通过将多个label放到面板上,通过面板移动来完成整个label的移动。如果是,如何获得当前选中的该面板上的控件。
还望赐教!


 
Label没有焦点,你可以用Button或Panel来代替,比如Button,
在Button的OnMouseDown中处理:(所有Button均采用下面方法)
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
c_nDragMove = $F017; //移动控件消息
begin
if Button = mbLeft then
begin
ReleaseCapture;
TButton(Sender).Perform(WM_SysCommand, c_nDragMove, 0);
end;
end;
 
我的意思是不一定要获得标签的焦点,只是将一组label移到指定的位置,同时改变了记录在数据库中的位置,即记录中的编号在不位的格子中的值不一样。如何移动一组label或其它控件,或将原位置上的label的显示值复制新的格子中对应的label上,简单地说就是:一个格子对应数据库中一个编号,将格子中的内容移到另个一处,就改变了数据库中原记录的编号而已。如何实现?
 
哈哈,你说的是什么呀,什么乱马七糟的.

很多格子是不是规则排列的,有没有行和列? 如果规则的就使用一个StringGrid好了.

1.根据规则将数据写入相应的表格单元
2.当鼠标点击Grid的时候,根据坐标得到相应的格子的位置
3.分析其中的文字应该移动到什么位置
4.移动到相应的目标位置(如果目标位置有内容,先移动目标格子)
5.编辑修改数据库
 
拖动Label
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton; Shift:  TShiftState; X, Y: Integer);
const
 SC_DragMove = $F012; // a magic number
begin
 ReleaseCapture;
 Label1.perform(WM_SysCommand, SC_DragMove, 0);
end;

然后在Label1MouseUp里面处理结果。

 
你应该结合DXTREE 控件和 TDBCTRLGRID来实现你的功能,没有问题。
 
我认为这主要是数据库的问题吧?
界面控制,就是体力活了
 
DragMove只是表面文章,可以按你熟悉的方法做,如前面各位所述。
本质上人员调动只是改一下‘科室’的字段值而已。
关键是‘人员调动’必须知道调入的‘科室’,既拖放结束后取得调入的‘科室’的字段值,
用它修改当前记录的‘科室’字段,然后按原定的方法重新输出界面。
 
如何将数据库的各个特定的字段和一张图片集中到一个整体,然后进行移动(调动),在移动的
同时会改变某个字段的值(如科室),这个问题的关键是什么控件能做到能集文字图片于一体.
略带有创新的想法,但我在某个软件中发现过这样的做法.
 
把图片和文字放入一个容器控件中。
例如:Panel1上放一个Image1、若干个Lable
1>写一个通用的拖放过程:
Procedure My_DragDrop(Sender:Tobject);
Begin
RelaseCapture;
(Sender as Tcontrol).Parent.PerForm(WM_SYSCOMMAND,$F009,0);//拖动容器控件
End;

2>Panel1、Image1、Lable的MouseDown事件调用:
If Button = mbLeft then My_DragDrop(Sender);

3>MouseUp事件中,修改科室字段:
Edit;
FieldByName('科室').AsString:='新的科室值';
Post;

你仔细观察一下它的界面,搞清楚用的都是什么控件?如你说的‘格子’。
如前所说,关键是取得调入的‘科室’的字段值。

 
出错了,什么意思?
[Error] Unit1.pas(35): Undeclared identifier: 'RelaseCapture'
[Error] Unit1.pas(16): Unsatisfied forward or external declaration: 'TForm1.My_DragDrop'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 
我明白了,原来releasecapture应放在TForm1.Panel1MouseDown中.
本人还有一中不明,如何将panel1移到一个新的地方(不同的科室),
并获得一个新的位置值(移动后的科室).如何处理,这个地方就如我
先前所说的'格子',以便更换并保存panel1的当前位置(现有科室).
 
>>myyzg
line1:sorry打错了字:ReleaseCapture
line2:没有声明My_DragDrop
 
你说的‘格子’是什么,StringGrid 或单纯的line或 .....?
详细的说明可mail to me:caowei@ms.xjb.ac.cn
 
曹炜:再次感谢你的帮助,我所说的格子可能有些不具体,我说明一下:

1、我最初的想法是:将form作为一个科室的容器,中间有一些所谓的带有编号
的’格子‘,这种’格子‘是一种位置吧,用来标明数据库容器的当前位置(编号),
当数据库容器移到不同的位置(格子)上时,其编号将发生变化。
2、另外是在form中创建几个容器,每个容器代表一个科室,每一个科室容器中
再创建多个容器用来存放一些文字和图片,而这些图片和文字来自于数据
库,数据容器可以在科室容器之间移动,移动后的结果以科室为识别保存下
来。
如何实现,本人还在探讨之中其中的格子如何实现,或采用其它类似的方法如
何实现?
 
该问题我已解决,还是把分分组大家算了.
 
后退
顶部