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

動態建立及觸發事件的問題

答題得分者是:RedSnow
existent
一般會員


發表:1
回覆:1
積分:0
註冊:2005-08-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-18 03:14:14 IP:220.138.xxx.xxx 未訂閱
我想要做一個Logo視窗,但Logo視窗用動態建立的方式, Logo視窗裡面有一個Panel和一個Image元件, 然後秀出視窗後,用滑鼠點一下圖就會關閉Logo視窗。 請問要如何做到「用滑鼠點一下圖就會關閉Logo視窗」?    我去查了很多關於動態產生物件及觸發事件的文章, 可能是因為剛接觸BCB,對基本概念還不太熟悉, 所以還是無法解決這個問題。    以下是我的程式碼,寫的有點怪怪的,還請見諒。    
    // WinMain.h
//---------------------------------------------------------------------------    #ifndef MainWinH
#define MainWinH
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include 
#include 
#include 
//---------------------------------------------------------------------------
class TMain : public TForm
{
__published:        // IDE-managed Components
    TStatusBar *StatusBar1;
    TMainMenu *MainMenu1;
    TMenuItem *Menu_System;
    TMenuItem *Menu_Config;
    TMenuItem *Menu_Exit;
    TMenuItem *Menu_Help;
    TMenuItem *Menu_Readme;
    TMenuItem *Menu_Copyright;
    TImage *Image1;
    void __fastcall Menu_ExitClick(TObject *Sender);
    void __fastcall Menu_CopyrightClick(TObject *Sender);
private:        // User declarations
public:                // User declarations
    __fastcall TMain(TComponent* Owner);
};    //---------------------------------------------------------------------------    //---------------------------------------------------------------------------
extern PACKAGE TMain *Main;
//---------------------------------------------------------------------------
#endif    // WinMain.cpp    //---------------------------------------------------------------------------    #include 
#include 
#pragma hdrstop    #include "MainWin.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMain *Main;
TForm *LogoWindow;    //---------------------------------------------------------------------------
__fastcall TMain::TMain(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TMain::Menu_ExitClick(TObject *Sender)
{
    Main->Free();
    exit(0);
}
//---------------------------------------------------------------------------
void __fastcall TMain::Menu_CopyrightClick(TObject *Sender)
{
    LogoWindow=new TForm(Main);
    TPanel *Panel=new TPanel(LogoWindow);
    TImage *Logo=new TImage(LogoWindow);        //產生Logo視窗
    try{
        Panel->Parent=LogoWindow;
        Logo->Parent=LogoWindow;
        Logo->AutoSize=true;
        Logo->Picture->LoadFromFile(".\\Dog01.jpg");            //Logo視窗設定
        LogoWindow->BorderStyle=bsNone;
        LogoWindow->FormStyle=fsStayOnTop;
        LogoWindow->AutoSize=true;            Panel->Width=Logo->Width 4;
        Panel->Height=Logo->Height 4;
        Panel->BevelWidth=2;            //將Logo調整位置
        Logo->Parent=Panel;
        Logo->Top=2;
        Logo->Left=2;
        
        //將Logo視窗置於螢幕中間
        LogoWindow->Top=Screen->Height/2-(Panel->Height/2);
        LogoWindow->Left=Screen->Width/2-(Panel->Width/2);
        LogoWindow->Show();
    }
    catch(Exception &exception)
    {
        delete LogoWindow;
        Application->ShowException(&exception);
    }
    catch(...)
    {
        delete LogoWindow;
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
}
發表人 - existent 於 2005/09/18 14:45:30
RedSnow
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-18 11:46:54 IP:59.115.xxx.xxx 未訂閱
existent 您好:    請參考下列連結內的說明重新張貼您的程式碼,以便他人瀏覽時能夠查看到完整的內容: 【公告】程式碼張貼規則與方法 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=57538 【公告】重申版規與作業問題說明 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991 7 天天敲鍵盤 v 時時按滑鼠 8
RedSnow
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-18 14:53:04 IP:59.115.xxx.xxx 未訂閱
existent 您好:    我參照您寫的程式另寫一個範例如下,試試看吧:
// 於 .h 檔中
private:
    void __fastcall LogoClick(TObject *Sender);  // 設定一個自定的 OnClick 事件處理程序
        
// 於 .cpp 檔中
void __fastcall TMain::LogoClick(TObject *Sender)
{
    TForm *form = (TForm*)((TImage*)Sender)->Owner;
    form->Close();
}    void __fastcall TMain::Menu_CopyrightClick(TObject *Sender)
{
    TForm *LogoWindow = new TForm(Main);
    TPanel *Panel = new TPanel(LogoWindow);
    TImage *Logo  = new TImage(LogoWindow);        //產生Logo視窗
    Panel->Parent  = LogoWindow;  // 直接指定上層父屬物件為 LogoWindow
    Logo->Parent   = Panel;  // 直接指定上層父屬物件為 panel
    Logo->AutoSize = true;
    Logo->Picture->LoadFromFile("c:\\test.bmp");
    Logo->OnClick = LogoClick;  // 設定 Logo 的 OnClick 指向自定的處理程序        //Logo視窗設定
    LogoWindow->BorderStyle = bsNone;
    LogoWindow->FormStyle = fsStayOnTop;
    LogoWindow->AutoSize = true;        Panel->Width  = Logo->Width    4;
    Panel->Height = Logo->Height   4;
    Panel->BevelWidth = 2;        //將Logo調整位置
    Logo->Top  = 2;
    Logo->Left = 2;        //將Logo視窗置於螢幕中間
    LogoWindow->Top  = (Screen->Height / 2) - (Panel->Height / 2);
    LogoWindow->Left = (Screen->Width  / 2) - (Panel->Width  / 2);
    LogoWindow->ShowModal();  // 使用 ShowModal() 來代替原先使用的 ShowModal()        // 以下依從屬關係逐一刪除動態產生的物件
    delete Logo;
    delete Panel;
    delete LogoWindow;
}
7 天天敲鍵盤 v 時時按滑鼠 8
existent
一般會員


發表:1
回覆:1
積分:0
註冊:2005-08-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-18 15:47:42 IP:220.138.xxx.xxx 未訂閱
謝謝您,已經能和預期的結果完全相同, 真的很感謝您 
bome2002
一般會員


發表:11
回覆:9
積分:4
註冊:2005-11-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-05 11:09:09 IP:61.63.xxx.xxx 訂閱

===================引 用 文 章===================
existent 您好: 我參照您寫的程式另寫一個範例如下,試試看吧:
// 於 .h 檔中
private:
    void __fastcall LogoClick(TObject *Sender);  // 設定一個自定的 OnClick 事件處理程序
        
// 於 .cpp 檔中
void __fastcall TMain::LogoClick(TObject *Sender)
{
    TForm *form = (TForm*)((TImage*)Sender)->Owner;
    form->Close();
}    void __fastcall TMain::Menu_CopyrightClick(TObject *Sender)
{
    TForm *LogoWindow = new TForm(Main);
    TPanel *Panel = new TPanel(LogoWindow);
    TImage *Logo  = new TImage(LogoWindow);        //產生Logo視窗
    Panel->Parent  = LogoWindow;  // 直接指定上層父屬物件為 LogoWindow
    Logo->Parent   = Panel;  // 直接指定上層父屬物件為 panel
    Logo->AutoSize = true;
    Logo->Picture->LoadFromFile("c:\\test.bmp");
    Logo->OnClick = LogoClick;  // 設定 Logo 的 OnClick 指向自定的處理程序        //Logo視窗設定
    LogoWindow->BorderStyle = bsNone;
    LogoWindow->FormStyle = fsStayOnTop;
    LogoWindow->AutoSize = true;        Panel->Width  = Logo->Width    4;
    Panel->Height = Logo->Height   4;
    Panel->BevelWidth = 2;        //將Logo調整位置
    Logo->Top  = 2;
    Logo->Left = 2;        //將Logo視窗置於螢幕中間
    LogoWindow->Top  = (Screen->Height / 2) - (Panel->Height / 2);
    LogoWindow->Left = (Screen->Width  / 2) - (Panel->Width  / 2);
    LogoWindow->ShowModal();  // 使用 ShowModal() 來代替原先使用的 ShowModal()        // 以下依從屬關係逐一刪除動態產生的物件
    delete Logo;
    delete Panel;
    delete LogoWindow;
}

//----------------------------------------------------------------------------
大大~~ 我也有此需求~~
不過我是在自定的處理程序中
void __fastcall TMain::LogoClick(TObject *Sender)
{
    TForm *form = (TForm*)((TImage*)Sender)->Owner;
}
之中~需要得到Logo圖片的Hint ,Name..等等相關資訊以利後續動作
請教大大 我該如何取得動態產生的Logo相關資訊呢?(在產生Logo時,會設定Logo的Hint,Name..等等資料)
等User 去Click圖片時,程式才能判斷User點的是哪一個Logo,並ShowMessage告知所點的Logo圖示資料為何?
煩請大大幫我解答囉!  謝謝啦 ~~ 感激不盡 ~~
系統時間:2024-05-04 11:33:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!