在實現權限管理設計模塊時碰到一些問題…… |
尚未結案
|
howell
一般會員 發表:13 回覆:30 積分:8 註冊:2003-05-09 發送簡訊給我 |
本人嘗試在使用stream將一些組件的信息存入一個名為權限表的表上
每個帳號有一個獨立的記錄,
由於我接觸delphi時間很短,所以一時間不知道用什麼方法將
stream取到的有用的鍵值提取然後生成操作界面給用戶選擇,用戶選好之後,
又不知怎麼把這些值寫入stream相應的位置,
stream中的信息如下:
[Form1.dxBarManager1.Main]
MenusShowRecentItemsFirst=1
ShowFullMenusAfterDelay=1
LargeIcons=0
MenuAnimations=0
ShowHint=1
ShowShortCutInHint=0
BarCount=1 [Form1.dxBarManager1.Bar0]
Caption=Custom 1
DockedDockingStyle=2
DockedLeft=0
DockedTop=0
OneOnRow=1
Row=0
FloatLeft=164
FloatTop=132
FloatClientWidth=23
FloatClientHeight=22
DockingStyle=2
Visible=1
ItemLinkCount=3 [Form1.dxBarManager1.Bar0.ItemLink0]
ItemName=dxBarSubItem1
BeginGroup=0
UserDefine=0
Visible=1
UseCount=20
RecentIndex=0 [Form1.dxBarManager1.Bar0.ItemLink1]
ItemName=dxBarButton1
BeginGroup=0
UserDefine=0
Visible=1
UseCount=20
RecentIndex=1 其中只有visible值及鍵名(如[Form1.dxBarManager1.Bar0.ItemLink1])是有用的資料。
不知道有沒有類似inifile的使用方法的代碼?
|
howell
一般會員 發表:13 回覆:30 積分:8 註冊:2003-05-09 發送簡訊給我 |
我是使用TMemoryStream將其取到cxmemo1進行測試的
本來可以地接地將其存放到ini文件上,但考慮到安全性,還是存放
到內存中穩當一點,請各位先進幫一幫我,謝! procedure TForm1.cxButton1Click(Sender: TObject);
//var
//strstream:TStringStream;
begin
SS:= TMemoryStream.Create;
dxbarmanager1.SaveToStream(SS);
SS.Position:=0;
cxmemo1.Lines.LoadFromStream(SS);
SS.Free;
end;
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
howell 您好: 您可以嘗試使用 TIniFile 元件 以下是我以前寫的一個從 .ini File 讀/寫 出定義值的範例
您可以參考一下....
procedure TFontOption.LoadFromIniFile(const FileName:string); var IniFile: TIniFile; begin if not FileExists(FileName) then Exit; try IniFile := TIniFile.Create(FileName); FRichEditFont.Name := IniFile.ReadString('RichEdit','FontName',''); FRichEditFont.Size := IniFile.ReadInteger('RichEdit','FontSize',0); FRichEditFont.Color := StringToColor(IniFile.ReadString('RichEdit','FontColor','')); FMemoFont.Name := IniFile.ReadString('Memo','FontName',''); FMemoFont.Size := IniFile.ReadInteger('Memo','FontSize',0); FMemoFont.Color := StringToColor(IniFile.ReadString('Memo','FontColor','')); finally FreeAndNil(IniFile); end; end; procedure TFontOption.SaveToIniFile(const FileName:string); var IniFile: TIniFile; begin if not FileExists(FileName) then Exit; try IniFile := TIniFile.Create(FileName); IniFile.WriteString('RichEdit','FontName',FRichEditFont.Name); IniFile.WriteInteger('RichEdit','FontSize',FRichEditFont.Size); IniFile.WriteString('RichEdit','FontColor',ColorToString(FRichEditFont.Color)); IniFile.WriteString('Memo','FontName',FMemoFont.Name); IniFile.WriteInteger('Memo','FontSize',FMemoFont.Size); IniFile.WriteString('Memo','FontColor',ColorToString(FMemoFont.Color)); finally FreeAndNil(IniFile); end; end;希望對您有所幫助... ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真 |
howell
一般會員 發表:13 回覆:30 積分:8 註冊:2003-05-09 發送簡訊給我 |
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
引言: 我是使用TMemoryStream將其取到cxmemo1進行測試的 本來可以地接地將其存放到ini文件上,但考慮到安全性,還是存放 到內存中穩當一點,請各位先進幫一幫我,謝! procedure TForm1.cxButton1Click(Sender: TObject); //var //strstream:TStringStream; begin SS:= TMemoryStream.Create; dxbarmanager1.SaveToStream(SS); SS.Position:=0; cxmemo1.Lines.LoadFromStream(SS); SS.Free; end;您好,請試試看 TMemIniFile , 範例如下 ... procedure TForm1.cxButton1Click(Sender: TObject); var SS:TMemoryStream; MemIni:TMemIniFile; tStr : string; begin try SS:= TMemoryStream.Create; dxbarmanager1.SaveToStream(SS); SS.Position:=0; cxmemo1.Lines.LoadFromStream(SS); finally SS.Free; end; try MemIni := TMemIniFile.Create(''); MemIni.SetStrings(cxmemo1.Lines); tStr := MemIni.ReadString('Form1.dxBarManager1.Bar0.ItemLink0','ItemName',''); ShowMessage(tStr); // Show Result finally FreeAndNil(MemIni); end; end;有點疑問是,這些資料都是動態產生,事後不 save 的嗎?? 如果上面的方法應該可以 work ,但是 TMemo 裡面的內容還是要依循 Ini File 的定義... 如果是不想讓 User 看及修改,那存成 Binary 就可以,如果是需保密的資料,那要在 save/stroe procedure 前要先做點加解密的手腳,或是存於 SQL Server 內... 希望對您有幫助.. ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真 |
howell
一般會員 發表:13 回覆:30 積分:8 註冊:2003-05-09 發送簡訊給我 |
|
howell
一般會員 發表:13 回覆:30 積分:8 註冊:2003-05-09 發送簡訊給我 |
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
引言: SouthWind兄弟,您的代碼在delphi上未能編譯通過,在delphi的幫助找 TMemIniFile又沒有更詳細的指引,提示如下: [Error] Unit1.pas(34): Undeclared identifier: 'TMemIniFile' 請更進我發現了 Delphi 6 沒有這個元件.... 因為是我是在 Delphi 7 上寫的..... 如果只用 TIniFile 的話,有一個不是很好的做法,可以先開一個暫存的檔案先將 Memo 的東西寫入檔案,再讀出來,然後把暫存檔殺掉... 不然就把 D7 的 IniFiles.pas 抓過去 compile ...(可能還要動點手腳) ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真 |
howell
一般會員 發表:13 回覆:30 積分:8 註冊:2003-05-09 發送簡訊給我 |
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
引言: 謝謝! 原來是IniFile.pas的問題 我有這個想法, Lists := TStringList.Create; memini.GetStrings(Lists); lists.SaveToStream(ss); 然後再經Stream轉到數據庫的表中,不知是否可行,如果可行的話,應該不用 建立臨時文件的 另外,怎麼把SS(stream)寫入表中的blob型字段中,我試過,SaveToStream後 是可以看到那些資料的,但post後又變回空白... 有辦法解決嗎?howell 您好: 用 TMemIniFile 的方法不會用到暫存檔,我傳的 filename 是 '' (姑且不論實做),我所謂的利用暫存檔的方法是沒有 TMemIniFile 元件時的權宜之計... 您上面的 code 實驗看看就知道了,看起來是可行的.. 您上述的話,我用紅色標起來的地方,推敲了很久,不是很了解意思,何謂 "post後又變回空白"?? ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真 |
howell
一般會員 發表:13 回覆:30 積分:8 註冊:2003-05-09 發送簡訊給我 |
另外,怎麼把SS(說明,這是一個stream)寫入表中的mysql數據表中的
blob型字段中,我試過,SaveToStream到與此字段綁定的Memo組件後
在memo中是可以看到那些資料(ss中的內容)的,但post後Memo又變回空白...
表中的blob型字段並沒有得到值。 昨晚再試過另一個方法就通過了,代碼如下:
mytable1.Fields.DataSet.Edit;
mytable1.FieldValues['userkey']:=lists.Text;
mytable1.Fields.DataSet.Post; 謝謝SouthWind
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |