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

請問如何寫滑鼠移動到某個元件,此元件自動取得焦點

答題得分者是:feng
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-04-30 17:55:08 IP:60.250.xxx.xxx 訂閱
我有個form,上面放著TEdit、TMemo、TComboBox等,想要寫如果滑鼠移到元件上,在這裡我想要如果停留2秒以上此元件就能自動取得焦點,但不知道要如何來做。
編輯記錄
17kobe 重新編輯於 2008-04-30 18:04:31, 註解 無‧
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-01 07:47:38 IP:220.143.xxx.xxx 訂閱
提供一個方法,但這是想法而以,沒有去寫出來

你要計時2秒,你應該會用到Timer那一個元件,可以設定其中計時的秒數
設寫1秒,在Timer中去掃瞄Form中所有的元件的位置
如:Top,Left,Top Heigth,Left+Width
再判讀Mouse指標位置(記得有函數或找一下舊文章)

IF的敘述應該會如下(以下是虛擬的程式碼)

IF (muse.x >= Left And Mouse.x <= Left Width)
And (Mouse.y >= Top And Mouse.y <= Top Heigth) THEN

再弄一個記錄的陣列Record去記錄目前在那一個元件,其中一欄位來記錄秒數
當為記錄秒數的元件為2時,就SetFocus到那個元件。
若記錄中有元件為1,而目前是另一個為1,那舊的就要清除為0

你可以試試...

------
初學、初學、學了很久...還是在初學階段..Orz
feng
一般會員


發表:13
回覆:34
積分:14
註冊:2002-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-02 00:11:24 IP:122.116.xxx.xxx 訂閱
開一個form
放一個 edit 一個 memo 一個timer
設定 timer的interval

[code delphi]
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm2 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
Procedure SetWinControlFocus(const WinObj:TWinControl);
public
{ Public declarations }
end;

var
Form2: TForm2;
OBJ : TWinControl;

implementation
{$R *.dfm}
Procedure TForm2.SetWinControlFocus(const WinObj:TWinControl);
Begin
if Obj = nil then Obj := WinOBJ;
if Obj <> WinObj then
Begin
Obj := WinObj;
Timer1.Enabled := False;
Timer1.Enabled := TRUE;
End;

End;
procedure TForm2.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
SetWinControlFocus(Sender As TWinControl);
end;

procedure TForm2.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
SetWinControlFocus(Sender As TWinControl);
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
(OBJ As TWinControl).SetFocus;
end;

end.
[/code]
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-02 15:35:34 IP:60.250.xxx.xxx 訂閱
feng的方法不錯
但是想加入ComboBox還有問題
feng
一般會員


發表:13
回覆:34
積分:14
註冊:2002-10-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-05-05 00:38:09 IP:122.116.xxx.xxx 訂閱
TComboBox   也可以喔,
把 SetWinControlFocus(Sender As TWinControl); 寫在 OnMouseEnter 事件裡即可。
系統時間:2024-05-06 17:49:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!