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

TEdit、TMemo..等元件,如何改變游標樣式

答題得分者是:hagar
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-12 10:11:01 IP:61.59.xxx.xxx 未訂閱
如附圖 請問各位大大,Edit或Memo裡面的游標(一閃一閃的那個),是否可以改變它的大小或顏色或寬度呢。 ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
hahalin
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-12 10:38:01 IP:218.170.xxx.xxx 未訂閱
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-12 11:09:08 IP:61.59.xxx.xxx 未訂閱
謝謝hahalin大大的回答 不過我是想改變輸入的游標、並不是滑鼠的游標。 ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
hagar
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-12 11:40:35 IP:202.39.xxx.xxx 未訂閱
您好, 參考 Peter Below 的 TCaretEdit 試試: http://groups.google.com.tw/group/borland.public.delphi.vcl.components.using.win32/msg/8cf2ddeb21305f75?hl=zh-TW -- hagar.
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-12 13:56:19 IP:61.222.xxx.xxx 未訂閱
事實上,就是透過這些 API 處理。 CreateCaret DestroyCaret HideCaret ShowCaret     hagar兄  所提供的 TCaretEdit。 有一個小問題,就是當 TabOrder 次序為0。游標就不會顯現出來。  主要漏了處理 WM_KEYDOWN,WM_LBUTTONDOWN 訊息。加進去處理,就可以了。    以下使用沒有繼承元件的作法。參考
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  public
  end;    var
  Form1: TForm1;    implementation
{$R *.DFM}    var
  CaretBmp : TBitmap;
  OldEditWndProc : Pointer;    function NewEditWndProc(hWindow: HWnd; Msg ,WParam,LParam: Longint): Longint;stdcall;
begin
  Result := CallWindowProc(OldEditWndProc,hWindow, Msg, WParam, LParam);
  Case Msg of
    WM_KEYDOWN,WM_LBUTTONDOWN,WM_SETFOCUS  :
                  begin
                    CreateCaret(hWindow, CaretBmp.Handle, 0, 0);
                    ShowCaret(hWindow);
                  end;
  end;
end;    procedure TForm1.FormCreate(Sender: TObject);
Const
  CaretW = 3;   {游標寬}
  CaretH = 12;  {游標長}
  CaretColor = clBlue;  {顏色為反相後顏色}
begin
  CaretBmp := TBitmap.Create;
  With CaretBmp do
  begin
    Width  := CaretW;
    Height := CaretH;
    Canvas.Brush.Color := CaretColor;
    Canvas.FillRect(Canvas.ClipRect);
  end;
  OldEditWndProc := Pointer(SetWindowLong(Edit1.Handle,GWL_WNDPROC
                           ,LongInt(@NewEditWndProc)));
end;    procedure TForm1.FormDestroy(Sender: TObject);
begin
  SetWindowLong(Edit1.Handle,GWL_WNDPROC, LongInt(OldEditWndProc));
  CaretBmp.Free;
end;
~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-13 08:10:40 IP:203.73.xxx.xxx 未訂閱
謝謝hagar大大與wameng大大,我是用類似wameng大大的方法解決的, 不過hagar大大提供了我解決的方向,wameng大大又提供了範例程式, 真是太感激各位大大。 ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
系統時間:2024-05-07 16:28:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!