一些小问题,请各位大虾来看看,很好回答(50分)

  • 主题发起人 主题发起人 skyhill
  • 开始时间 开始时间
S

skyhill

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样通过一个panel拖动一个窗体<br>怎样把一窗体最小化到系统任务栏中<br>怎样把最小化到系统任务栏中程序打开
 
1.将发送给panel的消息转交给Form1(Form1.handle)<br>2/3.是用程序来实现吗?
 
1.无标题栏窗口程序设计中鼠标拖动技巧 <br>辽宁省铁岭市委办公室 <br>金永涛 <br>---- WINDOWS 中窗口的常规移动方法, 是用鼠标拖动标题栏来完成, 但目前的WINDOWS 程序中, 存在很多的无标题栏窗口, 这在多媒体流行的时代更是如此, 形形色色的媒体播放机大都如此, 还有输入法或者即时翻译等程序, 其界面只有窄窄的一行, 这样的程序在程序设计阶段必须进行特殊的处理,才能使之具有鼠标拖动功能,本人在DELPHI及VB程序设计中, 找到了一种无标题栏窗口鼠标拖动的简单方法, 可广泛应用在类似的程序设计之中。 <br>---- 基本原理: 当无标题栏窗口进行鼠标拖动时, 在一个最明显的事实, 就是其鼠标在窗口中的坐标始终不变, 所以如果能够在鼠标移动过程中, 通过改变窗口在桌面上的坐标, 而始终保持鼠标的相对坐标不变, 即可实现鼠标的拖动效果; 在具体的程序设计中, 先在Mousedown() 事件中记录鼠标位置, 而在Mousemove() 事件中根据鼠标的移动距离,实时修改窗体Form的Top及Left值, 即可准确无误的实现窗口的鼠标拖动操作。利用此方法实现鼠标拖动, 与常规的标题栏鼠标拖动在效果上有一点区别, 因为标题栏拖动时, 鼠标移动过程中不重画窗口, 只有松开鼠标后在固定位置重画窗口, 所以其速度较快, 而采用此方法拖动过程中, 每移动一步都需要重画窗口, 对速度稍有影响,在慢一些的机器上会出现轻微的拖尾现象, 但绝不会影响正常操作,而在586以上机器上或者高速显示系统下会完全克服这种现象。在实际程序设计时,窗口中可能有多种控件,若想使鼠标拖动窗口中的任何位置都可实现窗口移动, 必须对窗口中的所有控件进行上述的鼠标位置记录与移动处理, 即在MouseDown()与MouseMove()事件中加入下面的程序代码, 当然与可以在窗口内设置一个专门用于窗口拖动的区域, 这样只对此一个控件操作即可。 <br>---- 演示程序的编制: 下面是一个利用DELPHI编制的时间显示程序, 编制方法:在窗体内放置一个按钮Button1及一个时间控件Time1,使按钮呈横向矩形,其WIDTH足以显示下日期和时间, 之后在相应的事件中输入以下程序中的代码,程序运行之后, 其界面将只有按钮大小的窄窄一条, 显示当前的日期和时间, 用鼠标拖动窗口的任一部位, 都可使窗口随之准确地移动, 在窗体内按下鼠标右键退出程序。 <br>---- 以上方法及程序在WINDOWS95系统下、DELPHI2.0环境调试通过, 经在VB5.0环境下试验, 其效果与此一致。 <br>---- 附.PAS全部程序代码: <br>unit formyd;<br>interface<br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics,<br>&nbsp; Controls, Forms, Dialogs,StdCtrls, ExtCtrls;<br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Timer1: TTimer;<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp; &nbsp; procedure Timer1Timer(Sender: TObject);<br>procedure Button1MouseDown(Sender:<br>TObject;Button:TMouseButton;<br>&nbsp; &nbsp; &nbsp; Shift: TShiftState; X, Y: Integer);<br>procedure Button1MouseMove(Sender:<br>TObject;Shift:TShiftState;X,<br>&nbsp; &nbsp; &nbsp; Y: Integer);<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; private &nbsp;{ Private declarations }<br>&nbsp; public &nbsp; { Public declarations }<br>&nbsp; end;<br>//定义全程变量<br>var<br>Form1: TForm1;<br>dx,dy:integer;<br>implementation {$R *.DFM}<br>//程序初始化<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>form1.borderstyle:=bsnone;<br>form1.height:=button1.height;<br>form1.width:=button1.width;<br>button1.top:=0;<br>button1.left:=0;<br>end;<br>//实时显示当前时间<br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var<br>ds,ts,ps:string;<br>begin<br>ds:='DATE:'+DateToStr(Date);<br>ts:='TIME:'+timeToStr(time);<br>ps:='|__welcome__|';<br>button1.Caption:=ds+ps+ts;<br>end;<br>//记录鼠标当前位置<br>procedure TForm1.Button1MouseDown(Sender:<br>TObject;Button:TMouseButton;<br>&nbsp; Shift: TShiftState; X, Y: Integer);<br>begin<br>dx:=X;<br>dy:=y;<br>If Shift=[ssright] Then<br>close; &nbsp;//右键单击退出程序<br>end;<br>//根据鼠标移动距离调整窗口位置<br>procedure TForm1.Button1MouseMove(Sender:<br>TObject;Shift:TShiftState;X,<br>&nbsp; Y: Integer);<br>var<br>mx,my:integer;<br>begin<br>If Shift=[ssleft] Then<br>begin<br>mx:=X-dx;<br>my:=Y-dy;<br>Form1.Left:=Form1.Left+mx;<br>Form1.Top:=Form1.Top+my;<br>Form1.Caption:=intToStr(X)+':'+intToStr(Y);<br>end;<br>end;<br>end.<br>==============================================<br>后面两问题用控件比较省心<br>——iseek<br>
 
接受答案了.
 
后退
顶部