Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
ВнизНедопонимания с TreeView Найти похожие ветки
← →
delphicoder (2008-04-05 16:54) [0]Доброго времени суток всем...
Чегото я тут задумался.. как мне взять второе родительского значение.. items[1] тобишь... вроде правильно написал.. не получилось.. на первом items[0] выполняет то что мне надо.. а второй долбит как хочет... вобщем вот..
//--- артист
if AnsiUpperCase(inif.ReadString("Main","Tree","Artist")) = AnsiUpperCase("Artist") then
begin
//-- все записи
if form1.RadioButton1.Checked then
begin
if form1.Table1.Active then
form1.Table1.Active := false;
form1.Table1.DatabaseName := ExtractFilePath(Application.Exename)+"Data";
form1.Table1.TableName := "K_m_data03.DB";
if form1.Table1.Filtered then
form1.Table1.Filtered := false;
form1.Table1.Filter := "";
form1.Table1.Active := true;
form1.Table1.FindFirst;
form1.Gauge1.MinValue := 0;
form1.Gauge1.MaxValue := form1.Table1.RecordCount;
form1.Gauge1.Progress := 0;
form1.Gauge1.Visible := true;
form1.StatusBar1.SimpleText := "Построение дерева...";
//--- основной цикл постоения дерева
for i := 1 to form1.Table1.RecordCount do
begin
Application.ProcessMessages;
form1.Gauge1.Progress := form1.Gauge1.Progress+1;
myNode := form1.TreeView1.Items.Add(nil,form1.Table1.fieldbyname("Artist").AsString);
id := form1.Table1.fieldbyname("Id").AsInteger;
//-- список соответствий в основной таблице
if form1.Table2.Active then
form1.Table2.Active := false;
form1.Table2.DatabaseName := ExtractFilePath(Application.Exename)+"Data";
form1.Table2.TableName := "K_m_data01.DB";
if form1.Table2.Filtered then
form1.Table2.Filtered := false;
form1.Table2.Filter := "";
form1.Table2.Active := true;
form1.Table2.FindFirst;
for j := 1 to form1.Table2.RecordCount do
begin
Application.ProcessMessages;
if form1.Table2.FieldByName("Artist").AsInteger = Id then
begin
myGod := TTable.Create(nil);
myGod.DatabaseName := ExtractFilePath(Application.Exename)+"Data";
myGod.TableName := "K_m_data05.DB";
myGod.Active := true;
myGod.Filter := "Id = "+form1.Table2.FieldByName("Year").AsString;
myGod.Filtered := true;
myGod.FindFirst;
flag_ := true;
Вот тут я смотрю основного родителя на наличие у него детей
if form1.TreeView1.Items[i-1].Count > 0 then
если они есть тогда ищу повторы
for k := 0 to form1.TreeView1.Items[i-1].Count-1 do
if AnsiUpperCase(Trim(form1.TreeView1.Items[i-1].Item[k].Text)) = AnsiUpperCase(Trim(myGod.fieldbyname("Year").AsString)) then
begin
flag_ := false;
break;
end;
если повторов нет, то родителю добавляю ребенка, если повтор то ничего не добавляют
if flag_ then
myNode2 := form1.TreeView1.Items.AddChild(myNode,myGod.fieldbyname("Year").AsString);
myGod.Filtered := false;
myGod.Filter := "";
myGod.Active := false;
myGod.TableName := "K_m_data04.DB";
myGod.Active := true;
if trim(form1.Table2.fieldbyname("Album").AsString) <> "" then
begin
myGod.Filter := "Id = "+form1.Table2.fieldbyname("Album").AsString;
myGod.Filtered := true;
form1.TreeView1.Items.AddChild(myNode2,myGod.fieldbyname("Album").AsString);
myGod.Filtered := false;
myGod.Filter := "";
end;
myGod.Free;
end;
form1.Table2.FindNext;
end;
form1.Table2.Active := false;
//--- конец поиска соответсвий
form1.Table1.FindNext;
end;
//=== конец основного цикла
form1.Gauge1.Visible := false;
form1.StatusBar1.SimpleText := "";
end;
//-- конец все записи
end;
//--- конец артист
form1.Table1.Active := false;
Вот...
Собственно по факту получаю.. что проверка на соответстия работает только для первого родителя... т.е. у первой записи в дереве идет
апина - 2000 - бла бла бла
а у второй уже получается
варум - 2004 - бла бла бла
- 2004 -
- 2004
и так далее...
получается что он не переходит почемуто на вторую родительскуя запись в дереве.. хотя я фиг знает... я ж пишу
for k := 0 to form1.TreeView1.Items[i-1].Count-1 do
if AnsiUpperCase(Trim(form1.TreeView1.Items[i-1].Item[k].Text)) = AnsiUpperCase(Trim(myGod.fieldbyname("Year").AsString)) then
т.е. в первом случае TreeView1.Items[i-1].Count-1 получается TreeView1.Items[0].Count т.е. апина
а во втором случае TreeView1.Items[1].Count т.е. варум...
или я чета не правильно мыслю?
Подскажите пожалуйста.. горю =(
Зарание спасибо
← →
delphicoder (2008-04-05 17:04) [1]Все, разобрался )
if myNode.Count > 0 then
for k := 0 to myNode.Count-1 do
if AnsiUpperCase(Trim(myNode.Item[k].Text)) = AnsiUpperCase(Trim(myGod.fieldbyname("Year").AsString)) then
begin
flag_ := false;
break;
end;
А вот всеж интересно... а если не использовать переменую myNode, почему не перебиралась?
Проде по смыслу правильно было...
← →
VirEx © (2008-04-05 21:27) [2]Большой совет, хотя наверно глупый совет но всёже:
form1.Table1.TableName := "K_m_data03.DB";
if form1.Table1.Filtered then
form1.Table1.Filtered := false;
form1.Table1.Filter := "";
form1.Table1.Active := true;
form1.Table1.FindFirst;
form1.Gauge1.MinValue := 0;
form1.Gauge1.MaxValue := form1.Table1.RecordCount;
form1.Gauge1.Progress := 0;
form1.Gauge1.Visible := true;
это очень плохо, постарайся логически выделить такие операции в отдельные куски, оформи это в виде функций и процедур, и вызывай одной строкой:
PlaySound()
SortSound(sArtist,...)
и т.д.
иначе, если тебе нужно будет чтонибудь изменить, например имя формы - тебе придется штудировать весь исходник чтобы менять, притом не факт что после этого всё будет работать нормально.
← →
{RASkov} © (2008-04-05 21:32) [3]> [2] VirEx © (05.04.08 21:27)
Во первых автору нужно подружится с оператором with,
во вторых... жаль не видно заголовков процедур, но всеж во вторых наверняка автор не знает про self
в третьих - я код не смотрел, но почему-то уверен, что там есть и в четвертых и в пятых и т.д. и т.п. :)
← →
delphicoder (2008-04-06 02:48) [4]))
Угу.. знаю я про with
но дружится с ним чета не хочется... ) Я конечно понимаю что использования with целесообразней.. но всеж )
Угу.. и про self знаю ... а кстате... в данном случае это к чему конкретно было сказано? )
Ну... может и есть в третьих и в четвертых... и тд и тп ) кто знает..
← →
{RASkov} © (2008-04-06 10:50) [5]> [4] delphicoder (06.04.08 02:48)
> в данном случае это к чему конкретно было сказано?
то что приведено в [0] - код, покажи заголовок данной процедуры(метода)...
И если ето метод формы, то тут ты и попал :)
← →
delphicoder (2008-04-06 13:23) [6]
> {RASkov}
чета мне интеоресно стало )) щас выложу всю процедуру... кстате, я бы не сказал что я попал.. мне наоборот позновательно будет )
procedure TForm1.SpeedButton10Click(Sender: TObject);
var inif : TInifile;
i,j,Id,k : integer;
myGod : TTable;
myNode,myNode2 : TTreeNode;
flag_ : boolean;
begin
inif := TInifile.Create(ExtractFilePath(Application.ExeName)+"Katag.ini");
form1.TreeView1.Items.Clear;
form1.CheckListBox1.Items.Clear;
form1.ListBox2.Items.Clear;
form1.GroupBox2.Visible := false;
//--- àðòèñò
if AnsiUpperCase(inif.ReadString("Main","Tree","Artist")) = AnsiUpperCase("Artist") then
begin
//-- âñå çàïèñè
if form1.RadioButton1.Checked then
begin
if form1.Table1.Active then
form1.Table1.Active := false;
form1.Table1.DatabaseName := ExtractFilePath(Application.Exename)+"Data";
form1.Table1.TableName := "K_m_data03.DB";
if form1.Table1.Filtered then
form1.Table1.Filtered := false;
form1.Table1.Filter := "";
form1.Table1.Active := true;
form1.Table1.FindFirst;
form1.Gauge1.MinValue := 0;
form1.Gauge1.MaxValue := form1.Table1.RecordCount;
form1.Gauge1.Progress := 0;
form1.Gauge1.Visible := true;
form1.StatusBar1.SimpleText := "Ïîñòîðîåíèå äåðàâà...";
//--- îñíîâíîé öèêë ïîñòîåíèÿ äåðåâà
for i := 1 to form1.Table1.RecordCount do
begin
Application.ProcessMessages;
form1.Gauge1.Progress := form1.Gauge1.Progress+1;
myNode := form1.TreeView1.Items.Add(nil,form1.Table1.fieldbyname("Artist").AsString);
id := form1.Table1.fieldbyname("Id").AsInteger;
//-- îïèñê ñîîòâåòñòâèé â îñíîâíîé òàáëèöå
if form1.Table2.Active then
form1.Table2.Active := false;
form1.Table2.DatabaseName := ExtractFilePath(Application.Exename)+"Data";
form1.Table2.TableName := "K_m_data01.DB";
if form1.Table2.Filtered then
form1.Table2.Filtered := false;
form1.Table2.Filter := "";
form1.Table2.Active := true;
form1.Table2.FindFirst;
for j := 1 to form1.Table2.RecordCount do
begin
Application.ProcessMessages;
if form1.Table2.FieldByName("Artist").AsInteger = Id then
begin
myGod := TTable.Create(nil);
myGod.DatabaseName := ExtractFilePath(Application.Exename)+"Data";
myGod.TableName := "K_m_data05.DB";
myGod.Active := true;
myGod.Filter := "Id = "+form1.Table2.FieldByName("Year").AsString;
myGod.Filtered := true;
myGod.FindFirst;
flag_ := true;
if myNode.Count > 0 then
for k := 0 to myNode.Count-1 do
if AnsiUpperCase(Trim(myNode.Item[k].Text)) = AnsiUpperCase(Trim(myGod.fieldbyname("Year").AsString)) then
begin
flag_ := false;
break;
end;
if flag_ then
myNode2 := form1.TreeView1.Items.AddChild(myNode,myGod.fieldbyname("Year").AsString);
myGod.Filtered := false;
myGod.Filter := "";
myGod.Active := false;
myGod.TableName := "K_m_data04.DB";
myGod.Active := true;
if trim(form1.Table2.fieldbyname("Album").AsString) <> "" then
begin
myGod.Filter := "Id = "+form1.Table2.fieldbyname("Album").AsString;
myGod.Filtered := true;
flag_ := true;
if myNode2.Count > 0 then
for k := 0 to myNode2.Count-1 do
if AnsiUpperCase(Trim(myNode2.Item[k].Text)) = AnsiUpperCase(Trim(myGod.fieldbyname("Album").AsString)) then
begin
flag_ := false;
break;
end;
if flag_ then
form1.TreeView1.Items.AddChild(myNode2,myGod.fieldbyname("Album").AsString);
myGod.Filtered := false;
myGod.Filter := "";
end;
myGod.Free;
end;
form1.Table2.FindNext;
end;
form1.Table2.Active := false;
//--- êîíåö ïîèñêà ñîîñòâåòâèé
form1.Table1.FindNext;
end;
//=== êîíåö îñíîâíîãî öèêëà
form1.Gauge1.Visible := false;
form1.StatusBar1.SimpleText := "";
form1.Table1.Active := false;
end;
//-- êîíåö âñå çàïèñè
//--- Êîìïîçèöèÿ
if form1.RadioButton2.Checked then
begin
if form1.Table1.Active then
form1.Table1.Active := false;
form1.Table1.DatabaseName := ExtractFilePath(Application.Exename)+"Data";
form1.Table1.TableName := "K_m_data01.DB";
if form1.Table1.Filtered then
form1.Table1.Filtered := false;
form1.Table1.Filter := "";
form1.Table1.Active := true;
form1.Table1.FindFirst;
form1.Gauge1.MinValue := 0;
form1.Gauge1.MaxValue := form1.Table1.RecordCount;
form1.Gauge1.Progress := 0;
form1.Gauge1.Visible := true;
form1.StatusBar1.SimpleText := "Ïîñòîðîåíèå äåðàâà...";
//--- îñíîâíîé öèêë ïîñòîåíèÿ äåðåâà
for i := 1 to form1.Table1.RecordCount do
begin
Application.ProcessMessages;
end;
//=== êîíåö îñíîâíîãî öèêëà
form1.Gauge1.Visible := false;
form1.StatusBar1.SimpleText := "";
form1.Table1.Active := false;
end;
//---- êîíåö êîìïîçèöèÿ
end;
//--- êîíåö àðòèñò
inif.Free;
end;
← →
{RASkov} © (2008-04-06 13:30) [7]> [6] delphicoder (06.04.08 13:23)
> кстате, я бы не сказал что я попал..
Попал-попал :)
У тебя это метод класса TForm1.... переменная Form1 99% типа TForm1
Так если ты говоришь:
> [4] delphicoder (06.04.08 02:48)
> Угу.. и про self знаю ...
то скорее всего - наврал :) ...нагло)
← →
Ega23 © (2008-04-06 14:05) [8]смотрел текст. Не понял, а накой ляд нужно myGod?
← →
Anatoly Podgoretsky © (2008-04-06 14:14) [9]Ну куда в наше время без персонального, личного бога.
← →
{RASkov} © (2008-04-06 14:20) [10]> [8] Ega23 © (06.04.08 14:05)
А там акромя "персонального бога" еще чего полно ненужного совсем...
У меня все "смелости нехватает прочитать код", небось вообще в три строчки можно всю эту писанину уложить.... как обычно :)
← →
Ega23 © (2008-04-06 14:50) [11]
> Ну куда в наше время без персонального, личного бога.
Жжош, дядя Толя! :)
← →
Anatoly Podgoretsky © (2008-04-06 15:27) [12]> Ega23 (06.04.2008 14:50:11) [11]
YourGod
← →
delphicoder (2008-04-07 05:18) [13])))))
Да нет... бог тут не причем ))) Просто получилось что так оно написолось..
На самом деле это "мойГод" от слова Год.. имхо дата, тобишь например 1999 1998 2000 от рождения Иисуха Христа ) Просто я потом уже когда в думался в смысл.. как оно читается... тогда улыбнуло... но лень было переделывать )
> Ega23 © (06.04.08 14:05) [8]
> смотрел текст. Не понял, а накой ляд нужно myGod?
Это третья таблица "K_m_data05.DB", т.е. там по смылу получается активна одна таблица с нее идет считывание.. потом идет анализ второй таблицы... а "мой бог" работает с третье таблицыей, вытаскивая из нее нужное, а потом с четвертой... в общем чтото типо этого _))
> {RASkov} © (06.04.08 13:30) [7]
> > [6] delphicoder (06.04.08 13:23)
> > кстате, я бы не сказал что я попал..
>
> Попал-попал :)
> У тебя это метод класса TForm1.... переменная Form1 99%
> типа TForm1
> Так если ты говоришь:
>
> > [4] delphicoder (06.04.08 02:48)
> > Угу.. и про self знаю ...
>
> то скорее всего - наврал :) ...нагло)
Да не.. впринципи не врал ... иногда юзал... =)
А в данном случае, как применялся бы self? ) Любопытно ) Позновательно )
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.005 c