程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第六章-文件管理(一)(4)

第六章-文件管理(一)(4)

編輯:Delphi

6.2.4 記錄文件的讀入和顯示 

定義一個全局變量Count用來保存文件中的記錄個數。當文件裝入時: 

Count := FileSize(MethodFile); 

如果Count > 0,則首先確定StringGrid1的高度、行數。為保證StringGrid1不會覆蓋窗口下面的編輯框,定義一個常量MaxShow。當Count < MaxShow時,記錄可全部顯示;當Count >= MaxShow時,StringGrid1自動添加一個滾動棒。為保證滾動棒不覆蓋掉顯示內容,StringGrid1的寬度應留有余地。

確定StringGrid1高度、行數的代碼如下: 

With StringGrid do

if count < MaxShow then

Height := DefaultRowHeight * (Count+1)+10

else

Height := DefaultRowHeight * MaxShow+10;

RowCount := Count+1;

end; 

而後從文件中逐個讀入記錄並顯示在StringGrid1的相應位置: 

for i := 1 to Count do

begin

Read(MethodFile,MethodRec);

ShowMethod(MethodRec,i);

end; 

ShowMehtod是一個過程,用來把一條記錄填入StringGrid1的一行中。對於Name、Condition域而言,只須直接賦值即可;而對Nature 域需要把枚舉類型值轉化為對應意義的字符串(0:“微觀”,1:“宏觀”);而對Result域則需要把數值轉化為一定格式的字符串: 

Str (MethodRec.Result:6:4,ResultStr);

  StringGrid1.Cells[3,Pos] := ResultStr; 

即Result顯示域寬為6,其中小數點後位數為4。 

6.2.5 增加一條記錄 

當用戶單擊“增加”按鈕時屏幕將會彈出一個記錄編輯模式對話框EditForm。在編輯框中填入合適的內容並按OK鍵關閉後,相應值寫入一個TMethod類型的變量MethodRec中。其中Nature和Result 域需要進行轉換。之後增加的記錄添加到StringGrid1的顯示中。

最後文件定位於尾部,寫入當前記錄,總記錄數加1。 

  Seek(MethodFile,Count);

Write(MethodFile,MethodRec);

Count := Count+1; 

完整的程序清單如下: 

procedure TRecFileForm.AddButtonClick(Sender: TObject);

var

MethodRec: TMethod;

Rl: Real;

k: Integer;

EditForm: TEditForm;

begin

if FileOpenEd = False then Exit;

EditForm := TEditForm.Create(self);

if EditForm.ShowModal <> idCancel then

begin

HazAttr.text := '';

MethodRec.Name := EditForm.MethodName.text;

MethodRec.Condition := EditForm.Condition.text;

case EditForm.NatureCombo.ItemIndex of

0:

MethodRec.Nature := Micro;

1:

MethodRec.Nature := Macro ;

end;

Val(EditForm.Result.text,Rl,k);

MethodRec.Result := Rl;

with StringGrid1 do

begin

if Count < MaxShow then

Height := Height+DefaultRowHeight;

RowCount := RowCount+1;

end;

ShowMethod(MethodRec,Count+1);

seek(MethodFile,Count);

write(MethodFile,MethodRec);

Count := Count+1;

end;

end; 

6.2.6 修改記錄 

首先獲取當前記錄位置: 

CurrentRec := StringGrid1.Row - 1; 

而後打開編輯對話框並顯示當前值。修改完畢後,修改結果保存在一個記錄中並在StringGrid1中重新顯示。

最後修改結果寫入文件: 

Seek(MethodFile,CurrentRec);

Write(MethodFile,MethodRec); 

完整程序如下: 

procedure TRecFileForm.ModifyButtonClick(Sender: TObject);

var

MethodRec: TMethod;

Rl: Real;

k: Integer;

EditForm: TEditForm;

begin

if FileOpened = False then Exit;

EditForm := TEditForm.Create(self);

CurrentRec := StringGrid1.Row-1;

with EditForm do

begin

MethodName.text := StringGrid1.Cells[0,CurrentRec+1];

Condition.text := StringGrid1.Cells[1,CurrentRec+1];

if StringGrid1.Cells[2,CurrentRec+1] = '微 觀' then

NatureCombo.ItemIndex := 0

else

NatureCombo.ItemIndex := 1;

Result.text := StringGrid1.Cells[3,CurrentRec+1];

if ShowModal <> idCancel then

begin

HazAttr.text := '';

MethodRec.Name := MethodName.text;

MethodRec.Condition := Condition.text;

case NatureCombo.ItemIndex of

0:

MethodRec.Nature := Micro;

1:

MethodRec.Nature := Macro ;

end;

Val(Result.text,Rl,k);

MethodRec.Result := Rl;

ShowMethod(MethodRec,CurrentRec+1);

seek(MethodFile,CurrentRec);

write(MethodFile,MethodRec);

end;

end;

end;  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved