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

PageControl的drawTab 如何加入快捷鍵

答題得分者是:herbert2
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-08-19 20:47:22 IP:114.32.xxx.xxx 訂閱

[code delphi]
procedure Tfrom1.pagecontrol1DrawTab(Control: TCustomTabControl; TabIndex: Integer;
const Rect: TRect; Active: Boolean);
begin
if Active then
begin
Control.Canvas.Brush.Color:=clBlue;
Control.Canvas.Font.Color:=clWhite;
end
else
begin
Control.Canvas.Brush.Color:=clBtnFace;
Control.Canvas.Font.Color:=clBlack;
end;

Control.Canvas.FillRect(Rect);
Control.Canvas.TextOut(Rect.Left 3, Rect.Top 3,PChar(pcMaster.Pages[TabIndex].Caption));
end;
[/code]

第一頁是 &1.首頁 (1.首頁) 可是這樣下去全部變字串Orz, 快捷鍵就無效了orz

herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-08-20 00:35:09 IP:202.39.xxx.xxx 訂閱
小弟測了一下, 在各 TabSheet 的 Caption 分別打 "&1.首頁" "&2.二頁" "&3.三頁",
Run 時按 Alt-1, Alt-2, Alt-3 會跳至指定的 TabSheet 上.
應不須動到 OnDrawTab() 吧!
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-08-20 12:02:49 IP:114.32.xxx.xxx 訂閱
現在想加上顏色,有人說不知道自己現在在哪一頁 orz..

可是text out後變成不吃快捷鍵

drawtab/ownerdraw = false 不加東西 &1.首頁 - > 1.首頁

在drawtab 裡面用 textout .caption( '&1.首頁' )- > &1.首頁

&都出來了orz
編輯記錄
shininggod 重新編輯於 2010-08-20 12:04:37, 註解 無‧
shininggod 重新編輯於 2010-08-20 13:51:34, 註解 錯字orz‧
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-08-20 15:24:14 IP:202.39.xxx.xxx 訂閱
[code cpp]
// 請改寫如下試試:
procedure Tfrom1.pagecontrol1DrawTab(Control: TCustomTabControl; TabIndex: Integer;
const Rect: TRect; Active: Boolean);
var
ixX: Integer;
ixW: Integer;
begin
if Active then
begin
Control.Canvas.Brush.Color:=clBlue;
Control.Canvas.Font.Color:=clWhite;
Control.Canvas.FillRect(Rect);
// 非 Acvive 者, 自動使用 Default 顏色
end;
// else
// begin
// Control.Canvas.Brush.Color:=clBtnFace;
// Control.Canvas.Font.Color:=clBlack;
// end;
// Control.Canvas.FillRect(Rect);
// Control.Canvas.TextOut(Rect.Left 3, Rect.Top 3,PChar(pcMaster.Pages[TabIndex].Caption));
ixW := Control.Canvas.TextWidth(pagecontrol1.Pages[TabIndex].Caption);
ixX := (Rect.Width() - ixW) / 2;
ixW := 2;
if Active then ixW := ixW 2;
// ActivePage 之 Tab Width 較寬, ActivePage 與 TabSheet 間多出分隔橫線.
Control.Canvas.TextOut(Rect.Left ixX,Rect.Top ixW,Pagecontrol1.Pages[TabIndex].Caption);
if Active then
begin
// 改變背景色
Control.Canvas.Pen.Width := 2;
Control.Canvas.Pen.Color := clBtnFace;
Control.Canvas.MoveTo(Rect.Left,Rect.Bottom-1);
Control.Canvas.LineTo(Rect.Right,Rect.Bottom-1);
// 非 Acvive 者, 自動使用 Default 顏色重畫
end;
end;
[/code]
編輯記錄
herbert2 重新編輯於 2010-08-20 15:25:17, 註解 無‧
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-08-20 19:23:03 IP:114.32.xxx.xxx 訂閱
可是這樣還是讓快捷鍵消失orz, *我指的是 accelerator key

例如有PageControl加了3頁 tabSheet
每一頁的catpion為
&1.主檔
&2.明細
&3.其他

顯示的時候會是
1.主檔 | 2.明細 | 3.其他
這裡按 1,2,3會直接跳頁

如果改了tabDraw, OnwerDraw就要調true
這時候就變成
&1.主檔 | &2.明細 | &3.其他
顏色是對的..只是&跑到caption(1,2,3也不會有underline),而且這時候按快捷鍵(1,2,3)無效


補充:我知道這個字是畫上去的,只是想問有沒有辦法一樣讓快捷鍵有效orz
編輯記錄
shininggod 重新編輯於 2010-08-20 19:24:48, 註解 錯字orz‧
shininggod 重新編輯於 2010-08-20 19:47:20, 註解 補充‧
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-08-20 23:31:42 IP:202.39.xxx.xxx 訂閱
小弟是使用 C Builder, TabSheet 同時有顏色變化及 Short Cut, 並未發生問題!
您會不會因 TForm 之 KeyPreview = true 且做了某些處理, 把 Alt-1 等鍵攔截掉了?
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-08-21 10:44:40 IP:114.32.xxx.xxx 訂閱
deplhi裡面的pagecontrol沒有shortcut orz, 所以這個應該是不行

無理desu....

keypreview是true, 有捷esc 跟 enter, 沒有捷到 123~0 ,
只要不開owner draw 就可以用alt 1 2 3 ......
只能等下一版!? 要不就要去拜狗大神看有沒有現成的能用
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-08-21 15:08:39 IP:202.39.xxx.xxx 訂閱
您誤會了吧!
我說的 Short cut, 其實就是 accelerator key, 也就是快捷鍵!
Canvas.TextOut() 的第三個參數是 AnsiString,
故您 Control.Canvas.TextOut(Rect.Left 3, Rect.Top 3,PChar(pcMaster.Pages[TabIndex].Caption));
似應改為 Control.Canvas.TextOut(Rect.Left 3, Rect.Top 3,pcMaster.Pages[TabIndex].Caption) 吧?
shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-09-29 10:29:17 IP:114.34.xxx.xxx 訂閱
pcMaster.Pages[TabIndex].Caption
PChar(pcMaster.Pages[TabIndex].Caption)
PWChar(pcMaster.Pages[TabIndex].Caption) 都試過了不行Orz


都會把&"畫"出來 ,快捷件也沒有orz

shininggod
一般會員


發表:16
回覆:20
積分:17
註冊:2009-05-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-09-29 11:00:47 IP:114.34.xxx.xxx 訂閱
回完就找出問題了Orz,
原因出在要設定 flag := WINDOWS.DST_PREFIXTEXT, 預設是 DST_TEXT

所以要呼叫的DrawState, 把自己的 cavas 丟過去 指定 flag

google萬能.....(拜)

http://www.delphidabbler.com/codesnip?action=named&showsrc=1&routines=DrawDisabledText

話說回來是不是該轉戰delphi C ....

sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#11 引用回覆 回覆 發表時間:2010-10-01 20:05:22 IP:111.254.xxx.xxx 訂閱
Canvas.TextOut 畫不出快速鍵,改用 Windows API 的 DrawText 就畫得出了
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
系統時間:2017-10-20 20:17:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!