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

請教大家如何在Panel上特定的座標上寫字?

答題得分者是:axsoft
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-12 11:13:31 IP:61.220.xxx.xxx 未訂閱
小弟想在Panel上的座標(x,y)上寫字,請問該怎麼寫呢?謝謝!
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-12 12:45:36 IP:61.218.xxx.xxx 未訂閱
danielj您好: 參考這個方法試試 How do I draw on top of a TPanel ? http://www.tek-tips.com/gpviewthread.cfm/qid/585086/pid/101/lev2/4/lev3/29    HAVE A NICE DAY FOR YOU
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-12 14:34:50 IP:61.220.xxx.xxx 未訂閱
多謝axsoft大哥的回答,我的問題已解決!
hwtaiya
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-12 22:41:46 IP:210.64.xxx.xxx 未訂閱
請教一下各位專家高手,像 class TPanelCanvasHack : public TPanel { public: __property Canvas; }; 這樣子類似的增加property是否適用於任意的元件,還是說有什麼限制呢? 先謝謝大家啦! **** 我是新手,如果問的會回答的太可笑,請多包涵 ****
------
**** 我是新手,如果問的會回答的太可笑,請多包涵 ****
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-12 23:55:08 IP:211.74.xxx.xxx 未訂閱
hwtaiya 煩請另開新主題發問!!    
deal
一般會員


發表:6
回覆:33
積分:22
註冊:2003-04-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-13 08:52:10 IP:163.29.xxx.xxx 未訂閱
引言: danielj您好: 參考這個方法試試 How do I draw on top of a TPanel ? http://www.tek-tips.com/gpviewthread.cfm/qid/585086/pid/101/lev2/4/lev3/29 HAVE A NICE DAY FOR YOU
請問axsoft,我看過這篇文章了,但我確不知道為何可以這麼用,可以解釋一下嗎?另外,我試過若在程式中手動new一個這篇文章中的TPanelCanvasHack類別,再寫字,就沒有任何反應,這……為什麼??
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-13 23:12:54 IP:211.76.xxx.xxx 未訂閱
引言: 請問axsoft,我看過這篇文章了,但我確不知道為何可以這麼用,可以解釋一下嗎?另外,我試過若在程式中手動new一個這篇文章中的TPanelCanvasHack類別,再寫字,就沒有任何反應,這……為什麼??
deal您好:
  我不太清楚你怎麼寫的,如果您只單單寫個TPanelCanvasHack Class,
  新增了一個Canvas的屬性,但是沒有把TCanvas類別的屬性也繼承了,
  當然不會有任何反應了.    下面的範例,我用比較簡單的方法寫一個不一樣的用法,
 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=11167227&CC=249753">
/---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TPanel *Panel1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TControlCanvas *PanelCanvas = new TControlCanvas;
 PanelCanvas->Control=Panel1;
 SetBkMode(PanelCanvas->Handle, TRANSPARENT); //加了這行就不會有上圖文字白底色出現了
 PanelCanvas->TextOutA(50,50,"TPanel 文字定點輸出");
 delete PanelCanvas;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Panel1=new TPanel(Form1);
  Panel1->Parent=Form1;
  Panel1->Left=4;
  Panel1->Width=200;
  Panel1->Height=100;
  
}
//---------------------------------------------------------------------------
HAVE A NICE DAY FOR YOU 發表人 - axsoft 於 2003/08/13 23:57:02
deal
一般會員


發表:6
回覆:33
積分:22
註冊:2003-04-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-14 09:09:21 IP:163.29.xxx.xxx 未訂閱
引言: deal您好: 我不太清楚你怎麼寫的,如果您只單單寫個TPanelCanvasHack Class, 新增了一個Canvas的屬性,但是沒有把TCanvas類別的屬性也繼承了, 當然不會有任何反應了. < face="Verdana, Arial, Helvetica"> 謝謝axsoft的回應,你的程式我可以了解,但你提到「只單單寫個TPanelCanvasHack Class,新增了一個Canvas的屬性,但是沒有把TCanvas類別的屬性也繼承了,當然不會有任何反應了」,可是VCL不是不允許多重繼承嗎?那我要如何讓TPanelCanvasHack能同時繼承TCanvas的屬性呢?請指導一下!!謝謝!
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-25 10:47:39 IP:61.218.xxx.xxx 未訂閱
閒來沒事翻翻 Delphi 的Source Code才發覺TPanel本身有Canvas的屬性,只是被限制成元件外部無法存取.
大家可以透過繼承TPanel元件產生一個新元件TPanelDraw    步驟一.
        PanelDraw.h
//---------------------------------------------------------------------------    #ifndef PanelDrawH
#define PanelDrawH
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include 
//---------------------------------------------------------------------------
class PACKAGE TPanelDraw : public TPanel
{
private:
protected:
public:
        __fastcall TPanelDraw(TComponent* Owner);
        __property Canvas;
 
__published:
};
//---------------------------------------------------------------------------
#endif    PanelDraw.cpp
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "PanelDraw.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//    static inline void ValidCtrCheck(TPanelDraw *)
{
        new TPanelDraw(NULL);
}
//---------------------------------------------------------------------------
__fastcall TPanelDraw::TPanelDraw(TComponent* Owner)
        : TPanel(Owner)
{
}
//---------------------------------------------------------------------------
namespace Paneldraw
{
        void __fastcall PACKAGE Register()
        {
                 TComponentClass classes[1] = {__classid(TPanelDraw)};
                 RegisterComponents("Standard", classes, 0);
        }
}
//---------------------------------------------------------------------------    步驟二.將以上程式存檔為PanelDraw.cpp與PanelDraw.h    步驟三.開啟一新的Package將剛剛寫的PanelDraw.cpp加入Package中
    步驟四.選擇Package|Option,在Description填入PanelDraw v0.01以方便以後
       在Install Packge中的辨識

    步驟五.將Package存檔為PanelEx.bpk(建議不要存成與PanelDraw同檔名,會不
       小心把元件程式內容覆蓋掉)
    步驟六,選擇上圖Package中的Install,安裝TPanelDraw元件
    步驟七.開啟一新Project,然後在Form上放入一個TPanelDraw與TButton
程式碼如下:
Unit1.cpp
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PanelDraw"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
 PanelDraw1->Canvas->TextOutA(50,50,"定點輸出文字");
}
//---------------------------------------------------------------------------
        之前誤導大家真是抱歉....
    < class="code">
/*開心的事情別隱藏在心裡,分享給別人知道會更快樂的*/
/*得到新知識別隱藏在心裡,分享給別人了解會更清楚的*/
發表人 - axsoft 於 2003/08/25 13:40:23
chencclen
一般會員


發表:3
回覆:3
積分:1
註冊:2004-09-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-01-25 14:42:31 IP:61.222.xxx.xxx 未訂閱
axsoft 大大您好: 如果己經在 button 上劃上了文字,而又不想讓所秀上去的文字消失(被refresh)的話,要如何做到呢? 謝謝!!!
系統時間:2024-11-29 4:05:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!