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

關於新稱圖片(Image)的程式

尚未結案
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-14 11:45:01 IP:218.168.xxx.xxx 未訂閱
小弟寫了一個小程式.. 是有關於新稱電腦台數.. 簡單來說...就是當按下Button後.. 他會出現InputBox.. 這時隨便輸入名稱(ex: 01、02...等) 則就會出現AddPC.bmp以及該台的編號.. 請問該怎麼寫呢? 若還是不瞭解小弟再說啥的話.. 那小弟則上傳了demo程式... 下載看看囉!^^ http://delphi.ktop.com.tw/loadfile.php?TOPICID=11654568&CC=260652 ----------------------- 請多多指教啦!!^^
------
-----------------------
請多多指教啦!!^^
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-14 13:28:56 IP:61.224.xxx.xxx 未訂閱
給你一個範例,參考看看 改自你的那個小程式:   
void __fastcall TForm1::Button1Click(TObject *Sender)
{         AnsiString PCName;
     PCName=InputBox("新增","輸入電腦名稱    ","");         TImage *PC_Image = new TImage(Form1);
     PC_Image->Parent = Form1;
     PC_Image->Left = StrToInt(InputBox("X","輸入電腦image X座標    ","1"));
     PC_Image->Top = StrToInt(InputBox("Y","輸入電腦image Y座標    ","1"));
     PC_Image->Picture->LoadFromFile("AddPc.bmp");
     PC_Image->Width = 32;
     PC_Image->Height = 32;
     PC_Image->Stretch = true;         TLabel *PC_Label = new TLabel(Form1);
     PC_Label->Parent = Form1;
     PC_Label->Left = PC_Image->Left;
     PC_Label->Top = PC_Image->Top PC_Image->Height;
     PC_Label->Caption = PCName;    }     
國泰平安
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-15 18:18:32 IP:218.168.xxx.xxx 未訂閱
gemi0305兄, 若程式要改成圖片用"拖拉式"的自行擺設位置,有辦法做到吧?! ----------------------- 請多多指教啦!!^^
------
-----------------------
請多多指教啦!!^^
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-15 21:19:39 IP:61.224.xxx.xxx 未訂閱
先把上篇程式碼改一下,看一下上篇綠色部份, 增加mouse的事件,    因為要寫mouse的事件,如果覺得麻煩,可以先add一個Image元件, 拿這個元件來寫mouse事件,(因為bcb會幫你寫好一些東西,會方便很多) 寫好之後再把這個Image元件delete掉就行~    程式碼:  
 
bool Moving=false;
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
      Moving=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
     if(Moving)
     {
        ((TImage*)Sender)->Top =Y-((TImage *)Sender)->Height/2 ;
        ((TImage*)Sender)->Left =X-((TImage*)Sender)->Width/2 ;
        Moving=false;
     }    }    
這是移動圖片,如果要連Label一起動的話,自己加上,只是依樣畫葫蘆而已~ 有這個「基本型」,你就可以在上面自行做變化 自己試試 國泰平安
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-18 11:24:39 IP:210.66.xxx.xxx 未訂閱
這是增加可以讓Image隨著mouse游標拉動而移動, 主要精神是利用「一個panel」來讓「全部的Image」當做移動的媒介, 如果你要連Label也跟著動的話,自己試試看吧~ 動一下腦筋,其實這不難 . class="code"> #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp> #include //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; void __fastcall Button1Click(TObject *Sender); void __fastcall Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall FormDestroy(TObject *Sender); void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y); private: // User declarations int oldX,oldY; TPanel *panel; public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif .cpp檔
#include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool Moving=false;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
     panel = new TPanel(this);
     panel->Parent = Form1;
     panel->BevelInner = bvLowered;
     panel->BevelOuter = bvLowered;
     panel->Hide();    }
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
     AnsiString PCName;
     PCName=InputBox("新增","輸入電腦名稱    ","");         TImage *PC_Image = new TImage(Form1);
     PC_Image->Parent = Form1;
     PC_Image->Left = StrToInt(InputBox("X","輸入電腦image X座標    ","1"));
     PC_Image->Top = StrToInt(InputBox("Y","輸入電腦image Y座標    ","1"));
     PC_Image->Picture->LoadFromFile("F://AddPc.bmp");
     PC_Image->Width = 32;
     PC_Image->Height = 32;
     PC_Image->Stretch = true;
     PC_Image->OnMouseUp = &Image1MouseUp;
     PC_Image->OnMouseDown = &Image1MouseDown;
     PC_Image->OnMouseMove = &Image1MouseMove;         TLabel *PC_Label = new TLabel(Form1);
     PC_Label->Parent = Form1;
     PC_Label->Left = PC_Image->Left;
     PC_Label->Top = PC_Image->Top PC_Image->Height;
     PC_Label->Caption = PCName;    }
//---------------------------------------------------------------------------    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
     panel->Show();
     oldX = X;
     oldY = Y;         panel->Left = ((TImage*)Sender)->Left-2;
     panel->Top = ((TImage*)Sender)->Top-2;
     panel->Height = ((TImage*)Sender)->Height 4;
     panel->Width = ((TImage*)Sender)->Width 4;
     panel->Visible = true;         ::SetCapture(panel->Handle);
     ((TImage*)Sender)->Parent = panel;
     ((TImage*)Sender)->Left = 2;
     ((TImage*)Sender)->Top = 2;         Moving=true;    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
     if (Moving)
     {
         Moving=false;
         ::ReleaseCapture();
         panel->Visible = false;
         ((TImage*)Sender)->Left = panel->Left;
         ((TImage*)Sender)->Top = panel->Top;
         ((TImage*)Sender)->Parent = this;
     }    }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
     delete panel;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
     if (Shift.Contains(ssLeft))
     {
          panel->Left = panel->Left   (X - oldX);
          panel->Top = panel->Top   (Y - oldY);
     }    }     
國泰平安
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-24 09:04:33 IP:61.219.xxx.xxx 未訂閱
gemi0305兄 你的code我Make或是Build都OK... 但是run的時候出現了"Project Project1.exe raised exception EClassNotFounf with message 'Class TImage not found'.Process stopped.Use Step or Run to continue. " 後來我去改路徑..(原本AddPC.bmp是放在D:\Add_Pc\ 子目錄裡) .cpp裡改成 PC_Image->Picture->LoadFromFile("D:/add_pc/AddPc.bmp"); 結果還是一樣run不出來耶!!#_#' 對了,若在Form1再增加"刪除"、"儲存"(儲存成 .dat檔)的Button... 在網站上有現成的作品可以參考嗎?! ----------------------- 請多多指教啦!!^^
------
-----------------------
請多多指教啦!!^^
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-24 09:11:24 IP:210.66.xxx.xxx 未訂閱
引言: gemi0305兄 你的code我Make或是Build都OK... 但是run的時候出現了"Project Project1.exe raised exception EClassNotFounf with message 'Class TImage not found'.Process stopped.Use Step or Run to continue. " 後來我去改路徑..(原本AddPC.bmp是放在D:\Add_Pc\ 子目錄裡) .cpp裡改成 PC_Image->Picture->LoadFromFile("D:/add_pc/AddPc.bmp"); 結果還是一樣run不出來耶!!#_#' 對了,若在Form1再增加"刪除"、"儲存"(儲存成 .dat檔)的Button... 在網站上有現成的作品可以參考嗎?! < face="Verdana, Arial, Helvetica"> 把紅色的地方改成這個試試~ PC_Image->Picture->LoadFromFile("D://add_pc//AddPc.bmp"); bcb中字串的"/"要用"//", 你說的存成.dat檔? 是想存些什麼資料? 國泰平安
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-24 09:28:29 IP:61.219.xxx.xxx 未訂閱
oh...原來是要用"//" 那書本真該死. 竟然是教"/".... 儲存成. href="http://toget.pchome.com.tw/intro/business_suite/12578.html">http://toget.pchome.com.tw/intro/business_suite/12578.html 安裝好後.. 開始/程式集/Smart Cyber Cafe/Register&Ssttings 裡面有一個"電腦名稱位置設定".... ↓(儲存成.dat檔的地圖,我指的就是這個囉!!) C:\Program Files\Wameng\Smart Cyber Cafe\samplemap ----------------------- 請多多指教啦!!^^
------
-----------------------
請多多指教啦!!^^
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-24 10:35:09 IP:210.66.xxx.xxx 未訂閱
他的dat存了什麼東西,我們是不知道的, 只有程式作者知道~    通常dat檔是binary的形態,存一些你想存的東西, 如畫面上的資料,元件的參數等等~ 在下次程式執行時,可以載入。    如果你想要存完檔之後,直接改可以改這個dat設定檔, 你可以存成純文字檔就行,就像是我們看到的.ini檔一樣,    你也可以不要存成dat,可以用ini或是其他的檔名, 反正只要你和程式共同協議好就行,    版上有很多相關的文章~ 你可以找看看~多使用搜尋功能~ 國泰平安
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-24 20:20:21 IP:61.64.xxx.xxx 未訂閱
這味不知如何 試看看 【Delphi】【發表】模擬網咖管理畫面 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28591 何必捨近求遠 看看有幫助 會員代號: hahalin http://delphi.ktop.com.tw/pop_profile.asp?mode=display&id=658 會員等級: 版主 的代表作之一 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起 發表人 - jackkcg 於 2003/09/24 20:21:15
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-29 01:27:52 IP:61.219.xxx.xxx 未訂閱
woo~~~ 太感謝了!! 感謝大大們的鼎力相助!! ----------------------- 請多多指教啦!!^^
------
-----------------------
請多多指教啦!!^^
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-30 23:00:15 IP:61.224.xxx.xxx 未訂閱
範例: 你再試試看吧
kj68215
初階會員


發表:47
回覆:91
積分:27
註冊:2003-08-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-10-09 00:11:02 IP:61.219.xxx.xxx 未訂閱
gemi0305兄,您的code小弟大部分都看得懂了!! 也學習到另一種命名的方法.......    小弟嘗試Image+Label一起移動,code的修改如下 ↙
PC_Label->OnMouseUp = &Image1MouseUp;
PC_Label->OnMouseDown = &Image1MouseDown;
PC_Label->OnMouseMove = &Image1MouseMove;
Label是可以移動了..但是沒辦法跟Image一起移動. 所以又試了改其他code部分,如以下.. TForm1::Image1MouseDown、Up部分:
     panel->Left = ((TImage*) (TLabel*)Sender)->Left-2;
     panel->Top = ((TImage*) (TLabel*)Sender)->Top-2;
     panel->Height = ((TImage*) (TLabel*)Sender)->Height 15;
     panel->Width = ((TImage*) (TLabel*)Sender)->Width 4;
     panel->Visible = true;         ::SetCapture(panel->Handle);
     ((TImage*) (TLabel*)Sender)->Parent = panel;
     ((TImage*) (TLabel*)Sender)->Left = 2;
     ((TImage*) (TLabel*)Sender)->Top = 2;
一樣可以run,但是Label還是沒辦法跟Image一起移動!#_#" gemi0305兄,可否可一點提示呢?? 我盡量想辦法去嘗試、解決! thx. 對了,若寫入一個"移除"與"儲存地圖"的 > ----------------------- 請多多指教啦!!^^
------
-----------------------
請多多指教啦!!^^
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-10-09 09:47:30 IP:210.66.xxx.xxx 未訂閱
程式照樣修改,就可以一起移動了, 另外你說的"移除"和"儲存"的button, 建議你再發起另一個問題吧,因為這個問題解決的方法有很多種~ 而且有點離題了。  
    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool Moving=false;    //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
     panel = new TPanel(this);
     panel->Parent = Form1;
     panel->BevelInner = bvLowered;
     panel->BevelOuter = bvLowered;
     panel->Hide();    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     AnsiString PCName;
     PCName=InputBox("新增","輸入電腦名稱    ","");         TImage *PC_Image = new TImage(Form1);
     PC_Image->Parent = Form1;
     PC_Image->Name=PCName;
     PC_Image->Left = StrToInt(InputBox("X","輸入電腦image X座標    ","1"));
     PC_Image->Top = StrToInt(InputBox("Y","輸入電腦image Y座標    ","1"));
     PC_Image->Picture->LoadFromFile("F://AddPc.bmp");
     PC_Image->Width = 32;
     PC_Image->Height = 32;
     PC_Image->Stretch = true;
     PC_Image->OnMouseUp = &Image1MouseUp;
     PC_Image->OnMouseDown = &Image1MouseDown;
     PC_Image->OnMouseMove = &Image1MouseMove;         TLabel *PC_Label = new TLabel(Form1);
     PC_Label->Parent = Form1;
     PC_Label->Name=PCName "Label";
     PC_Label->Left = PC_Image->Left;
     PC_Label->Top = PC_Image->Top PC_Image->Height;
     PC_Label->Caption = PCName;    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
     panel->Show();
     oldX = X;
     oldY = Y;         panel->Left = ((TImage*)Sender)->Left-2;
     panel->Top = ((TImage*)Sender)->Top-2;
     panel->Height = ((TImage*)Sender)->Height 15;
     panel->Width = ((TImage*)Sender)->Width 4;
     panel->Visible = true;         ::SetCapture(panel->Handle);
     ((TImage*)Sender)->Parent = panel;
     ((TImage*)Sender)->Left = 2;
     ((TImage*)Sender)->Top = 2;
     TLabel *tmpLabel = ((TLabel*)FindComponent(((TImage*)Sender)->Name "Label"));
     tmpLabel->Parent=panel;
     tmpLabel->Left = 2;
     tmpLabel->Top = 2 ((TImage*)Sender)->Height;         Moving=true;    }
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
     if (Moving)
     {
         Moving=false;
         ::ReleaseCapture();
         panel->Visible = false;
         ((TImage*)Sender)->Left = panel->Left;
         ((TImage*)Sender)->Top = panel->Top;
         ((TImage*)Sender)->Parent = this;
         TLabel *tmpLabel = ((TLabel*)FindComponent(((TImage*)Sender)->Name "Label"));
         tmpLabel->Parent=this;
         tmpLabel->Left = panel->Left;
         tmpLabel->Top = panel->Top ((TImage*)Sender)->Height;
     }    }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
     delete panel;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
     if (Shift.Contains(ssLeft))
     {
          panel->Left = panel->Left   (X - oldX);
          panel->Top = panel->Top   (Y - oldY);
     }    }     
程式有問題再來討論吧
系統時間:2024-05-04 11:50:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!