完全自定义窗体风格的实现

完全自定义窗体风格的实现

最小化到任务栏
postmessage(Self.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);

最大化或还原
procedure Tf_MainForm.RzToolButton1Click(Sender: TObject);
var
  abd: TAppBarData;
begin
  inherited;
  if WindowState=wsnormal then begin
    WindowState := wsMaximized;  // BorderStyleÎ为 bsNone
    abd.cbSize := sizeof(abd);
    SHAppBarMessage(ABM_GETTASKBARPOS, abd); //读取任务栏的区域
    Self.Height := Self.Height - (abd.rc.Bottom - abd.rc.Top);  //预留出任务栏的位置
    (Sender as TRzToolButton).Hint :=‘还原‘;
    (Sender as TRzToolButton).ImageIndex :=8;
  end else if WindowState =wsmaximized then begin
    WindowState :=wsNormal;
    (Sender as TRzToolButton).Hint :=‘最大化‘;
    (Sender as TRzToolButton).ImageIndex :=2;
  end;
end;

移动无标题的窗体
procedure Tf_MainForm.RzPanel2MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  if Button=Mbleft then    
  begin
    ReleaseCapture;
    Perform(WM_NCLBUTTONDOWN,HTCAPTION,0);
  end;
end;

无边框的窗体托动鼠标也能改变窗体的大小
protected
    Procedure CreateParams(var Params: TCreateParams); override;
procedure Tf_MainForm.CreateParams(var Params: TCreateParams);
begin
  BorderStyle := bsNone;          // Îޱ߿ò´°ÌåÒ²Äܸı䴰ÌåµÄ´óС                         
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
  Params.Style := Params.Style or WS_SIZEBOX;
end;

鼠标点击BUTTON弹出菜单
procedure Tf_MainForm.CreateParams(var Params: TCreateParams);
begin
  BorderStyle := bsNone;                                   
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
  Params.Style := Params.Style or WS_SIZEBOX;
end;

窗体圆角处理
procedure Tf_MainForm.FormResize(Sender: TObject);
var hr:THandle;
begin
  inherited;
  hr:=createroundrectrgn(0,0,width,height,20,20);  
  setwindowrgn(handle,hr,true);
end;

窗体嵌入TABSHEET的一些方法
procedure Tf_MainForm.RzPageControl1Close(Sender: TObject;
  var AllowClose: Boolean);
var
  p: TRzPageControl;
  t: TRzTabSheet;
begin
  inherited;
  p := sender as TRzPageControl;
  t :=p.ActivePage;
  if t.Caption <>‘ϵͳµ¼º½‘ then begin
    AllowClose := True;
    TForm(t.Controls[0]).Close;
    t.Free;
  end else AllowClose :=False;
end;

function Tf_MainForm.CreateTab(const aCaption: string): TRzTabSheet;
begin
  Result := TrzTabSheet.Create(RzPageControl1);
  Result.PageControl := RzPageControl1;
  Result.Caption := Acaption;
  RzPageControl1.ActivePage := Result;
end;

function Tf_MainForm.ExistTab(const aCaption: string): boolean;
var
  i: Integer;
begin
  result := false;
  for i := 0 to RzPageControl1.PageCount - 1 do
  begin
    if RzPageControl1.Pages[i].Caption = Acaption then
    begin
      result := true;
      RzPageControl1.activepage := RzPageControl1.pages[i];
      Break;
    end;
  end;
end;

procedure Tf_MainForm.openForm(aFormClass: TFormClass;
  aOwner: TWinControl);
var i: Integer;
  f: TForm;
begin
  f := aFormClass.Create(aOwner);
  f.Color :=c_color;
  for i:=0 to f.ComponentCount-1 do begin
    if f.Components[i] is TRzDBGrid then begin
      TRzDBGrid(f.Components[i]).FixedColor := c_color;
    end else if f.Components[i] is TRzDBNavigator then begin
      TRzDBNavigator(f.Components[i]).Color :=c_color;
    end;
  end;
  f.ManualDock(aOwner);
  f.WindowState := wsMaximized;
  f.Align := alClient;
  f.Show;
end;

http://www.cnblogs.com/hnxxcxg/archive/2012/05/10/2493680.html

时间: 2024-10-08 11:22:15

完全自定义窗体风格的实现的相关文章

[01]可拖动、可调节大小、自定义按钮风格的无边框WPF程序

初学WPF,用VS2012写了一个可拖动.可调节大小.自定义按钮风格的无边框程序.效果如下: 实现过程:一.拖动.调节大小.无边框主要参考了: http://blog.csdn.net/dlangu0393/article/details/12548731 二.自己主要完成自定义按钮效果. 1.  WPF定义按钮风格方法 (1) 添加一个Resource Dictionary文件,如Style.xaml.例如: <ResourceDictionary xmlns="http://schem

自定义窗体和控件

1.自定义窗体 项目中都保持一个窗体风格,比如窗体标题栏,最小化最大化按钮.建立一个form窗体,修改后,编译生成dll,添加引用此dll,继承此dll窗体. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.W

自定义窗体的最大化,最小化,关闭功能

namespace 自定义窗体的最大化_最小化和关闭按钮 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name="disp

WPF 创建自定义窗体

在前面的一篇博客"WPF 自定义Metro Style窗体",展示了如何创建一个类似于Metro Style的Window,并在程序中使用.但是这个窗体不能够自由的改变大小.今天的博客中将展示如何创建一个可以通过拖拽来改变大小的Metro Style窗体. 实现思路,在Windows ControlTemplate中增加8个背景透明Rectangle,分别放置于Left, Right, Top, TopLeft, TopRight, Bottom, BottomLeft, Bottom

Unity 编辑器扩展自定义窗体

这次看见Unity还可以自定义弹出窗体,让我很好奇.于是就去网上找文章看了看. 如果想自定义窗体需要把类放入Editor文件夹下面. 代码如下: using UnityEngine; using UnityEditor; public class MyEditor : EditorWindow { [MenuItem("GameObject/window")] static void AddWindow() { Rect wr = new Rect(0, 0, 500, 500); M

使用自定义窗体

一.从头定义新自定义窗体 1.新建一个目录,再新建一个工程.2.定义这个自动创建好的窗体为自己需要的样式.3.包存这个窗体和单元到希望的目录,工程文件就保存在新建的目录.4.将没有用的工程联通目录一并删除. 二.在新工程中使用自定义窗体 1.新建一个工程.2.移除自动创建的单元(自动创建的Form也会随之移除).3.添加自定义窗体到工程中.4.使用向导新建一个窗体.在Delphi7中,步骤如下: (1)File -> New -> Other... -> 选择跟项目名称相同的页签 -&g

自定义窗体,简简单单实现

style文件xmal: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <ControlTemplate x:Key="WindowTemplateKey" TargetType="

ToastCustom【自定义显示风格的Toast】

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 基于系统Toast的自定义显示风格的Toast. 效果图 代码分析 ToastCustom类基于系统Toast,不是继承Toast,只是通过toast.setView(view)方法引用自定义的显示风格布局文件,达到自定义显示风格的目的. 为了和Toast用法保持一致,ToastCustom类中也使用了makeText.show.setGravity.setText方法.方便在项目中直接替换Toast. 下面分析下ToastCustom

如何在XAF中显示自定义窗体和控件

https://www.devexpress.com/Support/Center/Example/Details/E911 如何在XAF中显示自定义窗体和控件,布布扣,bubuko.com