如何判斷變數內容非 nil |
尚未結案
|
ROLAND168
一般會員 發表:39 回覆:49 積分:17 註冊:2003-02-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
ROLAND168
一般會員 發表:39 回覆:49 積分:17 註冊:2003-02-26 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
ROLAND168
一般會員 發表:39 回覆:49 積分:17 註冊:2003-02-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
小弟用如下的方式試了一下
var Form2: TForm2; procedure TForm1.Button1Click(Sender: TObject); begin Form2 := TForm2.Create(nil); Form2.ShowModal; Form2.Free; ShowMessage(Form2.Name); // Form2 已經 Free 了, 未設成 nil, 但並不會產生 Access Violation Form2 := nil; end;想不通 ROLAND168 兄的 if 條件式裡為何有 AV 的現象? |
ROLAND168
一般會員 發表:39 回覆:49 積分:17 註冊:2003-02-26 發送簡訊給我 |
引言: 小弟用如下的方式試了一下因為是 MDI FORM 所以是用 SHOW 非 ShowModal,所以將 FORM.Action:=caFree 但確出現 AV 的現象??var Form2: TForm2; procedure TForm1.Button1Click(Sender: TObject); begin Form2 := TForm2.Create(nil); Form2.ShowModal; Form2.Free; ShowMessage(Form2.Name); // Form2 已經 Free 了, 未設成 nil, 但並不會產生 Access Violation Form2 := nil; end;想不通 ROLAND168 兄的 if 條件式裡為何有 AV 的現象? |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
ROLAND168
一般會員 發表:39 回覆:49 積分:17 註冊:2003-02-26 發送簡訊給我 |
不好意思,有勞各位了 !! ----- MainForm.pas call sub-form procedure ------ procedure TMainform.FormCreate(Sender: TObject); begin inherited; RegisterClasses([TFBAS_Employee]); end; procedure TMainform.doform(muSelect: TObject); var frmClass: TComponentClass; frmName:String; RSNO,j:integer; CreateFlag:Boolean; NewItem : TMenuItem; begin TmpConn168.Connected:=false; try Screen.Cursor:=crHourGlass; frmName := 'TF' trim(TmainMenu(muselect).Name); frmClass:= TComponentClass(GetClass(frmName)); CreateFlag:=true; FrmPoint:=FrmPoint 1; if FrmPoint >= 2 then begin for j:=0 to frmpoint-1 do begin if assigned(frmwork[j]) and (frmwork[j] is Tform) AND (length(string(frmwork[j].name)) > 30) then begin //檢查是否已 create if (UpperCase(trim('T' frmwork[j].name)) = UpperCase(trim(frmName))) then begin FrmWork[j].WindowState:=wsMaximized; frmwork[j].SetFocus; CreateFlag:=False; frmPoint:=FrmPoint-1; end else FrmWork[j].WindowState:=wsMinimized; end else frmwork[j]:=nil; end; end; if createFlag then begin frmWork[FrmPoint] := THWEnterForm(frmClass.Create(NIL)); TForm(frmWork[FrmPoint]).Position := poOwnerFormCenter; THWEnterForm(frmWork[FrmPoint]).FormArrayPoint:=FrmPoint; Screen.Cursor:=crDefault; frmWork[FrmPoint].WindowState:=wsMaximized; frmWork[FrmPoint].formstyle:=fsMDIChild; frmWork[FrmPoint].Show; end; except ts_syserror('Sys Error(Open Form ' frmName); end; Screen.Cursor:=crDefault; end; ------- FBas_Employee.pas Employee Form on close event ----------- procedure TFBAS_Employee.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := caFree; FreeAndNil(dmBAS_Employee); end; |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
ROLAND168
一般會員 發表:39 回覆:49 積分:17 註冊:2003-02-26 發送簡訊給我 |
|
ROLAND168
一般會員 發表:39 回覆:49 積分:17 註冊:2003-02-26 發送簡訊給我 |
引言:版主您好,若用您的方法的確可行但 UNIT2 必須 USES UNIT1,因 FrmWork array 在 unit1 內,是否還還有其他方式能讓 unit2 不需 uses unit1 ,且在 unit1 內已知 unit2 已 close.謝謝你好: 我試過 hagar 版大的方法運用在 MDI FORM 上,結過也 跟 hagar 版大一樣。所以你要不要把 Source 傳上來看看, 說不定問題出在其他的地方。 但我不清楚為何遭釋放的資源依然能夠存取而不發生錯誤< > 但測試結果又不假< >但我認為離開座位前把桌面清乾淨是一個 好習慣喔 至於如何將 >>> < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif"> |
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi ROLAND168 你好:
以下這行要拆
if assigned(frmwork[j]) and (frmwork[j] is Tform) AND (length(string(frmwork[j].name)) > 30) then變成 if assigned(frmwork[j]) then if (frmwork[j] is Tform) then if length(string(frmwork[j].name)) > 30 then試試~~~~ 我不是高手, 高手是正在銀幕前微笑的人. 發表人 -
------
我不是高手, 高手是正在銀幕前微笑的人. |
ROLAND168
一般會員 發表:39 回覆:49 積分:17 註冊:2003-02-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |