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

關於SetFocus

答題得分者是:banson1716
Paicaso
中階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-06 03:12:19 IP:211.74.xxx.xxx 未訂閱
有一主程式各去執行副程式,希望能將焦點放在指定之處,但會出現Can't Focus a disable or invisible windows' 但我只要將副程式中DBGRID1.SetFocus省略或放在FormActivate即可,但這不是我要的結果,能給我一些建議? 是不是因傳給副程式執行時Form2.QuickSearch_A(INPUT.TEXT);這時副程式根本還沒開啟Form2.SHOWMODAL; thanks!! Form1: procedure TForm1.BitBtn1Click(Sender: TObject); begin IF Application.FindComponent('Form2')=nil then Application.CreateForm(TForm2, Form2 ); Form2.QuickSearch_A(INPUT.TEXT); Form2.SHOWMODAL; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin IF Application.FindComponent('Form2')=nil then Application.CreateForm(TForm2, Form2 ); Form2.QuickSearch_B(INPUT.TEXT); Form2.SHOWMODAL; end; Form2: procedure TForm2.QuickSearch_A(NO:STRING); begin //程式段省略 DBGRID1.SetFocus; //--->發生錯誤 end; procedure TForm2.QuickSearch_B(NO:STRING); begin //程式段省略 DBGRID2.SetFocus; //--->發生錯誤 end;
FrederickPau
資深會員


發表:4
回覆:161
積分:268
註冊:2002-11-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-06 03:25:10 IP:61.228.xxx.xxx 未訂閱
你的 Form2 還沒 Show 時, 你就要 SetFocus 在 Form2 的元件上, 是會有問題的. 不知道你想要做到的效果是什麼呢? 可以說清楚一些嗎? 發表人 - FrederickPau 於 2003/01/06 03:28:33
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-06 07:22:19 IP:202.39.xxx.xxx 未訂閱
改用 Form2.ActiveControl := DBGrid2; 試試    -- Believe the unbelievable.
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-06 21:48:42 IP:61.66.xxx.xxx 未訂閱
引言: 有一主程式各去執行副程式,希望能將焦點放在指定之處,但會出現Can't Focus a disable or invisible windows' 但我只要將副程式中DBGRID1.SetFocus省略或放在FormActivate即可,但這不是我要的結果,能給我一些建議? 是不是因傳給副程式執行時Form2.QuickSearch_A(INPUT.TEXT);這時副程式根本還沒開啟Form2.SHOWMODAL; thanks!! Form1: procedure TForm1.BitBtn1Click(Sender: TObject); begin IF Application.FindComponent('Form2')=nil then Application.CreateForm(TForm2, Form2 ); Form2.QuickSearch_A(INPUT.TEXT); Form2.SHOWMODAL; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin IF Application.FindComponent('Form2')=nil then Application.CreateForm(TForm2, Form2 ); Form2.QuickSearch_B(INPUT.TEXT); Form2.SHOWMODAL; end; Form2: procedure TForm2.QuickSearch_A(NO:STRING); begin //程式段省略 DBGRID1.SetFocus; //--->發生錯誤 end; procedure TForm2.QuickSearch_B(NO:STRING); begin //程式段省略 DBGRID2.SetFocus; //--->發生錯誤 end;
如果你只是想達成focus的目標, 如 hager兄所說的即可, 不過我提供一個方法, 可以讓你無法create執行時, 而又想如create一啟動後就可以去執行(順位在onactive, onshow之前)    1.在 private 中建立一個
  procedure Start(Sender: Tobject; var Done: boolean);    2.在 implement 下實作
  procedure TForm1.Start(Sender: Tobject; var Done: booean);
          var handle: longInt;
  begin
     handle:= FindWindow('TForm1',nil);   // TForm1 視該unit FormName
     if handle = 0 then exit;
     Application.ProcessMessages;
     Application.OnIdle:= nil;
     Done:= True;         .....
     要實作的程式碼如
     dbgrid1.setfocus;
  end;    3.在
  TForm1.FormCreate(Sender: TObject);
  begin
       .....
       // 最後一列請加上
       Application.OnIdle:= Start;
  end;    這樣就可以達成在create之後, onactive, onshow之前執行指定的程式碼, 而且不只一個動作
banson1716
高階會員


發表:55
回覆:182
積分:167
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-08 22:33:54 IP:61.223.xxx.xxx 未訂閱
試試看把你的  Form2.DBGRID1.SetFocus 放在TForm2.FormShow 中 procedure TForm2.FormShow(Sender: TObject); begin   Form2.DBGRID1.SetFocus; end;  
引言: Form2: procedure TForm2.QuickSearch_A(NO:STRING); begin //程式段省略 DBGRID1.SetFocus; //--->發生錯誤 end; procedure TForm2.QuickSearch_B(NO:STRING); begin //程式段省略 DBGRID2.SetFocus; //--->發生錯誤 end;
系統時間:2024-11-23 6:25:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!