Royce520
高階會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:18 回覆:157 積分:100 註冊:2002-09-13
發送簡訊給我
|
請問如何使得要顯示的字串改變方向呢
如逆時針, 順時針, 上下顛倒 謝謝
------ 不要忘記呼吸,不要忘記編程! ∩__∩
|
RaynorPao
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://delphi.ktop.com.tw/download.php?download=upload/48c9d66ac5033_KTOP-%E5%8C%85%E5%AD%90%28%E7%9C%BC%E9%8F%A1%29-Q-100x100.jpg) 發表:139 回覆:3622 積分:7025 註冊:2002-08-12
發送簡訊給我
|
引言:
請問如何使得要顯示的字串改變方向呢
如逆時針, 順時針, 上下顛倒 謝謝
>>< face="Verdana, Arial, Helvetica"> Royce520 你好:
請問你要 display 在哪裡呢??
例如~~在 > --
------ -- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
|
Royce520
高階會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:18 回覆:157 積分:100 註冊:2002-09-13
發送簡訊給我
|
謝謝你的回應,
我想改變任何可以在 canvas 的顯示字串的方向,
我原來的想法是 bcb 提供如 TextOut 之類的函數
讓我直接顯示旋轉的字串, 不過我沒找到而使用
自己寫的方法, 不知道有沒有更聰明直接的方式呢
, thx
------ 不要忘記呼吸,不要忘記編程! ∩__∩
|
ccchen
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表: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
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表: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
|