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

如何把移動過後的Image用ini紀錄起來?

尚未結案
kj68215
初階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-17 04:07:41 IP:61.219.xxx.xxx 未訂閱
小弟寫了一個小程式,一個有關於Edit,另一個是Image. 用TIniFile的方法記錄了Edit的內容. 但是關於Image的部分,雖然是可以移動了,但是卻不知道該怎麼紀錄下來他移動過後的X,Y座標落點(或是說起始、偏移). 想請問一下各位,用TIniFile的方法,該怎麼個寫法可以記錄下來呢?!    這是小弟寫的code,如下:
//---------------------------------------------------------------------------    #include 
#include     #pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    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->Left=MyIni->ReadInteger("PC","Top",0);
Image1->Left=MyIni->ReadInteger("PC","Width",0);
Image1->Left=MyIni->ReadInteger("PC","Height",0);
delete MyIni;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(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;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();        
}
//---------------------------------------------------------------------------        void __fastcall TForm1::FormDragOver(TObject *Sender, TObject *Source,
      int X, int Y, TDragState State, bool &Accept)
{
Image1->Left=X;
Image1->Top=Y;
}
//---------------------------------------------------------------------------
p.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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-17 09:17:25 IP:210.243.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-17 09:20:41 IP:218.167.xxx.xxx 未訂閱
如果您在 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-17 09:35:54 IP:210.243.xxx.xxx 未訂閱
呃...PO上去才發現寫的不好... 補充一下,應該在>> > 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-17 19:16:43 IP:61.221.xxx.xxx 未訂閱
參考hahalin版者 這也是可以的 【發表】網咖管理金剛組合版 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28622
kj68215
初階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-21 01:47:36 IP:61.219.xxx.xxx 未訂閱
ENIX007兄, 真的很感謝你唷! 原來是我的小地方沒改到! 原本的程式,執行已經ok了!!!    另外..你用FormDragOver直接作紀錄. 小試了一下,也是可以做到同樣的效果,只是改成了不需要按Save! 問題是... ( > (>>後,可以<>自動>的動作,呈現出上一次修改過的內容?? ( > 發表人 -
------
-----------------------
請多多指教啦!!^^
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-21 16:32:38 IP:218.165.xxx.xxx 未訂閱
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-22 22:23:25 IP:61.219.xxx.xxx 未訂閱
哇~~原來也不是想像中的難嘛! 真是太感謝囉,我會試試看! ----------------------- 請多多指教啦!!^^
------
-----------------------
請多多指教啦!!^^
系統時間:2024-05-16 5:52:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!