線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2110
推到 Plurk!
推到 Facebook!

讓程式暫停當按了 ENTER 又繼續

答題得分者是:careychen
nokia2005
一般會員


發表:27
回覆:18
積分:9
註冊:2006-12-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-30 17:46:01 IP:220.228.xxx.xxx 訂閱
有無任何方法能讓程式 "暫停" 而畫面不會像當機一樣
而當我再按 ENTER 時又能繼續讓程式繼續運作呢
因我找了很多文章但還是不明白要怎麼做

謝謝
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-30 18:19:44 IP:220.141.xxx.xxx 訂閱
unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ToBreak : Boolean;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ToBreak := False;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = Vk_Return Then Begin
Form1.Enabled := True;
ToBreak := True;
end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
while True Do Begin
Application.ProcessMessages;
Form1.Enabled := False;
If ToBreak Then Begin
Form1.Enabled := True;
Break;
end;
end;
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
OnActivate = FormActivate
OnCreate = FormCreate
OnKeyDown = FormKeyDown
PixelsPerInch = 96
TextHeight = 13
end
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-07-30 20:56:22, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-31 00:09:43 IP:219.68.xxx.xxx 未訂閱
你的語意非常不明確
1.暫停? 是在程式運作中任地方可以暫停, 還是運行到那一個地方要暫停/
2.暫停不會像當機, 是暫停什麼東西, 是暫停所有的運作, 一直到按下enter, 還是其他事照作, 但某些東東暫停?
3.請說清楚你的想法, 謝謝!
===================引 用 nokia2005 文 章===================
有無任何方法能讓程式 "暫停" 而畫面不會像當機一樣
而當我再按 ENTER 時又能繼續讓程式繼續運作呢
因我找了很多文章但還是不明白要怎麼做

謝謝
nokia2005
一般會員


發表:27
回覆:18
積分:9
註冊:2006-12-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-31 09:05:44 IP:220.228.xxx.xxx 訂閱
感謝 pceyes 前輩的指導但它一開始跑就會停止了
~~~~~
我目前是做了一個按鈕它內部有五個PROCEDURE
我希望當它程式執行到第二個PROCEDURE時它就會自動停止當我再按了ENTER時它又開始從第三個PROCEDURE開個跑
SORRY一開始沒有說明清楚
謝謝

careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-07-31 09:31:49 IP:218.210.xxx.xxx 訂閱
後來說清楚後,跟一開始問的似乎不一樣,那你可以修改 pceys 大的程式一下就行了

[code delphi]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ToBreak: Boolean;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
// 這個的目的是不要讓你的 Focus 在 Button 上,
// 以免測試一直按下 Enter 時卻一直進入本 Function
Memo1.SetFocus;

ToBreak := True;
Memo1.Lines.Add('First Procedure');
while ToBreak Do Application.ProcessMessages;

ToBreak := True;
Memo1.Lines.Add('Second Procedure');
while ToBreak Do Application.ProcessMessages;

ToBreak := True;
Memo1.Lines.Add('Third Procedure');
while ToBreak Do Application.ProcessMessages;

ToBreak := True;
Memo1.Lines.Add('Fourth Procedure');
while ToBreak Do Application.ProcessMessages;

ToBreak := True;
Memo1.Lines.Add('Fifth Procedure');
while ToBreak Do Application.ProcessMessages;

Memo1.Lines.Add('Procedure End!!');
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
If Key = Vk_Return Then Begin
ToBreak := False;
end;
end;

end.
[/code]

※注意, Form 的屬性 KeyPreview 要設成 True 哦

建議 Nokia2005 大,學程式是學邏輯和觀念而不是【只學程式】, pceyes 大回答的其實夠解決您的問題
有時試著去變化程式碼的位置,出現的效果也不一樣哦!! 加油~~

===================引 用 nokia2005 文 章===================
感謝 pceyes 前輩的指導但它一開始跑就會停止了
~~~~~
我目前是做了一個按鈕它內部有五個PROCEDURE
我希望當它程式執行到第二個PROCEDURE時它就會自動停止當我再按了ENTER時它又開始從第三個PROCEDURE開個跑
SORRY一開始沒有說明清楚
謝謝

------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-07-31 09:35:03, 註解 調行距‧
careychen 重新編輯於 2008-07-31 09:36:56, 註解 Form 的屬性 KeyPreview 要設成 True ‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-07-31 09:38:20 IP:219.68.xxx.xxx 未訂閱
那這簡單啦!

原pceyes的這段程式仍保留
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key = Vk_Return Then ToBreak := True; end;

在每一個procedure的最後寫(或者在BUTTON1中呼叫PROCEDURE1結束後的下一行寫, 同時PROCEDURE2也是)

while True do begin
Application.ProcessMessages;
if ToBreak then break;
end;

如果你不想讓使用者誤以為當機, 在 while 中加一個label顯示在form11, 告知程式暫停

或者根本上述程式都不要做, 只要在每一個procedure 的結束點加入
Application.MessageBox('程式暫停','警告',MB_OK)

接下來PROCEDURE1 如何執行 PROCEURE2 這應該是最基本的呼叫方式, 就不說了
===================引 用 nokia2005 文 章===================
感謝 pceyes 前輩的指導但它一開始跑就會停止了
~~~~~
我目前是做了一個按鈕它內部有五個PROCEDURE
我希望當它程式執行到第二個PROCEDURE時它就會自動停止當我再按了ENTER時它又開始從第三個PROCEDURE開個跑
SORRY一開始沒有說明清楚
謝謝

nokia2005
一般會員


發表:27
回覆:18
積分:9
註冊:2006-12-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-07-31 11:13:32 IP:220.228.xxx.xxx 訂閱
非常感謝
pceyes
P.D.
careychen
各位前輩
您們的回應都對我極大的幫助
謝謝
系統時間:2024-04-28 9:26:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!