Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вставить элемент внутрь массива рекордов ? [D7]


Страницы:   1 2

Кто---то ©   (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ов


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо