kj68215
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:47 回覆:91 積分:27 註冊:2003-08-09
發送簡訊給我
|
小弟寫了一個小程式..
是有關於新稱電腦台數..
簡單來說...就是當按下Button後..
他會出現InputBox..
這時隨便輸入名稱(ex: 01、02...等)
則就會出現AddPC.bmp以及該台的編號..
請問該怎麼寫呢? 若還是不瞭解小弟再說啥的話..
那小弟則上傳了demo程式...
下載看看囉!^^
http://delphi.ktop.com.tw/loadfile.php?TOPICID=11654568&CC=260652 -----------------------
請多多指教啦!!^^
------ -----------------------
請多多指教啦!!^^
|
gemi0305
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:81 回覆:564 積分:629 註冊:2003-05-11
發送簡訊給我
|
給你一個範例,參考看看
改自你的那個小程式:
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
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:47 回覆:91 積分:27 註冊:2003-08-09
發送簡訊給我
|
gemi0305兄,
若程式要改成圖片用"拖拉式"的自行擺設位置,有辦法做到吧?! ![]() -----------------------
請多多指教啦!!^^
------ -----------------------
請多多指教啦!!^^
|
gemi0305
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:81 回覆:564 積分:629 註冊:2003-05-11
發送簡訊給我
|
先把上篇程式碼改一下,看一下上篇綠色部份,
增加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
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:81 回覆:564 積分:629 註冊:2003-05-11
發送簡訊給我
|
這是增加可以讓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
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:47 回覆:91 積分:27 註冊:2003-08-09
發送簡訊給我
|
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
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:81 回覆:564 積分:629 註冊:2003-05-11
發送簡訊給我
|
引言:
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
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:47 回覆:91 積分:27 註冊:2003-08-09
發送簡訊給我
|
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
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:81 回覆:564 積分:629 註冊:2003-05-11
發送簡訊給我
|
他的dat存了什麼東西,我們是不知道的,
只有程式作者知道~ 通常dat檔是binary的形態,存一些你想存的東西,
如畫面上的資料,元件的參數等等~
在下次程式執行時,可以載入。 如果你想要存完檔之後,直接改可以改這個dat設定檔,
你可以存成純文字檔就行,就像是我們看到的.ini檔一樣, 你也可以不要存成dat,可以用ini或是其他的檔名,
反正只要你和程式共同協議好就行, 版上有很多相關的文章~ 你可以找看看~多使用搜尋功能~
![]() 國泰平安
|
jackkcg
站務副站長
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](http://delphi.ktop.com.tw/loadfile.php?TOPICID=7404967&CC=165613) 發表:891 回覆:1050 積分:848 註冊:2002-03-23
發送簡訊給我
|
這味不知如何
試看看
【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
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:47 回覆:91 積分:27 註冊:2003-08-09
發送簡訊給我
|
woo~~~ ![]()
太感謝了!!
感謝大大們的鼎力相助!! -----------------------
請多多指教啦!!^^
------ -----------------------
請多多指教啦!!^^
|
gemi0305
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:81 回覆:564 積分:629 註冊:2003-05-11
發送簡訊給我
|
範例:
你再試試看吧
|
kj68215
初階會員
![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:47 回覆:91 積分:27 註冊:2003-08-09
發送簡訊給我
|
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
版主
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:81 回覆:564 積分:629 註冊:2003-05-11
發送簡訊給我
|
程式照樣修改,就可以一起移動了,
另外你說的"移除"和"儲存"的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);
} } 程式有問題再來討論吧
|