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

如何將字串訊息顯示的方向改變

答題得分者是:ccchen
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-04 14:36:04 IP:61.216.xxx.xxx 未訂閱
請問如何使得要顯示的字串改變方向呢 如逆時針, 順時針, 上下顛倒 謝謝 
------
不要忘記呼吸,不要忘記編程! ∩__∩
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-04 21:55:39 IP:61.221.xxx.xxx 未訂閱
引言: 請問如何使得要顯示的字串改變方向呢 如逆時針, 順時針, 上下顛倒 謝謝 < face="Verdana, Arial, Helvetica"> Royce520 你好: 請問你要 display 在哪裡呢?? 例如~~在 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-05 03:59:25 IP:61.216.xxx.xxx 未訂閱
謝謝你的回應,    我想改變任何可以在 canvas 的顯示字串的方向,    我原來的想法是 bcb 提供如 TextOut 之類的函數    讓我直接顯示旋轉的字串, 不過我沒找到而使用    自己寫的方法, 不知道有沒有更聰明直接的方式呢    , thx  
------
不要忘記呼吸,不要忘記編程! ∩__∩
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-05 07:56:42 IP:61.219.xxx.xxx 未訂閱
是可以用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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-06 05:12:39 IP:210.58.xxx.xxx 未訂閱
引言: 請問如何使得要顯示的字串改變方向呢 如逆時針, 順時針, 上下顛倒 謝謝 < 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
系統時間:2024-03-29 4:26:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!