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

在 MDI 主From有背景圖的問題 for BCB

答題得分者是:RaynorPao
Jeffrey_Chang
一般會員


發表:5
回覆:10
積分:3
註冊:2003-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-25 20:45:26 IP:210.202.xxx.xxx 未訂閱
我參考了Demo的程式並是圖改成BCB的形式, 但是compile仍出錯, 所以想請高手幫幫忙, 謝謝. //------------------------------------------------------------------- void __fastcall TMainForm::FormCreate(TObject *Sender) { FClientInstance = MakeObjectInstance(ClientWndProc); FPrevClientProc = Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC)); SetWindowLong(ClientHandle, GWL_WNDPROC, (Word)FClientInstance); } //------------------------------------------------------------------- void __fastcall TMainForm::ClientWndProc(TMessage &Message) { HDC MyDC; Word Ro, Co; if(Message.Msg == WM_ERASEBKGND) { MyDC=((TWMEraseBkgnd&)Message).DC; SetStretchBltMode (MyDC,COLORONCOLOR); StretchBlt(MyDC, 0, 0, MainForm->ClientWidth,MainForm->ClientHeight, MainImage->Picture->Bitmap->Canvas->Handle, 0, 0, MainImage->Picture->Width, MainImage->Picture->Height, SRCCOPY); Message.Result=1; } else Message.Result=CallWindowProc(FPrevClientProc, ClientHandle, Message.Msg, Message.WParam, Message.LParam); } //------------------------------------------------------------------- 那個 Error 是 [C Error] WsuMain.cpp(78): E2034 Cannot convert 'void *' to 'int (__stdcall *)()' [C Error] WsuMain.cpp(78): E2342 Type mismatch in parameter 'lpPrevWndFunc' (wanted 'int (__stdcall *)()', got 'void *') 我曾試圖 Remark error 的程式, 但卻無法秀出圖形且背景都壞了.
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-25 23:01:02 IP:61.221.xxx.xxx 未訂閱
引言: 我參考了Demo的程式並是圖改成BCB的形式, 但是compile仍出錯, 所以想請高手幫幫忙, 謝謝. //------------------------------------------------------------------- void __fastcall TMainForm::FormCreate(TObject *Sender) { FClientInstance = MakeObjectInstance(ClientWndProc); FPrevClientProc = Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC)); SetWindowLong(ClientHandle, GWL_WNDPROC, (Word)FClientInstance); } //------------------------------------------------------------------- void __fastcall TMainForm::ClientWndProc(TMessage &Message) { HDC MyDC; Word Ro, Co; if(Message.Msg == WM_ERASEBKGND) { MyDC=((TWMEraseBkgnd&)Message).DC; SetStretchBltMode (MyDC,COLORONCOLOR); StretchBlt(MyDC, 0, 0, MainForm->ClientWidth,MainForm->ClientHeight, MainImage->Picture->Bitmap->Canvas->Handle, 0, 0, MainImage->Picture->Width, MainImage->Picture->Height, SRCCOPY); Message.Result=1; } else Message.Result=CallWindowProc(FPrevClientProc, ClientHandle, Message.Msg, Message.WParam, Message.LParam); } //------------------------------------------------------------------- 那個 Error 是 [C Error] WsuMain.cpp(78): E2034 Cannot convert 'void *' to 'int (__stdcall *)()' [C Error] WsuMain.cpp(78): E2342 Type mismatch in parameter 'lpPrevWndFunc' (wanted 'int (__stdcall *)()', got 'void *') 我曾試圖 Remark error 的程式, 但卻無法秀出圖形且背景都壞了.
Jeffrey_Chang 你好: 請參考以下連結文章,先解決 compile 的問題吧
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
Jeffrey_Chang
一般會員


發表:5
回覆:10
積分:3
註冊:2003-06-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-26 15:20:49 IP:210.202.xxx.xxx 未訂閱
謝謝你的建議, 我更改程式並秀出背景來了, 可是當我開子視窗時, 系統卻秀出Error Message 並進入 Debug mode. 是否可以請你幫我再看看哪裡出錯了, 謝謝. WNDPROC OldForm1WndProc; LRESULT CALLBACK My_WndProc(HWND ,UINT ,WPARAM ,LPARAM ); //------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TMainForm *MainForm; //------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { OldForm1WndProc=(WNDPROC)GetWindowLong(MainForm->Handle, GWL_WNDPROC); SetWindowLong(ClientHandle, GWL_WNDPROC, (LONG)My_WndProc); } //------------------------------------------------------------------- LRESULT CALLBACK My_WndProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) { HDC MyDC; if(Msg == WM_ERASEBKGND) { MyDC=(HDC)wParam; SetStretchBltMode (MyDC,COLORONCOLOR); StretchBlt(MyDC, 0, 0, MainForm->ClientWidth,MainForm->ClientHeight, MainForm->MainImage->Picture->Bitmap->Canvas->Handle, 0, 0, MainForm->MainImage->Picture->Width, MainForm->MainImage->Picture->Height, SRCCOPY); return 1; } else return CallWindowProc((FARPROC)OldForm1WndProc, hwnd, Msg, wParam, lParam); } Error message: Project test.exe raised exception class EWin32Error witch message 'Win32 Error. Code:2,系統找不到指定的檔案'.process stopped. use Step or Run to continue.
Jeffrey_Chang
一般會員


發表:5
回覆:10
積分:3
註冊:2003-06-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-26 16:30:08 IP:210.202.xxx.xxx 未訂閱
哈哈哈 破了,已經可以正常
Jeffrey_Chang
一般會員


發表:5
回覆:10
積分:3
註冊:2003-06-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-27 14:19:23 IP:210.202.xxx.xxx 未訂閱
雖然成功了, 可是檔案 Size 也加大了不少, 原因是使用了 BitMap 的圖檔所致, 所以經過改良使用 Jeg 圖檔就減少了許多, 畢竟有壓縮有差. 所以程式需加給行以將 Jeg 轉換成 Bmp. TJPEGImage *jmap = new TJPEGImage; jmap->Assign(MainImage->Picture); MainImage->Picture->Bitmap->Assign(jmap); delete jmap; 不知其他高手有何另外的寫法, 謝謝.
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-27 14:32:27 IP:203.73.xxx.xxx 未訂閱
引言: 雖然成功了, 可是檔案 Size 也加大了不少, 原因是使用了 BitMap 的圖檔所致, 所以經過改良使用 Jeg 圖檔就減少了許多, 畢竟有壓縮有差. 所以程式需加給行以將 Jeg 轉換成 Bmp. TJPEGImage *jmap = new TJPEGImage; jmap->Assign(MainImage->Picture); MainImage->Picture->Bitmap->Assign(jmap); delete jmap; 不知其他高手有何另外的寫法, 謝謝.
Jeffrey_Chang 你好:
(1)請問你說的 Size 是指 compile 之後的 EXE Size 嗎??
(2)請問你是不是在 design time 的時候就把你的圖檔載入到 TImage 裡面??
(3)試試看把你的圖檔使用 256 色 bitmap 或者是 jpeg,不要在 design time
   的時候把圖檔案載入 TImage,而改成先把圖檔放在 *.res 或 *.rc 裡面,
   在 runtime 的時候再動態載入圖檔
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
Jeffrey_Chang
一般會員


發表:5
回覆:10
積分:3
註冊:2003-06-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-27 15:40:23 IP:210.202.xxx.xxx 未訂閱
沒錯, 我是在 Design time 就放了圖檔至 TImage 了. 因為我只想要一個可執行檔就可以了. 你說將圖檔放置.res 或.rc 中, 可是這最後不是也被包在執行檔中嗎, 圖檔大, 執行檔也會跟著變大, 除非....放置.res 或.rc 中的檔案會被壓縮. 我沒試過, 我並不知道.
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-27 16:49:27 IP:203.73.xxx.xxx 未訂閱
引言: 沒錯, 我是在 Design time 就放了圖檔至 TImage 了. 因為我只想要一個可執行檔就可以了. 你說將圖檔放置.res 或.rc 中, 可是這最後不是也被包在執行檔中嗎, 圖檔大, 執行檔也會跟著變大, 除非....放置.res 或.rc 中的檔案會被壓縮. 我沒試過, 我並不知道.
Jeffrey_Chang 你好:
(1)是的~~你說的應該沒錯,直接在 design time 把圖檔放入 TImage,會增加
   link time 的時間;如果把圖檔放在 *.rc 裡面(*.res 我沒有試),則會增
   加 compile time 的時間(比第一種 link time 的時間多很多),而且,對
   於 size 應該是沒有什麼幫助
( >
    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
Jeffrey_Chang
一般會員


發表:5
回覆:10
積分:3
註冊:2003-06-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-27 17:08:56 IP:210.202.xxx.xxx 未訂閱
我想除非用外部圖形, 否則只要加在執行檔內, 那Size 一定會變大, 否則就是要強的壓縮技術才行. 那我就要結案了, 否則就離題了,謝謝你 Raynor Pao.
bugmans
高階會員


發表:95
回覆:322
積分:188
註冊:2003-04-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-03-24 08:10:40 IP:125.225.xxx.xxx 未訂閱
系統時間:2024-05-03 14:40:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!