DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tino0914
今日帖子: 22
在线用户: 29
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 wufen (wufen) ★☆☆☆☆ -
盒子活跃会员
2003/5/19 10:35:27
标题:
请教关于窗体事件 浏览:3105
加入我的收藏
楼主: 如何实现在窗体上添加三个按钮,分别实现最小化,最大化,关闭
----------------------------------------------
delphi菜鸟
作者:
男 wufen (wufen) ★☆☆☆☆ -
盒子活跃会员
2003/5/19 11:41:48
1楼: 这是个简单地问题,但我就是不会,大家帮帮忙啊
----------------------------------------------
delphi菜鸟
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2003/5/19 11:47:32
2楼: WindowState:=wsMinimized
WindowState:=wsMaximized
self.close
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
男 wufen (wufen) ★☆☆☆☆ -
盒子活跃会员
2003/5/19 19:32:53
3楼: WindowState:=wsMinimized
只能使窗口最小化左边,怎样才能实现最小化按钮的功能呢?就是最小化到任务栏??
----------------------------------------------
delphi菜鸟
作者:
男 boy (阿門) ★☆☆☆☆ -
盒子活跃会员
2003/5/19 20:24:22
4楼: 程序縮小為任務條右下角的小圖標(轉載) 


某些程序運行啟動後並不出現在任務條中,而是縮小為任務條右下角的一 
個小圖標,當鼠標移到這個小圖標上時會出現一些提示信息、單擊該小圖標會 
執行一些特定的操作。便如任務條右下角的小喇叭圖標,單擊它會彈出一個簡 
單的音量控制條,雙擊會啟動另一個更大的音量控制程序。 
在Shell32.DLL動態鏈接庫中包括一個函數Shell_NotifyIconA()可通知 
Windows在任務條右下角加入一個小圖標,可惜該函數的詳細說明未收入Delphi 
的幫助文檔中,下面以一個簡單的實例來說明如果使用該函數。 

unit Unit1; 

interface 

{ 記住在uses部分中包括 ShellAPI} 
uses 
Windows, Messages, SysUtils, Classes, 
Graphics, Controls, Forms, Dialogs, 
ShellAPI, StdCtrls; 

{自定義消息,當小圖標捕捉到鼠標事件時Windows向回調函數發送此消息} 
{自定義消息,當小圖標捕捉到鼠標事件時Windows向回調函數發送此消息} 
const MY_MESSAGE = WM_USER + 100; 

type 
TForm1 = class(TForm) 
procedure FormCreate(Sender: TObject); 
procedure FormClose(Sender: TObject; var Action: TCloseAction); 
procedure FormPaint(Sender: TObject); 
private 
procedure OnIconNotify(var Message: TMessage); 
message MY_MESSAGE; 
public 
{ Public declarations } 
end; 

var 
Form1: TForm1; 

implementation 

{$R *.DFM} 


{當小圖標捕捉到鼠標事件時進入此過程} 
{當小圖標捕捉到鼠標事件時進入此過程} 
procedure TForm1.OnIconNotify(var Message: TMessage); 
const 
Busy: Boolean = false; 
begin 
if not Busy then begin 
Busy := true; 
if Message.LParam=WM_LBUTTONDOWN then 
if Application.MessageBox('Are you sure', 
'Exit', MB_YESNO)=IDYES then Close; 
Busy := false; 
end; 
end; 

{當主Form建立時通知Windows加入小圖標} 
procedure TForm1.FormCreate(Sender: TObject); 
var 
nid: TNotifyIconData; 
begin 
nid.cbSize := sizeof(nid); // nid變量的字節數 
nid.Wnd := Handle; // 主窗口句柄 
nid.uID := -1; // 內部標識,可設為任意數 
nid.hIcon := Application.Icon.Handle; // 要加入的圖標句柄,可任意指 
nid.hIcon := Application.Icon.Handle; // 要加入的圖標句柄,可任意指 

nid.szTip := 'This is a test application'; // 提示字符串 
nid.uCallbackMessage := MY_MESSAGE; // 回調函數消息 
nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有

if not Shell_NotifyIcon(NIM_ADD, @nid) then begin 
ShowMessage('Failed!'); 
Application.Terminate; 
end; 
{將程序的窗口樣式設為TOOL窗口,可避免在任務條上出現} 
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); 
end; 

{程序被關閉時通知Windows去掉小圖標} 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
var 
nid: TNotifyIconData; 
begin 
nid.cbSize := sizeof(nid); // nid變量的字節數 
nid.cbSize := sizeof(nid); // nid變量的字節數 
nid.uID := -1; //內部標識,與加入小圖標時的數一致 
nid.Wnd := Handle; //主窗口句柄 
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小圖標 
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小圖標 
end; 

{主窗口初始化完畢並顯示時將激活Paint重畫事件,此時將主窗口隱藏} 
procedure TForm1.FormPaint(Sender: TObject); 
begin 
Hide; 
end; 

end. 



上例中將程序的圖標放在任務條右下角,然後隱藏自身,當用戶移動鼠標 
至該圖標上時會看到提示字符串,如果單擊該圖標會出現一個對話框,選擇Yes 
退出程序並清除小圖標。 


----------------------------------------------
Delphi開發◆伺服器架設◆免安裝APACHE,PHP,CGI Perl, MYSQL ★
作者:
男 john_worldart (汤) ★☆☆☆☆ -
盒子活跃会员
2003/5/19 20:44:17
5楼: 谢谢 boy 
 
不过我大概读了程序
好像不是实现窗口最小化功能的

我们的疑问是:点窗口中的最小化按钮(自制的按钮)后,如何使程序最小化到任务栏.

(由于没有正式调试过,以上见解是我一时的想法)


----------------------------------------------
-/\ /\---->(个人之愚见,敬请大家指教!)
( ~_~ )
(?) (?)
作者:
男 boy (阿門) ★☆☆☆☆ -
盒子活跃会员
2003/5/19 22:32:55
6楼: (轉載)
unit Unit1;

interface 

{ 記住在uses部分中包括 ShellAPI} 

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ShellAPI, StdCtrls, Menus;

{自定義消息,當小圖標捕捉到鼠標事件時Windows向回調函數發送此消息}
const MY_MESSAGE = WM_USER + 100;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
  procedure FormCreate(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure FormPaint(Sender: TObject);
private
  procedure OnIconNotify(var Message: TMessage);
  message MY_MESSAGE;
public
{ Public declarations }
end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{當小圖標捕捉到鼠標事件時進入此過程}
procedure TForm1.OnIconNotify(var Message: TMessage);
const
  Busy: Boolean = false;
begin
  if not Busy then
  begin
    Busy := true;
    if Message.LParam=WM_LBUTTONDOWN then
      if Application.MessageBox('Are you sure','Exit', MB_YESNO)=IDYES then
        Close;
        Busy := false
  end;
end;
{當主Form建立時通知Windows加入小圖標}
procedure TForm1.FormCreate(Sender: TObject);
var
  nid: TNotifyIconData;
begin
  nid.cbSize := sizeof(nid); // nid變量的字節數
  nid.Wnd := Handle; // 主窗口句柄
  nid.uID := 1; // 內部標識,可設為任意數
  nid.hIcon := Application.Icon.Handle; // 要加入的圖標句柄,可任意指定
  nid.szTip := 'This is a test application'; // 提示字符串
  nid.uCallbackMessage := MY_MESSAGE; // 回調函數消息

  nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有效
  if not Shell_NotifyIcon(NIM_ADD, @nid) then
  begin
    ShowMessage('Failed!');
    Application.Terminate;
  end;
   {將程序的窗口樣式設為TOOL窗口,可避免在任務條上出現}
   SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
   Hide;
end;
{程序被關閉時通知Windows去掉小圖標}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  nid: TNotifyIconData;
begin
  nid.cbSize := sizeof(nid); // nid變量的字節數
  nid.uID := 1; //內部標識,與加入小圖標時的數一致
  nid.Wnd := Handle; //主窗口句柄
  Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小圖標
end;
{主窗口初始化完畢並顯示時將激活Paint重畫事件,此時將主窗口隱藏}
procedure TForm1.FormPaint(Sender: TObject);
begin
    Hide
end;

end.
==============================
object Form1: TForm1
  Left = 192
  Top = 107
  Width = 544
  Height = 375
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnClose = FormClose
  OnCreate = FormCreate
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
  object PopupMenu1: TPopupMenu
    Left = 142
    Top = 74
  end
end

----------------------------------------------
Delphi開發◆伺服器架設◆免安裝APACHE,PHP,CGI Perl, MYSQL ★
作者:
男 Another (Another) ★☆☆☆☆ -
盒子活跃会员
2003/5/20 9:02:12
7楼: 试试吧!

DefWindowProc(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0); 
DefWindowProc(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);
DefWindowProc(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);


----------------------------------------------
按此在新窗口浏览图片
作者:
男 fidido (swGuitar) ★☆☆☆☆ -
盒子活跃会员
2003/5/20 9:44:17
8楼: 长知识呀~~~~~~~~~~~按此在新窗口浏览图片
----------------------------------------------
我我,我是一只菜鸟,菜菜菜菜菜菜,菜菜菜菜菜菜菜菜菜菜菜菜~~~~~~~~~按此在新窗口浏览图片
作者:
男 wufen (wufen) ★☆☆☆☆ -
盒子活跃会员
2003/5/20 14:42:26
9楼: 真是。。长知识啊!!好好研究!!
----------------------------------------------
delphi菜鸟
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行82.03125毫秒 RSS