我看了一本书!可以改变Tform的外观,用GetWindowDc和Wm_NCPaint,如何做!(150分)

  • 主题发起人 主题发起人 Rich
  • 开始时间 开始时间
R

Rich

Unregistered / Unconfirmed
GUEST, unregistred user!
<a href=nil>试一试!</a>
<p class="text"><input type="submit" value="行不行" name="B1"><input type="reset"
value="test" name="B2"></p>
 
说清楚一点, 改变TForm的什么外观? 改变自己的TForm, 还是改变任何正在运行的
程序的窗体的外观?
根据你的需要, 什么样的外观都可以改变, 处理手法不同. 用GetWindowDC, WM_NCPAINT
只是paint Window的某一块区域.
 
试试下面的代码:
procedure TForm1.FormPaint(Sender: TObject);
var
HH : HDC;
I,J : integer;
begin
HH := GetWindowDC(Form1.Handle);
for I := 0 to Form1.Width - 1do
for J := 0 to 20do
SetPixel(HH,I,J,100);
end;

考虑给点分什么的?
 
我是想改变自己的。
给个例子,比如改变caption或边框!
 
再给你一点启发,可能会对你有帮助,因为我对你的要求还不是很明白。
GetWindowDC是获得窗口的Device Context,包括菜单和标题条!然后
你就可以对整个窗口的页面操作了,这样你对窗口paint事件写代码,修改
你的窗口边框、标题等。
试试下面代码:
procedure TForm1.FormCreate(Sender: TObject);
var
HH,H_RGN : THandle;
begin
H_RGN := CreateEllipticRgn(0,0,Form1.Width,Form1.Height);
SetWindowRgn(Form1.Handle,H_RGN,TRUE);
end;

procedure TForm1.FormPaint(Sender: TObject);
var
HH : THandle;
begin
HH := GetWindowDC(Form1.Handle);
Arc(HH,2,2,Form1.Width - 2,Form1.Height - 2,0,0,0,0);
end;
 
SetWindowRgn可以
如果要控件可以找COOLFORM,有SOURCE
 
听一听!
 
类似吕雪松例子中的CreateEllipticRgn的一系列API函数,可创建各种外观的Form。(如圆,矩等形状)在该函数的Group中可找到.
 
应该改变窗口标题和边框的外观,试试下面的代码:
TForm1 = class(TForm)
private
{ Private declarations }
public
procedure WMNCPAINT(var msg: TWMNCPaint);
message WM_NCPAINT;
end;

.........
procedure TForm1.WMNCPAINT(var msg: TWMNCPaint);
var
oldHDC: HDC;
newDC: HDC;
begin
OLDHDC := Canvas.Handle;
newDC := GetWindowDC(handle);
Canvas.Handle := newDC;
Canvas.FloodFill(2,2,clRed,fsBorder);
Canvas.TextOut(30, 2,'dddd');
Canvas.Handle := oldHDC;
ReleaseDC(handle, newDC);
end;

最好把form的borderIcons都关掉。
 
接受答案了.
 
后退
顶部