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

如何知道目前所在之TEDIT物件為何,並填入指定文字

尚未結案
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-21 02:40:43 IP:211.76.xxx.xxx 未訂閱
請問 假設有幾個TEdit(Edit1,Edit2,Edit3...),與一個TButton(Button1) 欲當游標所Edit1並按下Button1時,即在Edit1填入特定文字,相同當游標位於Edit2時,當按下Button1時即在Edit2寫入相同之字串 如 procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text := Edit1.Text 'AAA'; end; 但述是將資料填入固定之EDIT1,而我應如何知道目前所在之物件為何,如Edit1 or Edit2,以將文字填入遊標所在之EDIT上? 謝謝
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-21 03:22:26 IP:211.76.xxx.xxx 未訂閱
    
  if self.activecontrol is tedit then begin
   
     tedit(self.activecontrol).  do what u want...
    
  end;    
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-21 05:36:27 IP:203.203.xxx.xxx 未訂閱
當游標click BTN 1 時 focus 即由 edit 轉到 BTN 所以妳要的是知道之前的那個 focus 是在那個上面 以下是範例
unit Unit1;    interface    uses
  Forms, StdCtrls, Classes, Controls;    type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  protected
    Oldfocus: TWinControl;
    procedure screedAC(Sender: TObject);
  public
    { Public declarations }      end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
begin     if Oldfocus <> nil then
  begin       TEdit(Oldfocus).Text := TEdit(Oldfocus).Text   ' AddFromBTN1';
   TEdit(Oldfocus).SetFocus;      end;    end;    procedure TForm1.Button2Click(Sender: TObject);
begin     if Oldfocus <> nil then
  begin       TEdit(Oldfocus).Text := TEdit(Oldfocus).Text   ' AddFromBTN2';
   TEdit(Oldfocus).SetFocus;      end;    end;    procedure TForm1.screedAC(Sender: TObject);
begin     if not ((Oldfocus is TEdit) and (ActiveControl is TButton)) then
  if (ActiveControl is TEdit) then Oldfocus := ActiveControl
  else Oldfocus := nil;    end;    procedure TForm1.FormCreate(Sender: TObject);
begin     Screen.OnActiveControlChange := screedAC;    end;    procedure TForm1.Button3Click(Sender: TObject);
begin     if Oldfocus <> nil then
  begin       if Oldfocus = Edit1 then
    TEdit(Oldfocus).Text := TEdit(Oldfocus).Text   ' AddToEdit1'
   else if Oldfocus = Edit2 then
    TEdit(Oldfocus).Text := TEdit(Oldfocus).Text   ' AddToEdit2'
   else if Oldfocus = Edit3 then
    TEdit(Oldfocus).Text := TEdit(Oldfocus).Text   ' AddToEdit3';
   TEdit(Oldfocus).SetFocus;      end;    end;    end.
發表人 - syntax 於 2004/01/21 05:40:19
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-21 05:39:33 IP:203.203.xxx.xxx 未訂閱
引言:
  if self.activecontrol is tedit then begin
   
     tedit(self.activecontrol).  do what u want...
    
  end;    
This code never runs if placed in TForm1.Button1Click, cause of the ActiveControl now is that button
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-21 11:33:33 IP:203.204.xxx.xxx 未訂閱
我會建議您 不要用TButton 改用TSpeedButton  正如syntax大大所云當按下TButton時Focus跑到TButton而不在TEdit 但改用TSpeedButton 因其不會取得Focus 故按下TSpeedButton時Focus仍在原位置中(即TEdit) ,然後用hahalin大大提供的程式碼即可以了(如下)    
引言:
  if self.activecontrol is tedit then begin
   
     tedit(self.activecontrol).  do what u want...
    
  end;    
新年快樂!!!!!!!!!!!!!!!!!!!!!!!!!!! 發表人 - chance36 於 2004/01/21 11:34:47
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-22 01:23:25 IP:211.76.xxx.xxx 未訂閱
感謝各位我終於了解 謝謝
系統時間:2024-05-03 9:33:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!