Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Основная";
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
1-66261
Smile
2002-01-01 20:51
2002.01.21
Изменение вида кнопки


3-66182
Polevi
2001-12-14 12:03
2002.01.21
Отзовитесь, кто нибудь :))


4-66406
hn
2001-11-14 19:13
2002.01.21
ссылка на Edit, как получить текст, если он в веден в него


14-66341
Oleg Gashev
2001-11-24 17:35
2002.01.21
На Ваш Суд


3-66187
Atrem
2001-12-16 16:08
2002.01.21
Что за ошибка и как ее исправить ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский