danielj
初階會員
發表:65 回覆:135 積分:40 註冊:2003-06-11
發送簡訊給我
|
小弟想在Panel上的座標(x,y)上寫字,請問該怎麼寫呢?謝謝!
|
axsoft
版主
發表:681 回覆:1056 積分:969 註冊:2002-03-13
發送簡訊給我
|
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
發送簡訊給我
|
|
hwtaiya
一般會員
發表:3 回覆:7 積分:2 註冊:2003-07-19
發送簡訊給我
|
請教一下各位專家高手,像
class TPanelCanvasHack : public TPanel
{
public:
__property Canvas;
}; 這樣子類似的增加property是否適用於任意的元件,還是說有什麼限制呢? 先謝謝大家啦! **** 我是新手,如果問的會回答的太可笑,請多包涵 ****
------ **** 我是新手,如果問的會回答的太可笑,請多包涵 ****
|
ddy
站務副站長
發表:262 回覆:2105 積分:1169 註冊:2002-07-13
發送簡訊給我
|
hwtaiya 煩請另開新主題發問!!
|
deal
一般會員
發表:6 回覆:33 積分:22 註冊:2003-04-07
發送簡訊給我
|
引言:
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
發送簡訊給我
|
引言:
請問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
發送簡訊給我
|
引言:
deal您好:
我不太清楚你怎麼寫的,如果您只單單寫個TPanelCanvasHack Class,
新增了一個Canvas的屬性,但是沒有把TCanvas類別的屬性也繼承了,
當然不會有任何反應了.
>>< face="Verdana, Arial, Helvetica"> 謝謝axsoft的回應,你的程式我可以了解,但你提到「只單單寫個TPanelCanvasHack Class,新增了一個Canvas的屬性,但是沒有把TCanvas類別的屬性也繼承了,當然不會有任何反應了」,可是VCL不是不允許多重繼承嗎?那我要如何讓TPanelCanvasHack能同時繼承TCanvas的屬性呢?請指導一下!!謝謝!
|
axsoft
版主
發表:681 回覆:1056 積分:969 註冊:2002-03-13
發送簡訊給我
|
閒來沒事翻翻 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
發送簡訊給我
|
axsoft 大大您好:
如果己經在 button 上劃上了文字,而又不想讓所秀上去的文字消失(被refresh)的話,要如何做到呢? 謝謝!!!
|