線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1756
推到 Plurk!
推到 Facebook!

在實現權限管理設計模塊時碰到一些問題……

尚未結案
howell
一般會員


發表:13
回覆:30
積分:8
註冊:2003-05-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-08 10:21:51 IP:219.128.xxx.xxx 未訂閱
本人嘗試在使用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-08 10:29:05 IP:219.128.xxx.xxx 未訂閱
我是使用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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-08 13:31:14 IP:203.66.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-08 16:31:18 IP:219.128.xxx.xxx 未訂閱
SouthWind感謝你的幫助, 請問tinifile能否直接操控memo組件中的內容? 因為我不想在硬盤上產生一個ini文件
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-09 09:45:49 IP:203.66.xxx.xxx 未訂閱
引言: 我是使用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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-09 10:04:19 IP:219.128.xxx.xxx 未訂閱
謝謝!太好了,我就是想要這個 是的,要將這段控制權限的資料通過加密解密存放到數據庫的某個表中 處理手法是多樣的,好似可以將資料加密後分段保存到多個字段中, 然後根據用戶的帳號做一個算法來排列各個字段的粘合先後次序,不過 現時沒必要做得這麼復雜,能完成將權限的資料存入數據庫及加載時可調出就行了,以後再細化加密的工作。 再次感謝您,SouthWind 等會我就試試看
howell
一般會員


發表:13
回覆:30
積分:8
註冊:2003-05-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-10 15:54:24 IP:219.128.xxx.xxx 未訂閱
SouthWind兄弟,您的代碼在delphi上未能編譯通過,在delphi的幫助找 TMemIniFile又沒有更詳細的指引,提示如下: [Error] Unit1.pas(34): Undeclared identifier: 'TMemIniFile' 請更進
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-10 19:46:50 IP:211.76.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-11 11:34:41 IP:219.128.xxx.xxx 未訂閱
謝謝! 原來是IniFile.pas的問題 我有這個想法, Lists := TStringList.Create; memini.GetStrings(Lists); lists.SaveToStream(ss); 然後再經Stream轉到數據庫的表中,不知是否可行,如果可行的話,應該不用 建立臨時文件的 另外,怎麼把SS(stream)寫入表中的blob型字段中,我試過,SaveToStream後 是可以看到那些資料的,但post後又變回空白... 有辦法解決嗎?
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-01-12 22:45:47 IP:211.76.xxx.xxx 未訂閱
引言: 謝謝! 原來是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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-01-13 11:11:37 IP:219.128.xxx.xxx 未訂閱
另外,怎麼把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
系統時間:2024-07-06 10:38:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!