全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1259
推到 Plurk!
推到 Facebook!

FORM中的 FORM

答題得分者是:P.D.
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-03-22 13:26:56 IP:114.46.xxx.xxx 訂閱
 如題

我定一個 CLASS
TNote = class(TForm)
mm : TMemo;
SG : TStringGrid;
edt_1,edt_2: TEdit;
btn : TButton;
........
end;

在 CREATE 的同時 也把其他的 mm,SG,edt,btn 給 create 出來並且放好該放的位置
目前為止都正常

問題1
很奇怪的 NOTE中的EDT 左鍵並沒有反應 一定要用右鍵 游標才會跑進去
問題2
我希望 MainForm中 可以有很多個 note 且當我在對 note中做修改時 Tab鍵只對此note有效 不希望他跳出這個note
但實做後發現似乎做不到 於是我就想把其他人的 tabStop 給 FALSE 掉
但是我又找不到 FORM好像沒有 ENTER這樣的事件
有沒有人可以建議我其他方法???
希望可以一起研究
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-03-22 21:51:56 IP:123.240.xxx.xxx 未訂閱
建議你先把 CREATE 這些物件的 CODE PO上來看看
===================引 用 boy330077 文 章===================
如題

我定一個 CLASS
TNote = class(TForm)
mm : TMemo;
SG : TStringGrid;
edt_1,edt_2: TEdit;
btn : TButton;
........
end;

在 CREATE 的同時 也把其他的 mm,SG,edt,btn 給 create 出來並且放好該放的位置
目前為止都正常

問題1
很奇怪的 NOTE中的EDT 左鍵並沒有反應 一定要用右鍵 游標才會跑進去
問題2
我希望 MainForm中 可以有很多個 note 且當我在對 note中做修改時 Tab鍵只對此note有效 不希望他跳出這個note
但實做後發現似乎做不到 於是我就想把其他人的 tabStop 給 FALSE 掉
但是我又找不到 FORM好像沒有 ENTER這樣的事件
有沒有人可以建議我其他方法???
希望可以一起研究
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-03-23 09:49:11 IP:114.46.xxx.xxx 訂閱

TNote = class(TForm)
mm : TMemo;
SG : TStringGrid;
edt_1,edt_2: TEdit;
btn : TButton;
public
procedure reLocation(Sender: TObject);
procedure saveDat(Sender: TObject; var Action: TCloseAction);
procedure edtKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
constructor Create(AOwner: TComponent); override;
procedure Fenter();
procedure Fexit();
end;


constructor TNote.Create(AOwner: TComponent);
begin
inherited CreateNew(AOwner);
reLocation;
saveDat;
mm := TMemo.Create(Owner);
mm.Parent := Self;
mm.Visible := False;
btn := TButton.Create(Owner);
btn.Parent := Self;
btn.Top := 5; btn.Left := 5;
btn.Height := 20;
btn.Caption := '出考卷';
btn.TabStop := False;
edt_1 := TEdit.Create(Owner);
edt_1.Parent := Self;
edt_1.Top := 30; edt_1.Left := 5;
edt_1.Height := 20;
edt_1.Tag := 1;
edt_1. edtKeyDown;
edt_1.ReadOnly := False;
edt_2 := TEdit.Create(Owner);
edt_2.Parent := Self;
edt_2.Top := 30;
edt_2.Height := 20;
edt_2.Tag := 2;
edt_2. edtKeyDown;
SG := TStringGrid.Create(Owner);
SG.Parent := Self;
SG.Top := 55; SG.Left := 5;
SG.ColCount := 2;
SG.Cells[0,0] := '單字'; SG.Cells[1,0] := '翻譯';
SG.FixedCols := 0;
SG.ScrollBars := ssVertical;
SG.TabStop := False;
end;

大概就是這樣,我只學過基礎的,這些是我查網頁或是看書一點一點拼湊出我想像的功能,也不知道是不是符合正統順序

delphi新手還請各位多多指教
編輯記錄
boy330077 重新編輯於 2012-03-22 19:50:09, 註解 無‧
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-03-24 11:16:27 IP:118.169.xxx.xxx 未訂閱
由於你並沒有上來全文, 其中關鍵點我看不到, 只好就你提供的code重寫開一個專案來跑,  
但實作並沒有你提到 edit 部份必須要用右鍵才能點到 欄位 內輸入的問題這是我重製的全文
下回建議你要 po source code , 請點選回文上方有一個程式碼區塊: Delphi , 這樣比較容易閱讀,
也不會產生一些亂七八糟的文字

[code delphi]
unit P_CreateForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, Buttons;

type
TNote = class(TForm)
mm : TMemo;
SG : TStringGrid;
edt_1,edt_2: TEdit;
btn : TButton;

public
procedure reLocation(Sender: TObject);
procedure saveDat(Sender: TObject; var Action: TCloseAction);
procedure edtKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
constructor Create(AOwner: TComponent); override;
procedure Fenter();
procedure Fexit();
end;

type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.DFM}
constructor TNote.Create(AOwner: TComponent);
begin
inherited CreateNew(AOwner);
reLocation;
saveDat;

mm := TMemo.Create(Owner);
mm.Parent := Self;
mm.Visible := False;
btn := TButton.Create(Owner);
btn.Parent := Self;
btn.Top := 5;
btn.Left := 5;
btn.Height := 20;
btn.Caption := '出考卷';
btn.TabStop := False;

edt_1 := TEdit.Create(Owner);
edt_1.Parent := Self;
edt_1.Top := 30;
edt_1.Left := 5;
edt_1.Height := 20;
edt_1.Tag := 1;
edt_1. edtKeyDown;
edt_1.ReadOnly := False;

edt_2 := TEdit.Create(Owner);
edt_2.Parent := Self;
edt_2.Top := 30;
edt_2.Height := 20;
edt_2.Tag := 2;
edt_2. edtKeyDown;

SG := TStringGrid.Create(Owner);
SG.Parent := Self;
SG.Top := 55; SG.Left := 5;
SG.ColCount := 2;
SG.Cells[0,0] := '單字';
SG.Cells[1,0] := '翻譯';
SG.FixedCols := 0;
SG.ScrollBars := ssVertical;
SG.TabStop := False;
end;

procedure TNote.reLocation(Sender: TObject);
begin
end;

procedure TNote.saveDat(Sender: TObject; var Action: TCloseAction);
begin
end;

procedure TNote.edtKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
end;

procedure TNote.Fenter();
begin
end;

procedure TNote.Fexit();
begin
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var note1: tnote;
begin
note1:= tnote.Create(self);
note1.Show;
end;

end.
[/code]

boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-03-25 23:56:54 IP:114.46.xxx.xxx 訂閱
 感謝您幫我測試  關於游標問題我會再看看(不知道為什麼我就是要用右鍵)

那另一個問題

沒有簡單的方法可以鎖定TAB在某一個FORM內?
或著有沒有辦法知道 我現再進入或是離開某個小 FORM嗎?
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-03-26 00:26:24 IP:118.169.xxx.xxx 未訂閱
要鎖定一個form, 用 ShowModal 最直接, windows是一多工多窗的系統, 
你想要在多個Form中鎖定, 這基本上是違背 windows 本身的"人體工學",
或許有辦法, 但我沒有研究
要偵測進入那一個form, 可以用一個 public 變數記錄,
而每一個form 都有 o n A c t i v e 可以偵測
===================引 用 boy330077 文 章===================
感謝您幫我測試 關於游標問題我會再看看(不知道為什麼我就是要用右鍵)

那另一個問題

沒有簡單的方法可以鎖定TAB在某一個FORM內?
或著有沒有辦法知道 我現再進入或是離開某個小 FORM嗎?
boy330077
一般會員


發表:39
回覆:59
積分:19
註冊:2009-10-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2012-03-26 15:35:29 IP:114.46.xxx.xxx 訂閱
感謝指導

試了一下 onActive

我覺得因該可以做出我要的功能

感謝您的用心回覆與指導
系統時間:2017-12-16 13:21:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!