此FORM為何只在Activate時有作用,但Close沒有作用呢? |
答題得分者是:wameng
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
第一次貼程式碼,請各位大大見諒…
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TMainForm = class(TForm) OnActivateTmrTimer: TTimer; OnCloseTmrTimer: TTimer; CloseTimer: TTimer; procedure OnActivateTmrTimerTimer(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure OnCloseTmrTimerTimer(Sender: TObject); procedure CloseTimerTimer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.dfm} procedure TMainForm.OnActivateTmrTimerTimer(Sender: TObject); begin with Self do begin Top := Top - 10; if Top <= (Screen.WorkAreaHeight - Height) then OnActivateTmrTimer.Enabled := False; end; end; procedure TMainForm.FormActivate(Sender: TObject); begin with Self do begin Top := Screen.WorkAreaHeight; Left := Screen.Width - Width; OnActivateTmrTimer.Enabled := True; end; end; |
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
貼不完,網路連線忙碌,繼續下面還沒完的:
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin with Self do begin Top := Screen.WorkAreaHeight - Height; Left := Screen.Width - Width; OnCloseTmrTimer.Enabled := True; end; end; procedure TMainForm.OnCloseTmrTimerTimer(Sender: TObject); begin with Self do begin Top := Top 10; if Top > Screen.WorkAreaHeight then OnCloseTmrTimer.Enabled := False; end; end; procedure TMainForm.CloseTimerTimer(Sender: TObject); begin Self.Close; end; procedure TMainForm.FormCreate(Sender: TObject); begin CloseTimer.Enabled := True; end; end. |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
在Close 時,就已經CLOSE 終止程式。
當然就不會執行 "Close時郤不會像msn那樣收回去" 1.可以在OnClose 事件。不要利用Timer 的事件,改用SLEEP
2. 若堅持要用TImer,可設置一變數 CanClose。
在第一次關閉視窗,觸發OnCloseTmrTimer。並設定變數及取消關閉。
當
procedure TMainForm.OnCloseTmrTimerTimer(Sender: TObject);
begin
with Self do
begin
Top := Top 10;
if Top > Screen.WorkAreaHeight then
begin
OnCloseTmrTimer.Enabled := False; CanClose := True;
Close;
end;
end;
end;
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
type
TForm1 = class(TForm)
OnActivateTmrTimer: TTimer;
OnCloseTmrTimer: TTimer;
procedure OnActivateTmrTimerTimer(Sender: TObject);
procedure OnCloseTmrTimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
CanClose : Boolean;
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM} procedure TForm1.OnActivateTmrTimerTimer(Sender: TObject);
begin
with Self do
begin
Top := Top - 10;
if Top <= (Screen.WorkAreaHeight - Height) then
OnActivateTmrTimer.Enabled := False;
end;
end; procedure TForm1.OnCloseTmrTimerTimer(Sender: TObject);
begin
with Self do
begin
Top := Top 10;
if Top > Screen.WorkAreaHeight then
begin
OnCloseTmrTimer.Enabled := False;
CanClose := True;
Close;
end;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
CanClose :=false;
end; procedure TForm1.FormActivate(Sender: TObject);
begin
with Self do
begin
Top := Screen.WorkAreaHeight ;
Left := Screen.Width - Width;
OnActivateTmrTimer.Enabled := True;
end;
end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Top := Screen.WorkAreaHeight - Height;
Left := Screen.Width - Width;
OnCloseTmrTimer.Enabled := True; if Not CanClose then Action := caNone;
end; 試試! 發表人 - wameng 於 2004/10/18 13:32:10
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |