「類挑戰題」透過物件操作表單屬性和表單事件 |
尚未結案
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
各位前輩及版主大大:
我想寫一個Form管理物件,比如像Form的KeyPreview事件我們設定為True然後 通常在OnKeyPress(Sender: TObject; var Key: Char);事件上,寫如切換 模擬dos切換物件Focus的程式碼改由Enter按鍵觸發,一般作法都是寫在 BaseForm的表單,然後繼承BaseForm就可以達成! 最近我突發奇想,我在想能不能建立一個form管理物件,而非透過繼承BaseForm 這樣除了可以增加表單佈建的彈性,而且又不用建立繼承BaseForm,當然先不考慮 這樣的作法對管理是否有幫助,我目前已經可以在表單上,拉自訂的管理物件, 除了將form的表單KeyPreview設定為True並且修改該物件的上層表單OnKeyPress 的程式碼,但是我目前雖然達成,但想增加該管理物件的彈性,想說有無辦法 讓Form管理物件增加一個KeyPreview屬性,以決定使用Form管理物件的Form可以決定 是否執行管理物件內的OnKeyPress程式碼,但是我卻苦思不知道要將這一段程式碼, 放在哪裡,因為我放在FRM_MM.Set_KeyPreview的值設定去執行,但是程式卻出現錯誤。 我的問題是: 想請教要將這一段程式碼,放在哪。真是苦思無解! 懇請各位大大開示! function FRM_MM.Get_KeyPreview: Boolean; // 傳回值 begin Result := FKeyPreview; end; procedure FRM_MM.Set_KeyPreview(Value: Boolean); var frm: TForm; begin if FKeyPreview <> Value then begin FKeyPreview := Value; // 有問題程式碼 //============================================================================== frm := TForm(Application.FindComponent(self.Parent)); // move to next control; if self.Get_KeyPreview = True then begin TForm(frm).KeyPreview := True; TForm(frm).OnKeyPress := OnKeyPressNew; end else begin TForm(frm).KeyPreview := false; // TForm(frm).OnKeyPress := nil; end; end; end; // 目前成功作法程式碼,但不具備切換彈性 //============================================================================== constructor FRM_MM.Create(AOwner: TComponent); // 建構子、建立物件初始狀態 begin inherited Create(AOwner); // 上層物件 // ================================ if AOwner is TForm then begin Set_Parent(TForm(AOwner).Name); TForm(AOwner).KeyPreview := True; TForm(AOwner).OnKeyPress := OnKeyPressNew; end;
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |