無法設定自訂元件的PasswordChar屬性? |
缺席
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
無法設定自訂元件的PasswordChar屬性?
各位前輩及版主大大: 我使用TntDBEdit為我輸入的自訂元件,我在自訂元件中多了PasswordChar屬性 我將PasswordChar設定成*,可以變成密碼的*顯示,但是我發現,屬性是有改變, 但是實際執行時,卻無法顯示我想的*,卻是資料庫實際的值,但是如果我單純 使用TntDBEdit元件,設定PasswordChar為*,卻是可以達成我想要的*顯示,不知道 我到底哪裡出錯了! 懇請各為前輩提示! function Get_PasswordChar: WideChar; procedure Set_PasswordChar(Value: WideChar); //--------------------------------------------------------- property DataField_PasswordChar: WideChar read Get_PasswordChar write Set_PasswordChar; procedure YaoEdit.Set_PasswordChar(Value: WideChar); begin UTEdit.PasswordChar := widechar(Value); end; function YaoEdit.Get_PasswordChar: WideChar; // 傳回值 begin Result := UTEdit.PasswordChar; end; //==============================================================================
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
你是繼承自 TDBEdit 吧! property PasswordChar: Char read FPasswordChar write SetPasswordChar default #0; 所以你的 TntDBEdit 應該只要如此TDBEdit 已經 property PasswordChar; 如果還要另外加工, 則如此處理 published ... function TntDBEdit .GetPasswordCharbegin inherited ; end; TntDBEdit SetPasswordChar(Value);
------
將問題盡快結案也是一種禮貌! |
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
danny前輩:
感謝您花這麼多時間並且詳細的解說和撰寫範例,對物件繼承的概念,我想我清楚了一些了!不過我仍然有一些問題, 因為我的自訂vcl物件是複合物件,也就是說除了tntdbedit外還有lablel和button,也就是這樣,導致danny前輩您的程式碼, 我卻不知道要如何套用,本想說,我繼承原tntdbedit的 procedure SetPasswordChar(const Value: WideChar);但是 因為原來tntdbedit物件宣告的區段在 private區段,所以實際上我在使用時,並無法參考到SetPasswordChar的成員函數, 會出現Undeclated identifier警告,不知道要如何解決? 懇請各位在給予指正! 萬分感謝! procedure YaoEdit.Set_PasswordChar(const Value: WideChar); begin inherited SetPasswordChar; UTEdit.PasswordChar := Value; end; function YaoEdit.Get_PasswordChar: WideChar; // 傳回值 begin inherited UTEdit.PasswordChar; // inherited GetPasswordChar(Value); Result := UTEdit.PasswordChar; end;
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
Danny 前輩可以否請教一下:
我查了vcl元件原始碼: TCustomEdit C:\Program Files\Borland\Delphi7\Source\Vcl\ExtCtrls.pas\StdCtrls.pasprocedure TCustomEdit.SetPasswordChar(Value: Char); TLabelEdit C:\Program Files\Borland\Delphi7\Source\Vcl\ExtCtrls.pas 我看到關於Passwordchar設定的程式碼,不知道裡面的部份代碼,我實在看不懂,可否煩請前輩解說! 感謝您! procedure TCustomEdit.SetPasswordChar(Value: Char); begin if FPasswordChar <> Value then begin FPasswordChar := Value; if HandleAllocated then // 看不懂這一行! begin SendMessage(Handle, EM_SETPASSWORDCHAR, Ord(FPasswordChar), 0); // 看不懂這一行! SetTextBuf(PChar(Text)); // 看不懂這一行! end; end; end;
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
我目前在表單上,加了一段指定的程式竟然就可以顯示******密碼字元了!真是奇怪啊!
我在自訂物件上有一個 FPasswordChar: WideChar;的欄位用以儲存密碼字元,但是我發現 於表單建立時,指定星號字元當密碼顯示,就會正常,若無加上則只會顯示原來資料庫的內容 但是我明明有在表單上得自訂物件,去設定DB_Field_PasswordChar 為'*',但是用屬性編輯器 變更DB_Field_PasswordChar,在沒有設計時期,自訂物件的TntDBedit物件會顯示******, 但是只要一執行程式開啟表單,若無加上 self.YaoEdit1.DB_Field_PasswordChar := '*'; 這個程式碼 則又會回到原資料庫的內容!不知道我到底哪邊出了問題!真是想不透啊! ================================================= // 表單上加上這個程式碼,則密碼顯示*效果會出現,若註解掉,則又會顯示原資料庫內容 procedure TFRM_USER.FormCreate(Sender: TObject); begin inherited; self.YaoEdit1.DB_Field_PasswordChar := '*'; // 於表單建立時,指定星號字元當密碼顯示,就會正常,若無加上則只會顯示原來資料庫的內容 end; ================================================= 物件的密碼屬性設定 ================================================= property DB_Field_PasswordChar: WideChar read Get_PasswordChar write Set_PasswordChar; 屬性設定的程式碼部份 ================================================= function TYaoEdit.Get_PasswordChar: WideChar; begin Result := FPasswordChar; end; procedure TYaoEdit.Set_PasswordChar(const Value: WideChar); begin if FPasswordChar <> Value then begin FPasswordChar := Value; UTEdit.PasswordChar := FPasswordChar; end; end; =================================================
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
看來你的元件並沒有繼承自 TDBEdit 請參考以下code modified.
另外, 下次請post出完整的source code 不然沒有人可以用猜的解決你的問題. function TYaoEdit.Get_PasswordChar: WideChar; begin Result := UTEdit.PasswordChar; end; procedure TYaoEdit.Set_PasswordChar(const Value: WideChar); begin if UTEdit.PasswordChar <> Value then begin UTEdit.PasswordChar := Value; end; end;
------
將問題盡快結案也是一種禮貌! |
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |