線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1317
推到 Plurk!
推到 Facebook!

如何寫一個簡單的 ICON 編輯器

尚未結案
stree
一般會員


發表:9
回覆:3
積分:2
註冊:2004-08-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-07 16:14:11 IP:61.56.xxx.xxx 未訂閱
請教各位先進:     小弟最近想寫一個 ICON 編輯器,但是小弟寫寫遇到了一些問題     就是該如何把使用者所輸入的文字轉換成下小弟所附的圖一樣呢?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-07 21:45:04 IP:59.115.xxx.xxx 未訂閱
stree 您好:    看了您這個問題後,我做了些 "將輸入的文字放大繪製到 Image 物件上" 的測試,大致上是 OK 的,這個測試僅針對您所描述的動作而寫的,因此並不包含圈選區域或是其它的編輯動作在內,我將測試的範例碼貼上來,您參考看看吧。    下列程式碼的測試環境中需要三個元件,請設置 Image、Edit、Button 元件各一於 Form 上,然後將下列的處理程序複製到 Button 元件的 OnClick 事件中 (請將相關的元件名稱改成您設置元件的名稱),程式碼修改好之後就編譯執行,執行時請直接在 Edit 物件輸入要顯示的字樣,然後點選 Button 即可看到字樣放大的效果:
const ICONSIZE = 16;  // 設定圖示高度與寬度尺寸 (通常為 16 或 32)
const GRIDSIZE = 20;  // 設定圖示放大倍數 (顯示格線的寬度與高度)    void __fastcall TForm1::Button3Click(TObject *Sender)
{
    Graphics::TBitmap *tmpBitmap = new Graphics::TBitmap();
    AnsiString txt = Edit1->Text;  // 取得 Edit1 輸入的文字 (也可用 Memo 或其它物件)        // 可以預先透過 FontDialog 來設定 Edit (或其它可存放文字資料的物件) 物件所使用的字型名稱與大小,
    // 然後再由 Edit 物件的 Font 屬性來設定此處使用到的字型屬性
    tmpBitmap->Canvas->Font->Name  = Edit1->Font->Name;   // 繪製字樣所使用的字型名稱
    tmpBitmap->Canvas->Font->Size  = Edit1->Font->Size;   // 繪製字樣的字型大小
    tmpBitmap->Canvas->Font->Color = Edit1->Font->Color;  // 繪製字樣的字型顏色        tmpBitmap->Width  = tmpBitmap->Canvas->TextWidth(txt);   // 取得繪製字樣所需的寬度
    tmpBitmap->Height = tmpBitmap->Canvas->TextHeight(txt);  // 取得繪製字樣所需的高度        tmpBitmap->Canvas->Brush->Color = Edit1->Color;  // 設定字樣使用的底色
    // 填塗字樣的底色
    tmpBitmap->Canvas->FillRect(Rect(0, 0, tmpBitmap->Width, tmpBitmap->Height));        // 繪製字樣
    tmpBitmap->Canvas->TextOut(0, 0, txt);        // 重設 Image 物件的尺寸
    Image1->Width  = ICONSIZE * GRIDSIZE;
    Image1->Height = ICONSIZE * GRIDSIZE;
    Image1->Picture->Bitmap->Width  = Image1->Width;
    Image1->Picture->Bitmap->Height = Image1->Height;        // 取得字樣的實際尺寸
    TRect BmpRect = Rect(0, 0, tmpBitmap->Width, tmpBitmap->Height);
    // 設定放大後的尺寸
    TRect ImgRect = Rect(0, 0, tmpBitmap->Width*GRIDSIZE, tmpBitmap->Height*GRIDSIZE);        Image1->Picture->Bitmap->Canvas->Brush->Color = Edit1->Color;  // 設定 Image 使用的底色
    // 填滿 Image 的底色
    Image1->Picture->Bitmap->Canvas->FillRect(Rect(0, 0, Image1->Width, Image1->Height));        // 將文字圖樣放大繪製到 Image 物件上
    Image1->Picture->Bitmap->Canvas->CopyRect(ImgRect, tmpBitmap->Canvas, BmpRect);        Image1->Picture->Bitmap->Canvas->Pen->Color = clSilver;  // 用淺灰色線條繪製格線
    // 繪製縱線,間隔 GRIDSIZE 個點
    for (int x = 0; x < Image1->Width; x  = GRIDSIZE) {
        Image1->Picture->Bitmap->Canvas->MoveTo(x, 0);
        Image1->Picture->Bitmap->Canvas->LineTo(x, Image1->Height);
    }
    // 繪製橫線,間隔 GRIDSIZE 個點
    for(int y = 0; y < Image1->Height; y  = GRIDSIZE){
        Image1->Picture->Bitmap->Canvas->MoveTo(0, y);
        Image1->Picture->Bitmap->Canvas->LineTo(Image1->Width, y);
    }        delete tmpBitmap;
    tmpBitmap = NULL;
}
7 天天敲鍵盤 v 時時按滑鼠 8
系統時間:2024-05-04 2:57:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!