請問delphi中一個動態陣列能容納兩種以上資料型態嗎? |
答題得分者是:ha0009
|
neoaj23
一般會員 發表:35 回覆:7 積分:8 註冊:2003-09-12 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
neoaj23
一般會員 發表:35 回覆:7 積分:8 註冊:2003-09-12 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
那我也只能佩服前輩的耐心,List跟StringList只能存一堆字串資料,那萬一我要用個人資料,有姓名,出生年月日,身份証號,住址等等資料,那不就要準備一堆list或stringlist來存子項目,新增一筆就要動到好幾個list,那還不如用customlistview來做會比較爽一點,至少一筆item可以存無限個subitem....更動也只要對那個listitem來作動就好
懶人動態陣列............(不想冒險動記憶体指標的人適用) pli : TListView; begin pli:=TListView.Create(nil); with pli.Items.Add do begin caption:='王大明'; subitems.Add('1997/10/01'); subitems.Add('Q123456789'); subitems.Add('02-12345678'); subitems.Add('台北市總統府前廣場地下水道a02號房'); end;不過有簡單的方法! type TPersonalData = record Name: String; Birthday : double; PID : array[0..9] of char; TEL : String; end; var PDArray: array of TPersonalData; begin Getmem(PDArray,sizeof(PDArray)*100); // 給這個動態陣列一個固定100個元素值 with PDArray[0] do begin name:='王小明'; birthday:=encodedate(1980,10,1); PID:='Q123456789'; TEL:='02-12345678'; end; . . FreeMem(PDArray);我不懂,不懂,不懂....所以我才來ktop學工夫 |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
引言: 你好: 善用 Variant 既可。能不用 Variant 就不要用 Variant 雖然好用, 但是缺點不少, 萬不得已, 別用var A: Variant; begin A := VarArrayCreate([0, 4], varVariant); A[0] := 1; A[1] := 1234.5678; A[2] := 'Hello world'; A[3] := True; A[4] := VarArrayOf([1, 10, 100, 1000]); end; |
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
是啊是啊,又不是寫OLE給人呼叫,別人不確定傳給你的是啥值,也不知你回傳的是啥值,一懶三千里,全部用Variant.......
Variant想的到的壞處,就是極度耗用系統資源,不同型別變數之間偵測與轉換速度拖的很兇,又不是在寫BASIC,一個變數走天下........加數字變數值,加字元自己變字串,那如果出現型別不明(#20是空白字元還是BYTE的32??),那就很容易鬧笑話跟抓不盡的BUG,慎用Variant啊~~~~~~~~~~~~~~ 我不懂,不懂,不懂....所以我才來ktop學工夫
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
就像我最近在寫的一個用ESC/P2指令列印圖型的笑話一樣,一開始我笨笨的把BITMAP用PIXELS[X,Y]的指令在讀圖片~~後來發現讀完一個400*1000的圖片(比較長),竟然要花上8秒鐘(在XP環境下).....害我被同事笑~太慢了~如果報表太長,印出來所需時間真的是拖的很誇張....... 後來我改用SCANLINE的方式讀同一張圖~~~我才知道~速度真的是天壤之別,同樣一張圖只要零點幾秒.................... 條條道路都可以通羅馬,但別用最慢最慢的方法去做 我不懂,不懂,不懂....所以我才來ktop學工夫
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
剛剛看到 japhenchen 會員所做的發言,小弟針對其誤解的部分提出看法。 那我也只能佩服前輩的耐心(1),List跟StringList只能存一堆字串資料(2),那萬一我要用個人
資料,有姓名,出生年月日,身份証號,住址等等資料,那不就要準備一堆list或stringlist
來存子項目(3),新增一筆就要動到好幾個list,那還不如用customlistview來做會比較爽一
點(4),至少一筆item可以存無限個subitem....更動也只要對那個listitem來作動就好 (1) 我不是前輩,我只是將我不成熟的經驗分享給需要的人。況且我沒啥耐心,因此回答都是點
到為止,視需要再做進一步的分享與探討。
(2) TStrings 與 TList 的字串應用你說的沒錯。但指標應用你卻忽略了。你可以參考以下的資 料,這可充分說明你的論調是錯誤的。 TStrings Add // 加入一個字串到串列中 AddObject // 加入一個物件指標到串列中 Strings // 取出串列中指定位址的字串 Objects // 取出串列中指定位址的物件指標 TList Add // 加入一個指標到串列中 Items // 取出串列中指定位址的指標(3) 這應該承上題,由於你一知半解以致會有這樣的疑問。記憶體由 TList 或 TStrings 管理不僅 達到動態的目的,也簡化設計管理記憶體的負擔。http://sourceprovide.deepen.com.tw/K_Top/ListDemo.exe 提供一個使用範例供大家參考。 (4) 由於 TCustomListView 是繼承自 TWinControl ,相較於繼承自 TObject 的 TList 與 TStrings 來說,未必很爽快。這是因為兩者雖然都是 VCL,但 TWinControl 需負擔 Window Handle 的管理,因此 耗費的系統資源更多。 是啊是啊,又不是寫OLE給人呼叫(5),別人不確定傳給你的是啥值,也不知你回傳的是啥值(6),一懶三 千里,全部用Variant(7)....... Variant想的到的壞處,就是極度耗用系統資源,不同型別變數之間偵 測與轉換速度拖的很兇,又不是在寫BASIC(8),一個變數走天下........加數字變數值,加字元自己變字 串,那如果出現型別不明(#20是空白字元還是BYTE的32??),那就很容易鬧笑話跟抓不盡的BUG,慎用 Variant啊(9)~~~~~~~~ (5) 這是好笑的推論,我不能肯定發問者的目的,為何你能呢?果真神人也! (6) Variant 的特性是多變,這也是為何 Variant 需要伴隨著許多的檢測函式供程設使用。如果一個程式 設計師會因為未知的值而產生未知的後果,那表示他並不懂得如何善用 Variant。 (7) 一個專業的程式設計師在應用各種型態的變數時會依需求與功能來決定。如果照你說那那些撰寫 COM/OLE 的專業人員全都是懶人嗎。 (8) 您在說笑話吧,誰說 Variant 祇能應用在 VB,還是你只懂 VB。 (9) 這是我唯一認同你的一點,Variant 的方便性卻也是致命傷。因為程式設計者需花更多的檢查工作以 免發生不預期的情況。 拉拉雜雜的說了一堆,只是要讓正確的觀念獲得伸張。當然每個人都有自己的想法與實務經驗,也許我的觀念不 成熟如果上述的言論有誤,也請各位前輩不吝指教。 |
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |