1

源程序下载
1：制作可分割的窗体（Form）

第一步：创建一个应用程序，保存为Unit为U00201.Pas，Form.Name = Form1，Progect为P00201.prg。
第二步：在Form1上放置一个Panel1:Tpanel，设置Panel1.Align= alTop；在Panel1上按顺序分别一个Image1:TImage、Splitter1:TSplitter、Memo1:TMemo，Image1.Align = alLeft；Splitter.Align= alLeft；Memo1.Align= clClient ;
第三步：在Form1的OnCreate的事件里，添加下面一段代码：
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.LoadFromFile('00201.bmp') ;
Memo1.Lines.LoadFromFile('00201.txt') ;
end;
把上面的程序保存一下，你可以试一下。
2：制作透明的窗体（Form）
为了不影响测试后面一段程序，在Form1上放置一个Splitter2 : TSplitter，设置
Splitter2.Align=alTop ;将FORM变成透明的实质性手段就是拦截CMEraseBkgnd消息。
第一步：在Form1的“Public”部分声明过程:
Procedure CMEraseBkgnd(var Message:TWMEraseBkgnd);Message WM_ERASEBKGND;
PROCEDURE Tform1.CMEraseBkgnd(var Message:TWMEraseBkgnd);
Begin
brush.style:=bsClear;
Inherited;
End ;
3：窗体（Form）上的坐标转换成相对于屏幕上的坐标
为了测试这个程序，只需要在Form1的OnMouseMove事件中添加如下代码：
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Var
Tempstr : String ;
MyPoint: TPoint;
ScPoint: TPoint;
begin
TempStr := 'Form X='+IntToStr(X)+' Form Y='+IntToStr(Y);
Caption := TempStr ;
MyPoint.x:=X;
MyPoint.y:=Y;
ScPoint:=ClientToScreen(MyPoint);
TempStr := 'Screen X='+IntToStr(ScPoint.x)+' Screen Y='+IntToStr(ScPoint.y);
Caption := Caption +' '+TempStr ;
end;
注:MyPoint，是相对于窗体(Form1)的坐标，ScPoint为相对于屏幕上的坐标，在上面的一段代码中，关键的函数就一个ClientToScreen，它的作用是把相对于窗体(Form)的坐标转换成相对于屏幕的坐标(converts the client coordinates of a specified point to screen coordinates.)。和这个函数相反的一个函数是ScreenToClient，你可以自己动手试试。
源程序下载