如何將字串訊息顯示的方向改變 |
答題得分者是:ccchen
|
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
是可以用Canvas->Textout完成, 只要先設定font
void __fastcall TForm1::Button1Click(TObject *Sender) { TLogFont vFont; GetObject(Canvas->Font->Handle, sizeof(TLogFont), &vFont); vFont.lfEscapement = 450; //欲轉角度之10倍 Canvas->Font->Handle=CreateFontIndirect(&vFont); Canvas->TextOut(50,100,"測試Test"); }注意必須使用TrueType之font,故測試此程式前先將Form1之font name設為Times New Roman |
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
引言: 請問如何使得要顯示的字串改變方向呢 如逆時針, 順時針, 上下顛倒 謝謝 >>< face="Verdana, Arial, Helvetica"> 提供一個狗尾續貂的例子吧.... class="code"> //--------------------------------------------------------------------------- //目的:繪製一彩色旋轉字串,隨著滑鼠拖曳ScrollBar1而轉動,並即時顯示現在角度 //本程式在BCB5中順利編譯執行 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit7.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { //創造一新提示視窗 HintWindow = new THintWindow(this); //先將原來ScrollBar1元件的訊息處理函式備份起來,已備恢復之用 OldScrollBarWP = ScrollBar1->WindowProc; //再將自訂訊息處理函式,指定給ScrollBar1元件 ScrollBar1->WindowProc = NewScrollBarWP; } //--------------------------------------------------------------------------- //當程式結束時,恢復原來ScrollBar1元件的訊息處理函式 void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { ScrollBar1->WindowProc = OldScrollBarWP; } //--------------------------------------------------------------------------- //當ScrollBar1變動時,即重繪Form1上彩色字串 void __fastcall TForm1::ScrollBar1Change(TObject *Sender) { //先清除Form1上的繪製字串,以提供下一新彩色字串繪製 Refresh(); const HWND HWnd = Handle; //建立一邏輯字型結構,以供調整結構內容 LOGFONT lf; //先清除此結構位置的殘餘資料 ::ZeroMemory(&lf, sizeof(LOGFONT)); //自行設定邏輯字型結構中各項資料 lf.lfHeight = 20; lf.lfEscapement = 10 * ScrollBar1->Position; lf.lfOrientation = 10 * 90; lf.lfCharSet = DEFAULT_CHARSET; strcpy(lf.lfFaceName, "新細明體"); //結構各項資料設定好後,開始創造此一新字型 HFONT HFont = ::CreateFontIndirect(&lf); //將此新邏輯字型結構選入Form1中,取代原有邏輯字型結構 //並儲存原Form1的字型結構,以供恢復之用 HDC Hdc = ::GetDC(HWnd); HFONT HOldFont = ::SelectObject(Hdc, HFont); //設定字串色彩 ::SetTextColor(Hdc, RGB(255-ScrollBar1->Position%5, ScrollBar1->Position%5, 255-ScrollBar1->Position%5)); //在Form1上繪製此彩色字串 ::TextOut(Hdc, Width/2, (ClientHeight-ScrollBar1->Height-StaticText1->Height)/2, "旋轉的字串 ", 11); //繪製完成後,恢復原有邏輯字型結構 ::SelectObject(Hdc, HOldFont); //釋放裝置設備(DC) handle 與物件 ::ReleaseDC(HWnd, Hdc); ::DeleteObject(HFont); } //--------------------------------------------------------------------------- //繪製提示視窗依ScrollBar變動而更新 void __fastcall TForm1::NewScrollBarWP(TMessage &Msg) { //取得滑鼠相對位置 POINT P; ::GetCursorPos(&P); //當滑鼠移動、按下鍵盤按鍵、按下按鈕時,即重繪提示小視窗字串 if(Msg.Msg == WM_MOUSEMOVE || Msg.Msg == WM_KEYDOWN || Msg.Msg == WM_LBUTTONDOWN) { AnsiString text = "現在角度\n是 " IntToStr(ScrollBar1->Position) "度" ; RECT R = {P.x, P.y, P.x 55, P.y 25}; ::OffsetRect(&R, 0, 15); HintWindow->ActivateHint((TRect)R, text); } //若按鈕彈起,則釋放提示小視窗handle if(Msg.Msg == WM_LBUTTONUP ) HintWindow->ReleaseHandle(); //執行原有ScrollBar1元件的訊息處理函式 OldScrollBarWP(Msg); //當ScrollBar1元件重繪時,則取消原有的裝置設備(DC)筆刷, //以防遮蓋自行繪製的提示字串 if(Msg.Msg == WM_PAINT && ActiveControl == ScrollBar1) { HDC Hdc = ::GetDC(ScrollBar1->Handle); //取得提示小視窗的範圍位置 RECT R = RECT(ScrollBar1->ClientRect); //取消原有的裝置設備(DC)筆刷,並儲存原有筆刷 HBRUSH HOldBrush = ::SelectObject(Hdc,::GetStockObject(NULL_BRUSH)); //以空白筆刷重繪提示小視窗 ::Rectangle(Hdc, R.left, R.top, R.right, R.bottom); //完成後,選回原來的筆刷 ::SelectObject(Hdc, HOldBrush); //釋放ScrollBar1裝置設備(DC) handle ::ReleaseDC(ScrollBar1->Handle, Hdc); } } //--------------------------------------------------------------------------- unit7.h//--------------------------------------------------------------------------- #ifndef Unit7H #define Unit7H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TStaticText *StaticText1; TScrollBar *ScrollBar1; void __fastcall ScrollBar1Change(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: // User declarations //提示視窗 THintWindow *HintWindow; Controls::TWndMethod OldScrollBarWP; public: // User declarations //繪製提示視窗依ScrollBar變動而更新 void __fastcall NewScrollBarWP(TMessage &Msg); void __fastcall GetDesktopArea(LPRECT lpRect); __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |