全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1610
推到 Plurk!
推到 Facebook!

請問delphi中一個動態陣列能容納兩種以上資料型態嗎?

答題得分者是:ha0009
neoaj23
一般會員


發表:35
回覆:7
積分:8
註冊:2003-09-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-22 14:17:12 IP:61.219.xxx.xxx 未訂閱
如題 或者有何方法可在一個動態產生的陣列中容納不同型態資料,如c 中的template
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-22 14:24:53 IP:61.30.xxx.xxx 未訂閱
你好: 善用 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;
neoaj23
一般會員


發表:35
回覆:7
積分:8
註冊:2003-09-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-22 15:14:01 IP:61.219.xxx.xxx 未訂閱
再請教.... 1.使用VarArrayCreate需要uses什麼檔嗎? 2.如何動態設定VarArrayCreate容納的資料各數? 3.VarArrayCreate可容納自訂型態(record)嗎?
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-22 15:28:25 IP:61.30.xxx.xxx 未訂閱
你好:
  1.使用VarArrayCreate需要uses什麼檔嗎?
    D6 之前的不需要 Uses,D6 以後的要 Uses Variants      2.如何動態設定VarArrayCreate容納的資料各數?
    請查 Help,說明的非常清楚。      3.VarArrayCreate可容納自訂型態(record)嗎?
    如果要存放的資料包含自訂型態,我會把 TList or TStrings 等元件當動態陣列使用。
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-09 16:36:05 IP:211.96.xxx.xxx 未訂閱
那我也只能佩服前輩的耐心,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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-10 09:51:49 IP:203.222.xxx.xxx 未訂閱
引言: 你好: 善用 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;
能不用 Variant 就不要用 Variant 雖然好用, 但是缺點不少, 萬不得已, 別用
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-10 11:36:29 IP:211.96.xxx.xxx 未訂閱
是啊是啊,又不是寫OLE給人呼叫,別人不確定傳給你的是啥值,也不知你回傳的是啥值,一懶三千里,全部用Variant....... Variant想的到的壞處,就是極度耗用系統資源,不同型別變數之間偵測與轉換速度拖的很兇,又不是在寫BASIC,一個變數走天下........加數字變數值,加字元自己變字串,那如果出現型別不明(#20是空白字元還是BYTE的32??),那就很容易鬧笑話跟抓不盡的BUG,慎用Variant啊~~~~~~~~~~~~~~ 我不懂,不懂,不懂....所以我才來ktop學工夫
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-10 12:20:54 IP:211.96.xxx.xxx 未訂閱
就像我最近在寫的一個用ESC/P2指令列印圖型的笑話一樣,一開始我笨笨的把BITMAP用PIXELS[X,Y]的指令在讀圖片~~後來發現讀完一個400*1000的圖片(比較長),竟然要花上8秒鐘(在XP環境下).....害我被同事笑~太慢了~如果報表太長,印出來所需時間真的是拖的很誇張....... 後來我改用SCANLINE的方式讀同一張圖~~~我才知道~速度真的是天壤之別,同樣一張圖只要零點幾秒.................... 條條道路都可以通羅馬,但別用最慢最慢的方法去做 我不懂,不懂,不懂....所以我才來ktop學工夫
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-13 18:23:19 IP:61.30.xxx.xxx 未訂閱
剛剛看到 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-10-13 21:44:35 IP:218.18.xxx.xxx 未訂閱
我離"前輩"這二個字實在還遠的呢,或許我理解的可能有偏差,這下子,我總算多理解了一些以前想都沒想過的事吧..真理是不辯不明..所以我才會來這里把自己認為對的事情拿來現醜,至於對與不對,好與不好,就留著給大家來評斷才會知道的~~ 我看了回題目,似乎我離題了~ template相較於variant,我卻扯到structure和record去了~~~~丟臉丟臉~ 我不懂,不懂,不懂....所以我才來ktop學工夫
系統時間:2024-04-28 12:30:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!