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

如何在動態新增的TForm上畫圖(無法擦掉的圖):附檔

答題得分者是:jow
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-12-10 17:01:14 IP:218.169.xxx.xxx 訂閱
各位大大:

小弟我又丟出難題了......

我寫了一個動態新增 TForm 的程式並且繪圖

但是這個圖案如果被其他視窗遮蔽到的時候就會被清除

有沒有什麼方法可以畫出不被消除的圖案呢??

因為我想在Form1上做一個功能就是可以把Image的影像拖曳出某個範圍的時候就新增一個Form存著

可是現在就是會被消除 這點苦惱著我...=..=


[code cpp]
TForm *NForm,*nForm;
NForm= new TForm(Application);
NForm->Show();

for(j=0;j {
for(i=0;i {
NForm->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
}
}

[/code]


順便分享動態連續新增TForm的方法


[code cpp]
TForm *nForm;
for(i=0;i<3;i )
{
nForm=(TForm *)(FindComponent("Formff" IntToStr(i)));
nForm= new TForm(Application);
nForm->Show();
}

[/code]


------
恩...
編輯記錄
istillloving 重新編輯於 2009-12-10 17:04:29, 註解 無‧
istillloving 重新編輯於 2009-12-13 16:21:45, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-12-10 22:16:02 IP:114.39.xxx.xxx 訂閱
把圖放在TImage...
------
FPGA驗證, FPGA開發平台, http://smims.com
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-12-10 22:24:26 IP:220.129.xxx.xxx 訂閱
您好:

我有試過呢 可是NEW出來的TImage不知道跑哪去呢

我把NEW出來的TImage全部塗成黑色 但是就是不知道他跑哪去了.....
------
恩...
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-12-10 22:28:21 IP:114.39.xxx.xxx 訂閱
有指定 parent嗎?
code?
------
FPGA驗證, FPGA開發平台, http://smims.com
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-12-10 23:14:11 IP:220.129.xxx.xxx 訂閱
您好:

一開始的想法就是不想再多出Image在Form1上

因為新增出來的Form 如何在上面多加Image 這我實在不知道呢...=..=

可不可以請您在詳細的介紹一下呢
------
恩...
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-12-11 02:07:30 IP:123.193.xxx.xxx 未訂閱
fMain: TfrmMain 主程式
fFunc: TfrmFunc 基礎類別
fFunc2: TfrmFuncA~TfrmFuncD 繼承自TfrmFunc
TfrmFuncA 與 TfrmFuncB 在 Form 上繪製不同圖形
TfrmFuncC 在 Form 上繪製背景圖後, 再於背景圖上繪圖
TfrmFuncD 以 TImage 載入圖形顯示

以下程式提供你參考...
http://delphi.ktop.com.tw/download.php?download=upload/4b2138bd3cd94_TestC056.zip

fMain.h
[code cpp]
//---------------------------------------------------------------------------
#ifndef fMainH
#define fMainH
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp><br />//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published: // IDE-managed Components
TButton *btnNewFormA;
TButton *btnNewFormB;
TButton *btnNewFormC;
TButton *btnNewFormD;
void __fastcall btnNewFormAClick(TObject *Sender);
void __fastcall btnNewFormBClick(TObject *Sender);
void __fastcall btnNewFormCClick(TObject *Sender);
void __fastcall btnNewFormDClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TfrmMain(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif
[/code]

fMain.cpp
[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "fMain.h"
#include "fFunc.h"
#include "fFunc2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner): TForm(Owner)
{
TRect r = Rect(0,0,Width,Height);
OffsetRect(&r, 10,Screen->Height-Height-40);
BoundsRect = r;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnNewFormAClick(TObject *Sender)
{
new TfrmFuncA(this);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnNewFormBClick(TObject *Sender)
{
new TfrmFuncB(this);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnNewFormCClick(TObject *Sender)
{
TfrmFuncC* f = new TfrmFuncC(this);
f->FileName = "BACK1.BMP";
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnNewFormDClick(TObject *Sender)
{
TfrmFuncD* f = new TfrmFuncD(this);
f->FileName = "BACK1.BMP";
}
//---------------------------------------------------------------------------
[/code]

fFunc.h
[code cpp]
//---------------------------------------------------------------------------
#ifndef fFuncH
#define fFuncH
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp><br />//---------------------------------------------------------------------------
class TfrmFunc : public TForm
{
__published: // IDE-managed Components
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall FormPaint(TObject *Sender);
void __fastcall FormResize(TObject *Sender);
private:
protected:
//For Test Purpose...
void __fastcall TestSetting_Pen(TColor Color, int Width);
void __fastcall TestSetting_Brush(TColor Color);
//For Test Purpose...
void __fastcall DrawBitmap(AnsiString FileName);
virtual void __fastcall Clear(void);
virtual void __fastcall DoPaint(void);
virtual void __fastcall DoResize(void);
public:
__fastcall TfrmFunc(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmFunc *frmFunc;
//---------------------------------------------------------------------------
#endif
[/code]

fFunc.cpp
[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "fFunc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmFunc *frmFunc;
//---------------------------------------------------------------------------
__fastcall TfrmFunc::TfrmFunc(TComponent* Owner): TForm(Owner)
{
Width = 300;
Height = 300;
this->Caption = this->ClassName();
this->Show();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::FormPaint(TObject *Sender)
{
DoPaint();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::FormResize(TObject *Sender)
{
DoResize();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::Clear(void)
{
TRect r = this->ClientRect;
TestSetting_Brush(this->Color);
Canvas->FillRect(r);
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::TestSetting_Pen(TColor Color, int Width)
{
Canvas->Pen->Color = Color;
Canvas->Pen->Width = Width;
Canvas->Pen->Style = psSolid;
Canvas->Pen->Mode = pmCopy;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::TestSetting_Brush(TColor Color)
{
Canvas->Brush->Color = Color;
Canvas->Brush->Style = bsSolid;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::DrawBitmap(AnsiString FileName)
{
if(FileExists(FileName)){
Graphics::TBitmap *b = new Graphics::TBitmap();
TRect r = this->ClientRect;
try{
b->LoadFromFile(FileName);
Canvas->StretchDraw(r,b);
}
__finally{
delete b;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::DoPaint(void)
{
//Paint Form Here...
}
//---------------------------------------------------------------------------
void __fastcall TfrmFunc::DoResize(void)
{
Invalidate();
}
//---------------------------------------------------------------------------
[/code]

fFunc2.h
[code cpp]
//---------------------------------------------------------------------------
#ifndef fFunc2H
#define fFunc2H
//---------------------------------------------------------------------------
#include
//---------------------------------------------------------------------------
class TfrmFuncA : public TfrmFunc
{
protected:
void __fastcall DoPaint(void);
public:
__fastcall TfrmFuncA(TComponent* Owner);
};
//---------------------------------------------------------------------------
class TfrmFuncB : public TfrmFunc
{
protected:
void __fastcall DoPaint(void);
public:
__fastcall TfrmFuncB(TComponent* Owner);
};
//---------------------------------------------------------------------------
class TfrmFuncC : public TfrmFunc
{
private:
AnsiString FFileName;
void __fastcall SetFileName(AnsiString Value);
protected:
void __fastcall DoPaint(void);
public:
__fastcall TfrmFuncC(TComponent* Owner);
__property AnsiString FileName={read=FFileName,write=SetFileName};
};
//---------------------------------------------------------------------------
class TfrmFuncD : public TfrmFunc
{
private:
AnsiString FFileName;
TImage *FImage;
void __fastcall SetFileName(AnsiString Value);
protected:
void __fastcall DoPaint(void);
void __fastcall DoResize(void);
public:
__fastcall TfrmFuncD(TComponent* Owner);
__property AnsiString FileName={read=FFileName,write=SetFileName};
__property TImage* Image={read=FImage};
};
//---------------------------------------------------------------------------
#endif
[/code]

fFunc2.cpp
[code cpp]
//---------------------------------------------------------------------------
#pragma hdrstop
#include "fFunc.h"
#include "fFunc2.h"
//---------------------------------------------------------------------------
__fastcall TfrmFuncA::TfrmFuncA(TComponent* Owner): TfrmFunc(Owner)
{
TRect r = Rect(0,0,Width,Height);
OffsetRect(&r, 10, 10);
BoundsRect = r;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFuncA::DoPaint(void)
{
Clear();
TestSetting_Pen(clRed,1);
TestSetting_Brush(this->Color);
TRect r = this->ClientRect;
while(true){
Canvas->Rectangle(r);
InflateRect(&r,-5,-5);
if(r.Right-r.Left<1||r.Bottom-r.Top<1)break;
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TfrmFuncB::TfrmFuncB(TComponent* Owner): TfrmFunc(Owner)
{
TRect r = Rect(0,0,Width,Height);
OffsetRect(&r,Width 10, 10);
BoundsRect = r;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFuncB::DoPaint(void)
{
Clear();
TestSetting_Pen(clBlue,2);
TestSetting_Brush(this->Color);
TRect r = this->ClientRect;
while(true){
Canvas->Ellipse(r);
InflateRect(&r,-6,-6);
if(r.Right-r.Left<3||r.Bottom-r.Top<3)break;
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TfrmFuncC::TfrmFuncC(TComponent* Owner): TfrmFunc(Owner)
{
TRect r = Rect(0,0,Width,Height);
OffsetRect(&r, 10,Height 10);
BoundsRect = r;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFuncC::SetFileName(AnsiString Value)
{
if(Value!=FFileName){
FFileName = Value;
Invalidate();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFuncC::DoPaint(void)
{
Clear();
if(FileExists(FFileName))DrawBitmap(FFileName);
TestSetting_Pen(clBlack,1);
TestSetting_Brush(clBlack);
TRect r = this->ClientRect;
while(true){
Canvas->FrameRect(r);
InflateRect(&r,-5,-5);
if(r.Right-r.Left<1||r.Bottom-r.Top<1)break;
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TfrmFuncD::TfrmFuncD(TComponent* Owner): TfrmFunc(Owner)
{
TRect r = Rect(0,0,Width,Height);
OffsetRect(&r,Width 10,Height 10);
BoundsRect = r;
FImage = new TImage(this);
FImage->Parent = this;
FImage->Stretch = true;
FImage->BoundsRect= this->ClientRect;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFuncD::SetFileName(AnsiString Value)
{
if(Value!=FFileName){
FFileName = Value;
if(FileExists(FFileName))FImage->Picture->LoadFromFile(FFileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFuncD::DoPaint(void)
{
//Disable Form Painting...
}
//---------------------------------------------------------------------------
void __fastcall TfrmFuncD::DoResize(void)
{
if(FImage)FImage->BoundsRect= this->ClientRect;
}
//---------------------------------------------------------------------------
#pragma package(smart_init)
[/code]


謹供參考......





編輯記錄
jow 重新編輯於 2009-12-11 02:11:48, 註解 無‧
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-12-11 09:35:15 IP:203.79.xxx.xxx 訂閱
把你畫圖的code 擺在 Form的 onPaint 中去畫,如此只要重畫Form的時候,應該就會再把你要畫的圖畫一次了。



===================引 用 istillloving 文 章===================
各位大大:

小弟我又丟出難題了......

我寫了一個動態新增 TForm 的程式並且繪圖

但是這個圖案如果被其他視窗遮蔽到的時候就會被清除

有沒有什麼方法可以畫出不被消除的圖案呢??

因為我想在Form1上做一個功能就是可以把Image的影像拖曳出某個範圍的時候就新增一個Form存著

可是現在就是會被消除? 這點苦惱著我...=..=


[code cpp]
TForm *NForm,*nForm;
?NForm= new TForm(Application);
?NForm->Show();

?for(j=0;j?{
? for(i=0;i? {
?? NForm->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
? }
?}

[/code]


順便分享動態連續新增TForm的方法


[code cpp]
? TForm *nForm;
? for(i=0;i<3;i )
? {
? nForm=(TForm *)(FindComponent("Formff" IntToStr(i)));
? nForm= new TForm(Application);
? nForm->Show();
? }

[/code]


istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-12-11 10:00:54 IP:218.169.xxx.xxx 訂閱
抱歉抱歉

我可能沒有把我的問題說清楚 左邊Image1是原始影像 右邊Image2是運算後的影像

因為我的版面很滿 而且有很多演算法需要比較結果 所以我才想要新增一個Form 然後一個一個拉出來比較

我想到的方法是 利用Image2 的 On_Mouse_Up .On_Mouse_Down 和 On_Mouse_Move 這三個事件配合

On_Mouse_Down 改變一個參數 On_Mouse_Up 把參數改回來

而 On_Mouse_Move 負責偵測如果滑鼠移至某個範圍了 而且參數還沒有被改回來

這時候我就新增Form把圖片存起來 然後繼續使用別的演算法做比較

所以 NewForm 和 秀圖 照我這個想法的話應該都是要寫在 On_Mouse_Move 裡面

抱歉了麻煩各位了 今天再找找看有沒有其他方法



------
恩...
編輯記錄
istillloving 重新編輯於 2009-12-11 10:01:50, 註解 無‧
istillloving 重新編輯於 2009-12-11 10:10:04, 註解 無‧
istillloving 重新編輯於 2009-12-11 10:11:38, 註解 無‧
istillloving 重新編輯於 2009-12-11 10:11:59, 註解 無‧
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-12-11 14:27:39 IP:140.127.xxx.xxx 訂閱
您好:

看了您的程式是把 DoPaint(); 放在 On_Paint 事件內

所以讓我再好好想想放在 OnPaint 事件內怎麼做出我要的功能

而且您的Form好像不是動態新增的 所以可以事先寫好

但是還是非常謝謝您
------
恩...
編輯記錄
istillloving 重新編輯於 2009-12-11 14:29:45, 註解 無‧
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-12-11 14:49:01 IP:140.127.xxx.xxx 訂閱
各位:

我做了以下的嘗試

首先我宣告了一個全域的


[code cpp]
TForm *NForm;
[/code]

並且對NForm下定義 裡面包含Form_Paint事件

[code cpp]
class NForm : public TForm
{
__published:
void __fastcall FormPaint(TObject *Sender);
};

[/code]

而 Form_Paint 寫在Unit1.cpp內容如下

[code cpp]
void __fastcall NForm::FormPaint(TObject *Sender)
{

for(j=0;j {
for(i=0;i {
NForm->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
Form1->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
}
}

}

[/code]



然後我在Form1建立一個Button 內容是


[code cpp]
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{


NForm= new TForm(Application);
NForm->Show();



for(j=0;j {
for(i=0;i {
NForm->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
Form1->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
}
}

}

[/code]


這樣輸出的結果是可以秀出圖來
但是還是一樣會被抹去
我這樣觀念上有錯嗎 ??
有的話請麻煩指教一下


但是如果把秀圖放在Form1上 的確是不會被抹掉


[code cpp]
void __fastcall TForm1::FormPaint(TObject *Sender)
{
for(j=0;j {
for(i=0;i {
NForm->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
Form1->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
}
}
}

[/code]



------
恩...
編輯記錄
istillloving 重新編輯於 2009-12-11 14:53:46, 註解 無‧
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-12-11 14:59:15 IP:203.79.xxx.xxx 訂閱
你的問題其實很單純...解法也很多種....

1.你的 Form 是自己動態建出來的。
[code cpp]
nForm= new TForm(Application);
nForm->Show
[/code]

你只要預先建立一個有 Timage 的Form,比如叫 TMyForm
然後去動態建立時就是建立你的 TMyfForm,如此就出來的 Form就會有 Image 的元件可以畫圖。
[code cpp]
nForm= new TMyForm(Application);
nForm->Show
[/code]


2.一樣去建立 Base Form,也建立一個 Image,然後把 Image.parent指向 Form,這樣一樣可以在 Image上面畫你想要的東西出來
[code cpp]
nForm= new TForm(Application);
nImg=new TImage(Application);
nImg->Parent = nForm;
nForm->Show
[/code]

這樣好也可以
[code cpp]
nForm= new TForm(Application);
nImg=new TImage(nForm);
nForm->Show
[/code]
3. 把你要畫的東西,不是直接在 Form 的 Canvas 上面畫,而是把它存到一個陣列中,然後在 Form 的 on_Paint 上去根據陣列的資料重新畫出你要的東西。

4. 把你要畫的東西,不是直接在 Form 的 Canvas 上面畫,而是把它畫到一個看不見的Image中,然後在 Form 的 on_Paint 上去根據Image的Canvas,快速複製到Form的Canvas上。

作法太多,族繁不及備載.....

以上供參考,謝謝





===================引 用 istillloving 文 章===================
您好:

看了您的程式是把 DoPaint(); 放在 On_Paint 事件內

所以讓我再好好想想放在 OnPaint 事件內怎麼做出我要的功能

而且您的Form好像不是動態新增的 所以可以事先寫好

但是還是非常謝謝您

istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-12-11 15:02:53 IP:140.127.xxx.xxx 訂閱
您好:

你這樣講好像很有道理

我再試看看

快被高雄的炎熱給燃燒光我的思考能力了....
------
恩...
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-12-11 18:14:56 IP:123.193.xxx.xxx 未訂閱
呵, 你沒有測試我的程式碼??? 

以下的需求不是已經都實作出來了???

你可以在TfrmFuncD中,宣告一個LoadImageFromStream()的 Method
將你的Image物件傳入, 叫用FImage->Picture->LoadFromStream()
應該就可以圖片載入TfrmFuncD的 FImage中了

另外宣告一個SaveImageToFile()的 Method
叫用 FImage->Picture->SaveToFile() 將 Image儲存到檔案

程式中的 TfrmFuncA ~ TfrmFuncD 全部都是動態建立出來的
並且各自可以產生 N 個... ^_^

個人做法, 謹供參考...



===================引 用 carstyc 文 章===================
你的問題其實很單純...解法也很多種....

1.你的 Form 是自己動態建出來的。
[code cpp]
nForm= new TForm(Application);
nForm->Show
[/code]

你只要預先建立一個有 Timage 的Form,比如叫 TMyForm
然後去動態建立時就是建立你的 TMyfForm,如此就出來的 Form就會有 Image 的元件可以畫圖。
[code cpp]
nForm= new TMyForm(Application);
nForm->Show
[/code]


2.一樣去建立 Base Form,也建立一個 Image,然後把 Image.parent指向 Form,這樣一樣可以在 Image上面畫你想要的東西出來
[code cpp]
nForm= new TForm(Application);
nImg=new TImage(Application);
nImg->Parent = nForm;
nForm->Show
[/code]

這樣好也可以
[code cpp]
nForm= new TForm(Application);
nImg=new TImage(nForm);
nForm->Show
[/code]
3. 把你要畫的東西,不是直接在 Form 的 Canvas 上面畫,而是把它存到一個陣列中,然後在 Form 的 on_Paint 上去根據陣列的資料重新畫出你要的東西。

4. 把你要畫的東西,不是直接在 Form 的 Canvas 上面畫,而是把它畫到一個看不見的Image中,然後在 Form 的 on_Paint 上去根據Image的Canvas,快速複製到Form的Canvas上。

作法太多,族繁不及備載.....

以上供參考,謝謝





===================引 用 istillloving 文 章===================
您好:

看了您的程式是把 DoPaint(); 放在 On_Paint 事件內

所以讓我再好好想想放在 OnPaint 事件內怎麼做出我要的功能

而且您的Form好像不是動態新增的 所以可以事先寫好

但是還是非常謝謝您

編輯記錄
jow 重新編輯於 2009-12-11 18:22:08, 註解 無‧
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-12-11 20:29:35 IP:140.127.xxx.xxx 訂閱
您好:

小弟有測試過了

裡面這提到 看了一下 Do_Paint 我知道是測試用的也大概了解 On_Paint 的功能

[code c#]
void __fastcall TfrmFunc::FormPaint(TObject *Sender)
{
DoPaint();
}

[/code]

可是當我自己把我的改成

[code cpp]
void __fastcall NForm::FormPaint(TObject *Sender)
{
for(j=0;j {
for(i=0;i {
NForm->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
Form1->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
}
}
}

[/code]

我發現我的程式並不會畫出任何東西呢

而我參考了您的程式TfrmFunc. 有點像我的程式中的Form1.

或者是使用toolbar所新增的Form

因為我最初的想法就是動態的產生

基於動態所以沒辦法知道有幾個

所以也就沒有辦法事先寫在 .cpp 和 .h

就如同我上述的我自己把NForm的Paint寫在Unit1.h內 結果沒作用


而這直接硬塞一個NewFoem進去的話......


[code cpp]
[Linker Error] Unresolved external 'TfrmFuncB::' referenced from H:\綜合\白平衡 影像修補\UNIT1.OBJ
[Linker Error] Unresolved external '__fastcall TfrmFuncB::TfrmFuncB(Classes::TComponent *)' referenced from H:\綜合\白平衡 影像修補\UNIT1.OBJ
[/code]


這到底是錯在哪....我現在是當局者迷....=..=

麻煩請指引一盞明燈吧....

非常感謝

------
恩...
編輯記錄
istillloving 重新編輯於 2009-12-11 20:44:04, 註解 無‧
istillloving 重新編輯於 2009-12-11 20:59:55, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-12-12 10:00:21 IP:123.193.xxx.xxx 未訂閱
在自定類別NForm中引用特定物件變數NForm及Form1
當物件變數NForm及Form1 沒有指向一個以產生出來的物件
則應用程式會如何反應???


void __fastcall NForm->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
Form1->Canvas->Pixels[i][j]=TColor(RGB(CR[i w*j],CG[i w*j],CB[i w*j]));
}
}
}
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-12-12 11:10:03 IP:61.223.xxx.xxx 訂閱
我寫太快了...漏寫...

我有在Form1上設一個Button用來new出NForm的

所以我的順序是先出現Form1然後點Button

接著就會new NForm show NForm 這情況下還是會被抹去

------
恩...
編輯記錄
istillloving 重新編輯於 2009-12-12 11:11:29, 註解 無‧
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#17 引用回覆 回覆 發表時間:2009-12-13 16:17:40 IP:140.127.xxx.xxx 訂閱
JOW大大:

非常感謝您的意見

後來我也是用手動先新增一個Form的class 然後再動態的複製出來

附上檔案

delphi.ktop.com.tw/download.php

------
恩...
編輯記錄
istillloving 重新編輯於 2009-12-13 16:18:25, 註解 無‧
系統時間:2024-04-19 17:25:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!