Вниз
Скачать: CL | DM;

Потоки   Найти похожие ветки 

← →
Raven ©   (2001-12-29 09:15) [2]

Показываю...

unit TVThread;
interface
uses
Classes, comctrls, ADOdb, sysutils, Tools, windows,commctrl,Forms;
type
//описание класса
TTVThread = class(TThread)
private
{ Private declarations }
protected
FTable:TADOTable;
FVisibleFields:TStrArr;
FTV:TTreeView;
FPrimaryKey,FRelationKey:String;
FCaption:String;
FPB:TProgressBar;
FNode:TTreeNode;
procedure Execute; override;
procedure FillTreeVeiw;
procedure _AddNode;
procedure _GetNode;
public
constructor Create(var TV:TTreeView;ATable:TADOTable;PrimaryKey,
RelationKey:String;VisibleFields:TStrArr;ProgressBar:TProgressBar);
destructor Destroy;override;
end;
//
var FT:TTVThread;
implementation
//
uses Explorer,DBDataModule;
{ конструктор, создаёт экземпляр класса, описанного выше, передаёт таблицу БД дерево и ключи для таблице и видимые поля}
constructor TTVThread.Create(var TV:TTreeView;ATable:TADOTable;PrimaryKey,
RelationKey:String;VisibleFields:TStrArr;ProgressBar:TProgressBar);
begin
FreeOnTerminate:=true;
FTV:=TV;
FreeNodesData(FTV);
// очистка дерева
FTV.Items.Clear;
FTable:=ATable;
FTable.Open;
FRelationKey:=Relationkey;
FVisibleFields:=VisibleFields;
FPrimaryKey:=PrimaryKey;
FPB:=ProgressBar;
FPB.Max:=FTable.RecordCount;
FNode:=nil;
inherited Create(false);
end;
//EXECUTE
procedure TTVThread.Execute;
begin
FPB.Show;
FTable.First;
// заполнение дерева
FillTreeVeiw;
FPB.Hide;
end;
//EXECUTE
// получение нужного узла дерева
procedure TTVThread._GetNode;
var i :LongInt;
begin
i:=0;
While not Terminated and (i<=(FTV.Items.Count-1)) and (LongInt(FTV.Items[i].Data^)=FTable.FieldByName(FRelationKey).AsInteger) do
begin
if LongInt(FTV.Items[i].Data^)=FTable.FieldByName(FRelationKey).AsInteger then
FNode:=FTV.Items[i];
end;
end;
//добавление узла дерева
procedure TTVThread._AddNode;
begin
try
if FTable.FieldByName(FRelationKey).Value=0 then FNode:=FTV.Items.Add(nil,FCaption)
else
begin
_GetNode;
FNode:=FTV.Items.AddChild(FNode,FCaption);
end;
FNode.Data:=AllocMem(SizeOf(FTable.FieldByName(FPrimaryKey).AsInteger));
Integer(FNode.Data^):=FTable.FieldByName(FPrimaryKey).Value;
FPB.Position:=FPB.Position+1;
except
end;
end;

procedure TTVThread.FillTreeVeiw;
var i:LongInt;
j:Byte;
begin
try
for i:=0 to FTable.RecordCount-1 do
begin
if Terminated then Exit;
FCaption:="";
for j:=0 to high(FVisibleFields) do
FCaption:=FCaption+" "+FTable.FieldByName(FVisibleFields[j]).AsString;
Synchronize(_AddNode);
if not Terminated then FTable.Next;
end;
except
end;
end;
destructor TTVThread.Destroy;
begin
// try
FTable.Close;
{ except
end;}
inherited Destroy;
// MessageBox(Application.Handle,"



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.006 c
7-66384
Sergiu
2001-10-04 10:35
2002.01.21
Как задавить хинты в TTreeView???


1-66259
Quest
2001-12-29 09:44
2002.01.21
Пропадает каретка в режиме редактирования ячейки TStringGrid


1-66248
Leo^Sun
2002-01-01 04:19
2002.01.21
Tmemo


14-66352
wipr
2001-11-26 18:05
2002.01.21
Компиляция в Delphi5


7-66377
Sirgo
2001-10-07 13:51
2002.01.21
Температура процесора и системы




   Наверх