关于TobjectList的一点疑问
http://www.delphi2007.net/DelphiVCL/html/delphi_20061223112301168.html
我用了一個TObjectList,我想將自己定義的類對象加進(jìn)去(包含多個對象) ?
? 對象含有多個字段(屬性),最后我要將各個對象,以某字段的值進(jìn)行排序 ?
? ?
? 下面是程序代碼片段---------- ?
? CoDeskList ? := ? TObjectList.Create; ?
? CoDesKList.OwnsObjects ? := ? false;//這個地方采用默認(rèn)值還是false ?
? ?
? while ? not ? eof ? do//數(shù)據(jù)庫讀出的記錄 ?
? ? ? ? ? ? ? ? ? begin ?
? ? ? ? ? ? ? ? ? ? ? ? ? SvDesk ? := ? TSvDesk.Create;//自定義對象 ?
? ? ? ? ? ? ? ? ? ? ? ? ? SvDesk.DCoID:= ? Trim(fieldbyname('servdeskcoid').AsString); ?
? ? ? ? ? ? ? ? ? ? ? ? ? SvDesk.Length ? := ? fieldbyname('inorderqueuecurrlength').AsInteger; ?
? ? ? ? ? ? ? ? ? ? ? ? ? SvDesk.Pri ? := ? fieldbyname('pri').AsInteger; ?
? ? ? ? ? ? ? ? ? ? ? ? ? CoDeskList.Add(SvDesk); ?
? ? ? ? ? ? ? ? ? ? ? ? ? SvDesk.Free;//釋放 ?
? ? ? ? ? ? ? ? ? ? ? ? ? next; ?
? ? ? ? ? ? ? ? ? end; ?
? ?
? ? ? MaxPri ? := ? TSvDesk(CoDeskList.Items[0]).Pri;//TSvDesk強(qiáng)制轉(zhuǎn)換 ? 調(diào)試過,有值 ?
? ? ? ID:= ? TSvDesk(CoDeskList.Items[0]).DcoID;//這里為什么讀不出來呢 ?
? ? ? ? ? ? ? ? ? For ? i:= ? 0 ? TO ? Sum_a ? Do ? //找出服務(wù)臺的最高優(yōu)先級值 ?
? ? ? ? ? ? ? ? ? begin ?
? ? ? ? ? ? ? ? ? ? ? ? ? if ? MaxPri ? < ? TSvDesk(CoDeskList.Items[i]).Pri ? then ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MaxPri ? := ? TSvDesk(CoDeskList.Items[i]).Pri; ?
? ? ? ? ? ? ? ? ? end; ?
? 最后 ?
? ? ? ? ? CoDeskList.Clear; ?
? ? ? ? ? CoDeskList.Free; ?
? 還有一個很嚴(yán)重的問題就是CoDeskList里有兩條記錄,但都是最后一條記錄的值(第一條被覆蓋掉了),為什么呢?????????
type ?
? ? ? TSvDesk ? = ? class ?
? ? ? private ?
? ? ? ? ? FDCoID: ? string; ?
? ? ? ? ? FLength: ? Integer; ?
? ? ? ? ? FPri: ? Integer; ?
? ? ? protected ?
? ? ? public ?
? ? ? ? ? property ? DCoID: ? string ? read ? FDCoID ? write ? FDCoID; ?
? ? ? ? ? property ? Length: ? Integer ? read ? FLength ? write ? FLength; ?
? ? ? ? ? property ? Pri: ? Integer ? read ? FPri ? write ? FPri; ?
? ? ? end; ?
? ?
? ? ? TFormDemo ? = ? class(TForm) ?
? ? ? ? ? ADOQuery: ? TADOQuery; ?
? ? ? ? ? ButtonDemo: ? TButton; ?
? ? ? ? ? procedure ? ButtonDemoClick(Sender: ? TObject); ?
? ? ? private ?
? ? ? ? ? { ? Private ? declarations ? } ?
? ? ? public ?
? ? ? ? ? { ? Public ? declarations ? } ?
? ? ? end; ?
? ?
? var ?
? ? ? FormDemo: ? TFormDemo; ?
? ?
? implementation ?
? ?
? {$R ? *.dfm} ?
? //排序函數(shù)(降序) ?
? function ? ComparePri(Item1, ? Item2: ? TObject): ? Integer; ?
? begin ?
? ? ? if ? TSvDesk(Item1).Pri ? > ? TSvDesk(Item2).Pri ? then ?
? ? ? ? ? Result ? := ? -1; ?
? ? ? if ? TSvDesk(Item1).Pri ? = ? TSvDesk(Item2).Pri ? then ?
? ? ? ? ? Result ? := ? 0; ?
? ? ? if ? TSvDesk(Item1).Pri ? < ? TSvDesk(Item2).Pri ? then ?
? ? ? ? ? Result ? := ? 1; ?
? end; ?
? ?
? procedure ? TFormDemo.ButtonDemoClick(Sender: ? TObject); ?
? var ?
? ? ? CoDeskList: ? TObjectList; ?
? ? ? SvDesk: ? TSvDesk; ?
? ? ? MaxPri: ? Integer; ?
? ? ? ID: ? Integer; ?
? begin ?
? ? ? CoDeskList ? := ? TObjectList.Create; ?
? ? ? //CoDesKList.OwnsObjects ? := ? False; ? //Default ? = ? True ?
? ? ? try ?
? ? ? ? ? with ? ADOQuery ? do ?
? ? ? ? ? begin ?
? ? ? ? ? ? ? while ? not ? Eof ? do//數(shù)據(jù)庫讀出的記錄 ?
? ? ? ? ? ? ? begin ?
? ? ? ? ? ? ? ? ? SvDesk ? := ? TSvDesk.Create;//自定義對象 ?
? ? ? ? ? ? ? ? ? SvDesk.DCoID:= ? Trim(FieldByName('ServDeskCoID').AsString); ?
? ? ? ? ? ? ? ? ? SvDesk.Length ? := ? FieldByName('InOrderQueueCurrLength').AsInteger; ?
? ? ? ? ? ? ? ? ? SvDesk.Pri ? := ? FieldByName('Pri').AsInteger; ?
? ? ? ? ? ? ? ? ? CoDeskList.Add(SvDesk); ?
? ? ? ? ? ? ? ? ? //SvDesk.Free;//不要釋放 ?
? ? ? ? ? ? ? ? ? Next; ?
? ? ? ? ? ? ? end; ?
? ? ? ? ? end; ?
? ? ? ? ? CoDeskList.Sort(@ComparePri); ?
? ? ? ? ? MaxPri ? := ? TSvDesk(CoDeskList.Items[0]).Pri; ?
? ? ? finally ?
? ? ? ? CoDeskList.Free; ?
? ? ? end; ?
? end;
DELPHI ? HELP ?
? ?
? OwnsObjects: ?
? ?
? Allows ? TObjectList ? to ? free ? objects ? when ? they ? are ? deleted ? from ? the ? list ? or ? the ? list ? is ? destroyed. ?
? ?
? OwnsObjects ? allows ? TObjectList ? to ? control ? the ? memory ? of ? its ? objects. ? If ? OwnsObjects ? is ? true ? (the ? default), ?
? ?
? calling ? Delete ? or ? Remove ? frees ? the ? deleted ? object ? in ? addition ? to ? removing ? it ? from ? the ? list. ?
? calling ? Clear ? frees ? all ? the ? objects ? in ? the ? list ? in ? addition ? to ? emptying ? the ? list. ?
? calling ? the ? destructor ? frees ? all ? the ? objects ? in ? the ? list ? in ? addition ? to ? destroying ? the ? TObjectList ? itself. ?
? assigning ? a ? new ? value ? to ? an ? index ? in ? Items ? frees ? the ? object ? that ? previously ? occupied ? that ? position ? in ? the ? list.
還有一個很嚴(yán)重的問題就是CoDeskList里有兩條記錄,但都是最后一條記錄的值(第一條被覆蓋掉了),為什么呢????????? ?
? ------------------------------------ ?
? 呵呵。 ? 一切都是指針惹的禍。
總結(jié)
以上是生活随笔為你收集整理的关于TobjectList的一点疑问的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rails安全导读【完】
- 下一篇: ……OleContainer中嵌入WOR