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

自製一個VCL 為TEdit右邊加一個button問題?

答題得分者是:code6421
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-20 16:51:09 IP:61.218.xxx.xxx 未訂閱
請教各位前輩 自製一個VCL 為Edit右邊加一個button問題? 但是在輸入資料時Edit的字會跑到Button上面及Button會變白色? 請問要如何修改才可以?? 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆ °∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒ ﹒‧°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒﹒‧°∴°﹒☆°. -------------------------------------------------------------------- unit JKdit; interface uses SysUtils, Classes, Controls, StdCtrls,Buttons; type TJKdit = class(TEdit) private { Private declarations } protected { Protected declarations } FElipsis: TSpeedButton; public { Public declarations } constructor Create(AOwner: TComponent); override; published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('Smaples', [TJKdit]); end; constructor TJKdit.Create(AOwner: TComponent); begin inherited Create(AOwner); Height := 24; Width := 150; // WordWrap := False; //WantReturns := False; FElipsis := TSpeedButton.Create(Self); with FElipsis do begin Parent := Self; Align := alRight; Caption := '...'; end; end; { TElipsisEdit.Create } end. -----------------------------------------------------------------------
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-20 17:35:09 IP:61.61.xxx.xxx 未訂閱
或者你換成用一個 TPanel 來改, 在上面放一個 TEdit 和一個 TSpeedButton 的方式. 就不會因為 TSpeedButton 與 TEdit 的編輯區重覆而產生那樣的問題
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-20 19:38:22 IP:61.70.xxx.xxx 未訂閱
引言: 或者你換成用一個 TPanel 來改, 在上面放一個 TEdit 和一個 TSpeedButton 的方式. 就不會因為 TSpeedButton 與 TEdit 的編輯區重覆而產生那樣的問題
謝謝Brian77前輩的回覆 但一定要加一個TPanel或其它VCL元件來放TEdit 及TSpeedButton 嗎? 因還不太會寫VCL元件所以可否請你教導一下,加一個TPanel要如何做?
code6421
版主


發表:43
回覆:223
積分:208
註冊:2002-08-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-20 21:17:07 IP:61.216.xxx.xxx 未訂閱
 
unit JTButtonEdit;    interface    uses
  Windows,Messages,SysUtils, Classes, Controls, StdCtrls, Mask,Buttons;    type
  TJTButtonEdit = class(TMaskEdit)
  private
    FButton:TSpeedButton;
    //property get/set.
    procedure SetBtnClick(Value:TNotifyEvent);
    function GetBtnClick:TNotifyEvent;
    //windows message hook.
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMSetFocus(var Message:TMessage); message WM_SETFOCUS;
    procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
    { Private declarations }
  protected
    //adjust text area method.
    procedure AdjustTextRect;virtual;
    { Protected declarations }
  public
    procedure CreateParams( var Params: TCreateParams );override;
    constructor Create(Aowner:TComponent);override;
    destructor Destroy;override;
    { Public declarations }
  published
    //event for button click.
    property OnBtnClick:TNotifyEvent read GetBtnClick write SetBtnClick;
    { Published declarations }
  end;    procedure Register;    implementation    constructor TJTButtonEdit.Create(AOwner:TComponent);
begin
  inherited Create(Aowner);
  {Initialize Button}
  FButton:=TSpeedButton.Create(Self);
  FButton.Top:=0;
  FButton.Height:=Height-5;
  FButton.Left:=Width-19;
  FButton.Width:=16;
  FButton.Cursor:=crHandPoint;
  FButton.Parent:=Self;
  FButton.Caption:='...';
end;    destructor TJTButtonEdit.Destroy;
begin
  FButton.Free;
  inherited Destroy;
end;    procedure TJTButtonEdit.AdjustTextRect;
var
  R:TRect;
begin
  {Resize Text Rect}
  FButton.Top:=0;
  FButton.Height:=Height-5;
  FButton.Left:=Width-20;
  FButton.Width:=16;
  FButton.Cursor:=crHandPoint;
  R:= Rect(0, 0, FButton.Left-2,GetClientRect.Bottom-GetClientRect.Top);
  SendMessage(Handle, EM_SETRECT, 0, Longint(@R));
end;    procedure TJTButtonEdit.CMFontChanged(var Message: TMessage);
begin
  inherited;
  { Resize}
  AdjustTextRect;
end;    procedure TJTButtonEdit.WMSize(var Message:TWMSize);
begin
  inherited;
  { Resize}
  AdjustTextRect;
end;    procedure TJTButtonEdit.CreateParams( var Params: TCreateParams );
begin
  inherited CreateParams( Params );
  Params.Style := Params.Style or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or ES_MULTILINE;
end;    procedure TJTButtonEdit.WMSetFocus(var Message:TMessage);
begin
  { defwndproc will resize control in focus message,so we resize to}
  inherited;
  AdjustTextRect;
end;    procedure TJTButtonEdit.SetBtnClick(Value:TNotifyEvent);
begin
  FButton.OnClick:=Value;
end;    function TJTButtonEdit.GetBtnClick:TNotifyEvent;
begin
  Result:=FButton.OnClick;
end;    procedure Register;
begin
  RegisterComponents('CDSamples', [TJTButtonEdit]);
end;    end.
that's my upcoming article(Component Designing-VCL Edition) sample,hopefully can help you. i will explain more about component in new article. enjoy it!! Just coding... Taiwan:http://code6421.ktop.com.tw China:http://home.hoolee.com/~code6421
------
Just codeing...
系統時間:2024-05-18 19:11:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!