![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вставить элемент внутрь массива рекордов ? [D7]
Кто---то © (2004-11-12 01:25:00)Или можно ли как-нибудь работать с рекордами также удобно, как и со строками в StringList ? Ну, или что-нибудь подобное ? Что можно посоветовать ?
TankMan (2004-11-12 15:15:00) [21]Вот...я работаю с такой вот оболочкой классом, вот уж не помню кого мне благодарить за пример :)
А может сдесь есть явные недостатки, и я их не заметил? Может кто увидит чего? Может можно чего добавить/улучшить?
TankMan (2004-11-12 15:11:00) [22]type
TRecord=class
public
AppPath,Params,WorkDir,StartTime:string;
Enabled:Boolean;
end;
TWorkList=class
private
FItems:array of TRecord;
function GetItems(Index: integer):TRecord;
procedure SetItems(Index: integer; const Value: TRecord);
public
property Items[Index:integer]:TRecord read GetItems write SetItems; default;
function Count:integer;
procedure Add(Item:TRecord);overload;
procedure Add(AppPath:string;Params,WorkDir,StartTime:string;Enabled:boolean);overload;
procedure Clear;
procedure Delete(Index:integer);
procedure Insert(index:integer;Item:TRecord);overload;
procedure Insert(index:integer;AppPath,Params,WorkDir,StartTime:string;Enabled:boolean);overload;
procedure Exchange(index1,index2:integer);
destructor Destroy; override;
end;
var
tsCaption:TStrings;
implementation
destructor TWorkList.Destroy;
var i:integer;
begin
for i:=Length(Fitems)-1 downto 0 do
FItems[i].Free;
end;
function TWorkList.GetItems(Index: integer):TRecord;
begin
if (index+1)>length(FItems) then exit;
Result:=Fitems[index];
end;
procedure TWorkList.SetItems(Index: integer; const Value: TRecord);
begin
if (index)>length(FItems) then exit;
FItems[index]:=Value;
end;
function TWorkList.Count:integer;
begin
Result:=Length(FItems);
end;
procedure TWorkList.Add(Item:TRecord);
begin
SetLength(FItems,Length(FItems)+1);
FItems[Length(FItems)-1]:=Item;
end;
procedure TWorkList.Add(AppPath,Params,WorkDir,StartTime:string;Enabled:boolean);
var Item:TRecord;
begin
item:=TRecord.Create;
Item.AppPath:=AppPath;
Item.Params:=Params;
Item.WorkDir:=WorkDir;
Item.StartTime:=StartTime;
item.Enabled:=Enabled;
Add(item);
//item.Free;
end;
procedure TWorkList.Clear;
var i:integer;
begin
for i:=Length(Fitems) downto 1 do
begin
SetLength(FItems,i-1);
end;
end;
procedure TWorkList.Delete(Index:integer);
var i:integer;
item:TRecord;
begin
if index=length(FItems) then exit;
item:=FItems[index];
if index<length(FItems)-1 then begin
For i:=index to Length(FItems)-1 do
FItems[i]:=Fitems[i+1];
end;
item.Free;
SetLength(FItems,Length(fItems)-1);
end;
procedure TWorkList.Insert(index:integer;Item:TRecord);
var i:integer;
begin
SetLength(FItems,Length(fItems)+1);
For i:=index to Length(FItems)-1 do
FItems[i+1]:=Fitems[i];
FItems[index]:=Item;
end;
procedure TWorkList.Insert(index:integer;AppPath,Params,WorkDir,StartTime:string;Enabled:boolean);
var i:integer;
item:TRecord;
begin
item:=TRecord.Create;
item.AppPath:=AppPath;
item.Params:=Params;
item.WorkDir:=WorkDir;
item.StartTime:=StartTime;
Item.Enabled:=Enabled;
SetLength(FItems,Length(fItems)+1);
For i:=index to Length(FItems)-1 do
FItems[i+1]:=Fitems[i];
FItems[index]:=Item;
end;
procedure TWorkList.Exchange(index1,index2:integer);
var i:integer;
Item:TRecord;
begin
if index1>length(FItems)-1 then exit;
if index2>length(FItems)-1 then exit;
if index1=index2 then exit;
item:=FItems[index1];
fItems[index1]:=FItems[index2];
FItems[index2]:=item;
end;
TankMan (2004-11-12 09:07:00) [23]>>Кто---то
У меня тоже раньше вставал такой вопрос, и мне сдесь помогли - дали примерчик класса, можно сказать типа TStringList только вместо массива строк - запись TRecord... Очень удобно получается.
Прийду домой - напишу пример...
Думкин (2004-11-12 06:17:00) [24]Почитай Бакнелла. Помогает.
ЮЮ (2004-11-12 05:17:00) [25]>Я типа буду первый в мире, кто это сделает и поделится со всеми ?
Ну если не хочешь пользоваться существующим и всеми используемыми TList
Кто---то (2004-11-12 05:06:00) [26]
> GuAV © (12.11.04 01:48) [1]
> TList
> TObjectList + Классы заместо Recordов
Посмотрел, но что-то не очень понял ... Посмотрю ещё.
> jack128 © (12.11.04 01:52) [2]
> Да. Нужно лишь написать соответсвующую оболочку.
Я типа буду первый в мире, кто это сделает и поделится со всеми ?
jack128 (2004-11-12 01:52:00) [27]GuAV © (12.11.04 1:48) [1]
Кто---то © (12.11.04 1:25)
Или можно ли как-нибудь работать с рекордами также удобно, как и со строками в StringList ?
Да. Нужно лишь написать соответсвующую оболочку.
GuAV (2004-11-12 01:48:00) [28]Кто---то © (12.11.04 1:25)
Или можно ли как-нибудь работать с рекордами также удобно, как и со строками в StringList ?
Нет.
Кто---то © (12.11.04 1:25)
Что можно посоветовать ?
TList
TObjectList + Классы заместо Recordов