關於把檔案載入stringgrid |
尚未結案
|
nata_li
一般會員 ![]() ![]() 發表:4 回覆:5 積分:1 註冊:2006-11-28 發送簡訊給我 |
你好!
小妹是個新手, 遇上些麻煩, 煩請大家幫幫忙! 首先, 我有一個 stringgrid 和 mainmenu 我的目標是: 當使用者click on mainmenu 中的 'easy', 程式會自動load 一個textfile 入stringgrid. (textfile 的directory是randomly generated, 我把textfile 這樣放置的: \Project\ ----all delphi things ----puzzle\easy\ ---001.txt . ---\002.txt . ---\003.txt . ---\004.txt . ---\005.txt . ---\006.txt . ---\007.txt . ---\008.txt . ---\009.txt . ---\010.txt 我嘗試用randomrange(1,10) 來 randomly 挑一個從一至十的數字, 然後弄成一個file directory. 但當我check 的時候, 我發現generate 出來的, 總是C:\...\001.txt, 而不能產生其他數字, 我應該怎麼修改呢? 另外一個更嚴峻的問題是 我不能成功把textfile 載入stringgrid, 測試的時候, stringgrid 裏面每個cell 產生的都是同一個奇怪的符號, 並非textfile 裏面的字, 到底我犯了什麼錯誤? 在這之前, 我曾試過成功把textfile 載入stringgrid(****2) , 今次我以同樣手法寫, 所以我總找不出錯處。 我明白請大家幫這個忙可能是非常費時和乏味, 然而 我真的非常需要你們的幫助, 所以 懇請大家高抬貴手 感激不盡! ****1 unit Sudoku; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, Math, Menus, StdCtrls; type allarry=array[1..9, 1..9]of char; TForm1 = class(TForm) StringGrid1: TStringGrid; MainMenu1: TMainMenu; NewGame1: TMenuItem; Easy: TMenuItem; Standard: TMenuItem; Hard: TMenuItem; Expert: TMenuItem; Extreme: TMenuItem; btnhint: TButton; btnchecksol: TButton; Button1: TButton; btnReset: TButton; btnInp1: TButton; btnInp2: TButton; btnInp3: TButton; btnInp4: TButton; btnInp5: TButton; btnInp6: TButton; btnInp7: TButton; btnInp8: TButton; btnInp9: TButton; Button9: TButton; lbl: TLabel; procedure EasyClick(Sender: TObject); procedure StandardClick(Sender: TObject); procedure HardClick(Sender: TObject); procedure ExpertClick(Sender: TObject); procedure ExtremeClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Randomname: String; puzzle : allarry ; actual : allarry ; puzzlefile, actualfile, userfile: textfile; curdir: string ; implementation {$R *.dfm} procedure genrandomname(var randomname: string); var i, r, n: integer; k: string; begin r:=randomrange(1,10); k:= IntToStr(r); n:= 3 - length(IntToStr(r)) ; for i:= 1 to n do k:= '0' k; randomname:= Randomname k '.txt'; end; Procedure load_into_puzzle_array(var puzzle:allarry); var i, j : integer; dir, s: string; begin dir:=GetCurrentDir; s:=Concat(dir, '\puzzle\', randomname); form1.Caption:= s; assignfile(puzzlefile, s); {$I } Exit; {$I-} Reset(puzzlefile); for i:= 1 to 9 do for j:= 1 to 9 do begin Read(puzzlefile, puzzle[i, j]); readln(puzzlefile) ; end; end; Procedure load_into_actual_array(var actual:allarry); var i, j : integer; begin assignfile(puzzlefile, curdir Randomname); {$I } Exit; {$I-} Reset(puzzlefile); for i:= 1 to 9 do begin for j:= 1 to 9 do Read(puzzlefile, puzzle[i, j]); readln(puzzlefile) ; end; end; Procedure load_puzzle_into_stringgrid(stringgrid1:Tstringgrid); var i, j : integer; begin for i:= 0 to 8 do for j:= 0 to 8 do if puzzle[(i 1), (j 1)] <> '0' then StringGrid1.cells[i,j]:=puzzle[(i 1), (j 1)] end; procedure TForm1.EasyClick(Sender: TObject); begin Randomname:= 'Easy\'; genrandomname(randomname); load_into_puzzle_array(puzzle); load_into_actual_array(actual); load_puzzle_into_stringgrid(stringgrid1); end; procedure TForm1.StandardClick(Sender: TObject); begin Randomname:= 'Standard\' ; genrandomname(randomname); end; procedure TForm1.HardClick(Sender: TObject); begin Randomname:= 'Hard\' ; genrandomname(randomname); end; procedure TForm1.ExpertClick(Sender: TObject); begin Randomname:= 'Expert\'; genrandomname(randomname); end; procedure TForm1.ExtremeClick(Sender: TObject); begin Randomname:= 'Extreme\'; genrandomname(randomname); end; end. ****2 unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; tryarray : array [1..9, 1..9] of char ; tryread : textfile; i, j : integer; curdir: string ; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin assignfile(tryread, 'C:\Documents and Settings\natalie\?agrave;面\intostringgrid\Puzzle\easy\001.txt'); {$I } if (IOResult <> 0) then showmessage('file not found.') ; {$I-} Reset(tryread); if (IOResult=0) then begin for i:= 1 to 9 do begin for j:= 1 to 9 do Read(tryread, tryarray[i, j]); readln(tryread) ; end; for i:= 0 to 8 do for j:= 0 to 8 do if tryarray[(j 1),(i 1)] <> '0' then form1.StringGrid1.cells[i,j]:= tryarray[(j 1),(i 1)] end; end; end. |
nicktop
一般會員 ![]() ![]() 發表:2 回覆:9 積分:7 註冊:2007-01-20 發送簡訊給我 |
|
nicktop
一般會員 ![]() ![]() 發表:2 回覆:9 積分:7 註冊:2007-01-20 發送簡訊給我 |
回答第二個問題
妳在 load_into_puzzle_array , load_into_actual_array 這兩個 procedure 裡面 都有一段這樣的程式碼 {$I } Exit; {$I-} 程式執行到 Exit 這行就跳出procedure了,下面的程式碼根本不會被執行到,妳可以trace看看 {$I } {$I-}的用法我也不是很清楚,但是應該不是這樣用的 如果妳希望 assignfile(puzzlefile, s) 若出錯,則 exit procedure 那麼可以用delphi的例外處理機制 像這樣 try assignfile(puzzlefile, s); except exit; end; |
nata_li
一般會員 ![]() ![]() 發表:4 回覆:5 積分:1 註冊:2006-11-28 發送簡訊給我 |
|
nata_li
一般會員 ![]() ![]() 發表:4 回覆:5 積分:1 註冊:2006-11-28 發送簡訊給我 |
===================引 用 文 章=================== 回答第二個問題 妳在 load_into_puzzle_array , load_into_actual_array 這兩個 procedure 裡面 都有一段這樣的程式碼 {$I } Exit; {$I-} 程式執行到 Exit 這行就跳出procedure了,下面的程式碼根本不會被執行到,妳可以trace看看 {$I } {$I-}的用法我也不是很清楚,但是應該不是這樣用的 如果妳希望 assignfile(puzzlefile, s) 若出錯,則 exit procedure 那麼可以用delphi的例外處理機制 像這樣 try assignfile(puzzlefile, s); except exit; end; 多謝你呀! 我終於明白自己錯什麼。 更感謝你教我如何用delphi的例外處理機制 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |