如何把移動過後的Image用ini紀錄起來? |
尚未結案
|
kj68215
初階會員 發表:47 回覆:91 積分:27 註冊:2003-08-09 發送簡訊給我 |
小弟寫了一個小程式,一個有關於Edit,另一個是Image.
用TIniFile的方法記錄了Edit的內容.
但是關於Image的部分,雖然是可以移動了,但是卻不知道該怎麼紀錄下來他移動過後的X,Y座標落點(或是說起始、偏移).
想請問一下各位,用TIniFile的方法,該怎麼個寫法可以記錄下來呢?! 這是小弟寫的code,如下:
//--------------------------------------------------------------------------- #includep.s:5個元件↓ 3個btn Button1,屬性Caption:Load Button2,屬性Caption:Save Button3,屬性Caption:Close Edit1,屬性Text:(空白) Image1,屬性DragMode:dmAutomatic;屬性Stretch:true ----------------------- 請多多指教啦!!^^
------
----------------------- 請多多指教啦!!^^ |
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
kj68215您好
首先小修一下您的code(大概是太累了吧)
< class="code">
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TIniFile *MyIni;
MyIni=new TIniFile(ChangeFileExt(Application->ExeName, ".ini"));
Edit1->Text = MyIni->ReadString("Setting","StringA",0);
Image1->Left=MyIni->ReadInteger("PC","Left",0);
Image1->Top=MyIni->ReadInteger("PC","Top",0);
Image1->Width=MyIni->ReadInteger("PC","Width",0);
Image1->Height=MyIni->ReadInteger("PC","Height",0);
delete MyIni;
}
針對您的問題,我覺得不用修改就行了耶...
在移動完Image後,按一下Save不就記住新的位置了?
如果需要起始和偏移值的話,可以這麼做:
.h檔宣告
private:
int Left;//用來記住起始值
int Top;
.cpp檔:
//-------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Left = Image1->Left; Top = Image1->Top; } //-------------------------------------------------------------------- void __fastcall TForm1::FormDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { Image1->Left=X; Image1->Top=Y; TIniFile *MyIni; MyIni=new TIniFile(ChangeFileExt(Application->ExeName, ".ini")); MyIni->WriteString("Setting","StringA",Edit1->Text); MyIni->WriteInteger("PC","Left",Image1->Left); MyIni->WriteInteger("PC","Top",Image1->Top); MyIni->WriteInteger("PC","Width",Image1->Width); MyIni->WriteInteger("PC","Height",Image1->Height); MyIni->WriteInteger("PC","OffsetX",Left-Image1->Left); MyIni->WriteInteger("PC","OffsetY",Top-Image1->Top); MyIni->WriteInteger("PC","OldLeft",Left); MyIni->WriteInteger("PC","OldTop",Top); delete MyIni; }不知這樣是不是您的需求? PS.這是Image移動完直接寫入的,或者要另外寫在button也可以...看您的需要囉 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ |
CuteBabyBoy
初階會員 發表:18 回覆:97 積分:48 註冊:2003-07-11 發送簡訊給我 |
如果您在 FormPaint 的地方做動作...也許能得到你要的效果... 嘻..這是我想到最快的方式..如果有別的朋友有其他更好的方式~~歡迎討論
void __fastcall TForm1::FormPaint(TObject *Sender) { TIniFile *MyIni; MyIni=new TIniFile(ChangeFileExt(Application->ExeName, ".ini")); MyIni->WriteString("Setting","StringA",Edit1->Text); MyIni->WriteInteger("PC","Left",Image1->Left); MyIni->WriteInteger("PC","Top",Image1->Top); MyIni->WriteInteger("PC","Width",Image1->Width); MyIni->WriteInteger("PC","Height",Image1->Height); delete MyIni; } //------------------------------------------------------------------- |
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
|
AB
高階會員 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
|
kj68215
初階會員 發表:47 回覆:91 積分:27 註冊:2003-08-09 發送簡訊給我 |
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
kj68215您好:
引言: (1)原本用FormDragOver,那該如何改成用Button呢?我試過Button2DragOver沒辦法耶! (2)有什麼寫法,在直接執行Project1.exe後,可以自動Load的動作,呈現出上一次修改過的內容?? (3)有什麼寫法可以按下Reset的按鈕(Button).. a.Edit1的內容被清除為空白 b.Image1的回歸於原本的座標位置.1.使用FormDragOver時,那樣的寫法就是在該事件回應時(拖曳到達定位)寫入 INI檔,而所謂改成Button則只是將"寫入INI"這個動作改寫到ButtonClick裡 __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Left = Image1->Left;//記住起始位置 Top = Image1->Top; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) {//這裡只做位置紀錄 Image1->Left=X;//記住拖曳後位置 Image1->Top=Y; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) {//按下按鈕時寫入INI TIniFile *MyIni; MyIni=new TIniFile(ChangeFileExt(Application->ExeName, ".ini")); MyIni->WriteString("Setting","StringA",Edit1->Text); MyIni->WriteInteger("PC","Left",Image1->Left); MyIni->WriteInteger("PC","Top",Image1->Top); MyIni->WriteInteger("PC","Width",Image1->Width); MyIni->WriteInteger("PC","Height",Image1->Height); MyIni->WriteInteger("PC","OffsetX",Left-Image1->Left); MyIni->WriteInteger("PC","OffsetY",Top-Image1->Top); MyIni->WriteInteger("PC","OldLeft",Left); MyIni->WriteInteger("PC","OldTop",Top); delete MyIni; }PS.Button的DragOver事件是發生在有物件拖曳過他的"上空"時喔 class="code"> __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { TIniFile *MyIni; MyIni=new TIniFile(ChangeFileExt(Application->ExeName, ".ini")); Edit1->Text = MyIni->ReadString("Setting","StringA",0); Image1->Left=MyIni->ReadInteger("PC","Left",0); Image1->Top=MyIni->ReadInteger("PC","Top",0); Image1->Width=MyIni->ReadInteger("PC","Width",0); Image1->Height=MyIni->ReadInteger("PC","Height",0); delete MyIni; } PS.前提是該INI檔存在,可以用 if(FileExists("完整路徑 檔名")) { //檔案存在,讀取 } else //不存在,不可讀取,會發生錯誤3. void __fastcall TForm1::Button2Click(TObject *Sender) { Edit1->Clear(); Image1->Left = Left;//將Image1位置回復到初始 Image1->Top = Top; }其實您的程式碼都做到了,只是要放在適當的位置(事件)內即可 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ |
kj68215
初階會員 發表:47 回覆:91 積分:27 註冊:2003-08-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |