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

如何動態建立tab定位?

缺席
Reiji
初階會員


發表:30
回覆:57
積分:32
註冊:2008-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-06-27 17:01:08 IP:61.219.xxx.xxx 訂閱
該如何動態的設定Paragraph.tab的值?
例如以下內容:
1.
abc 1
|←定位點設為4字元
2.
當使用者輸入以下內容後,Enter後每按下tab鍵,會定位在|位置
abc 1 edfgh 2
| | |
有點類似程式編輯器的格式化
------
永遠都是新手
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-06-28 12:38:28 IP:123.193.xxx.xxx 未訂閱

[code delphi]
unit fMain;

interface

uses
Windows, Classes, Messages, Controls, Dialogs, Forms, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
procedure DO_OnMessage(var Msg: TMsg; var Handled: Boolean);
public
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := DO_OnMessage;
Edit1.Text := 'AAA BBB CCC DDD EEE FFFFF';
end;

procedure TForm1.DO_OnMessage(var Msg: TMsg; var Handled: Boolean);
begin
if(ActiveControl is TEdit) and
(Msg.message=WM_KEYDOWN) and
(Msg.wParam=$09) then //TAB
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
Handled := True;
end;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
I, L: Integer;
S: string;
begin
case Key of
VK_TAB:
begin
S := Edit1.Text;
L := Length(S);
I := Edit1.SelStart 1;
while (I#$20) do Inc(I);
while (I if I Edit1.SelStart := I;
end;
end;
end;

end.
[/code]
Reiji
初階會員


發表:30
回覆:57
積分:32
註冊:2008-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-30 08:34:25 IP:61.219.xxx.xxx 訂閱
非常抱歉...
我試著把這個例子run了一下
但是只有一開始edit裡出現字以外
其他並無動作?
元件裡小弟只建立了一個edit
是不是哪裡有遺漏呢?
------
永遠都是新手
lu0720@yahoo.com.tw
一般會員


發表:0
回覆:9
積分:6
註冊:2006-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-06-30 15:30:27 IP:59.124.xxx.xxx 訂閱
看不太懂你的意思耶。
不是按enter後再按tab鍵可將游標指向空白後的第一個字上方,怎麼看這程式都是ok的啊。
還是你想要的結果不是這樣的啊。

===================引 用 Reiji 文 章===================
非常抱歉...
我試著把這個例子run了一下
但是只有一開始edit裡出現字以外
其他並無動作?
元件裡小弟只建立了一個edit
是不是哪裡有遺漏呢?
------
RogersLu
Reiji
初階會員


發表:30
回覆:57
積分:32
註冊:2008-06-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-06-30 16:32:41 IP:61.219.xxx.xxx 訂閱
被lu0720一說,發現真的可以,請原諒小弟的愚笨@@"
不過小弟要的確實也不是這樣
是有點類似word裡的tab定位點
所以是依第一行的空白去建立
第二行在按tab時會自動對齊第一行
例如第一行先輸入了兩個空白再打字
enter後第二行游標會停在兩個空白後的地方
而再按一次tab會與第一行的第二個空格對齊
也就是第2個例子

小弟是想到動態建立tab位置的想法
不知道可不可行?
建立定位點小弟是沒問題的
但問題就是該怎麼去給動態的定位點
還有要給幾個tab點...
而且搜尋動態建立tab點的方法也一直遍尋不著
不曉得是不是搜尋的關鍵字有問題

------
永遠都是新手
編輯記錄
Reiji 重新編輯於 2008-06-30 16:36:05, 註解 無‧
Reiji
初階會員


發表:30
回覆:57
積分:32
註冊:2008-06-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-07-01 16:52:08 IP:61.219.xxx.xxx 訂閱
小弟我用上面這個範例去加以修改成RichEdit的型態
並試著作出來,似乎也有所成效
但不知道該如何讓它的每一tab是一個字元?
已經用了Courier New字型和fpFixed設定
但卻有時有成效,有時沒有成效,而且字也並不會同一寬度
如果在第2行輸入內容
到了第3行又會以奇怪的方式亂跳
該怎麼樣作才能達到小弟想要的呢?

小弟作的範例
http://delphi.ktop.com.tw/download.php?download=upload/4869ed313f7bb_TabTest.zip
------
永遠都是新手
編輯記錄
Reiji 重新編輯於 2008-07-01 16:58:19, 註解 無‧
Reiji 重新編輯於 2008-07-09 14:55:15, 註解 無‧
Reiji
初階會員


發表:30
回覆:57
積分:32
註冊:2008-06-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-07-17 16:58:38 IP:61.219.xxx.xxx 訂閱
看樣子...小弟的問題是無解?
唉唉...自己來推一下自己的問題...
不想缺席啊>"<~
------
永遠都是新手
系統時間:2024-04-29 15:46:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!