Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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;
//--- &#224;&#240;&#242;&#232;&#241;&#242;
if AnsiUpperCase(inif.ReadString("Main","Tree","Artist")) = AnsiUpperCase("Artist") then
 begin
  //-- &#226;&#241;&#229; &#231;&#224;&#239;&#232;&#241;&#232;
  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 := "&#207;&#238;&#241;&#242;&#238;&#240;&#238;&#229;&#237;&#232;&#229; &#228;&#229;&#240;&#224;&#226;&#224;...";
    //--- &#238;&#241;&#237;&#238;&#226;&#237;&#238;&#233; &#246;&#232;&#234;&#235; &#239;&#238;&#241;&#242;&#238;&#229;&#237;&#232;&#255; &#228;&#229;&#240;&#229;&#226;&#224;
    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;
      //-- &#238;&#239;&#232;&#241;&#234; &#241;&#238;&#238;&#242;&#226;&#229;&#242;&#241;&#242;&#226;&#232;&#233; &#226; &#238;&#241;&#237;&#238;&#226;&#237;&#238;&#233; &#242;&#224;&#225;&#235;&#232;&#246;&#229;
      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;
      //--- &#234;&#238;&#237;&#229;&#246; &#239;&#238;&#232;&#241;&#234;&#224; &#241;&#238;&#238;&#241;&#242;&#226;&#229;&#242;&#226;&#232;&#233;
      form1.Table1.FindNext;
     end;
    //=== &#234;&#238;&#237;&#229;&#246; &#238;&#241;&#237;&#238;&#226;&#237;&#238;&#227;&#238; &#246;&#232;&#234;&#235;&#224;
    form1.Gauge1.Visible := false;
    form1.StatusBar1.SimpleText := "";
    form1.Table1.Active := false;
   end;
  //-- &#234;&#238;&#237;&#229;&#246; &#226;&#241;&#229; &#231;&#224;&#239;&#232;&#241;&#232;
  //--- &#202;&#238;&#236;&#239;&#238;&#231;&#232;&#246;&#232;&#255;

  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 := "&#207;&#238;&#241;&#242;&#238;&#240;&#238;&#229;&#237;&#232;&#229; &#228;&#229;&#240;&#224;&#226;&#224;...";
    //--- &#238;&#241;&#237;&#238;&#226;&#237;&#238;&#233; &#246;&#232;&#234;&#235; &#239;&#238;&#241;&#242;&#238;&#229;&#237;&#232;&#255; &#228;&#229;&#240;&#229;&#226;&#224;
    for i := 1 to form1.Table1.RecordCount do
     begin
      Application.ProcessMessages;

     end;
    //=== &#234;&#238;&#237;&#229;&#246; &#238;&#241;&#237;&#238;&#226;&#237;&#238;&#227;&#238; &#246;&#232;&#234;&#235;&#224;
    form1.Gauge1.Visible := false;
    form1.StatusBar1.SimpleText := "";
    form1.Table1.Active := false;
   end;
  //---- &#234;&#238;&#237;&#229;&#246; &#234;&#238;&#236;&#239;&#238;&#231;&#232;&#246;&#232;&#255;

 end;
//--- &#234;&#238;&#237;&#229;&#246; &#224;&#240;&#242;&#232;&#241;&#242;

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
3-1196411574
keymaster
2007-11-30 11:32
2008.05.04
Delphi+Oracle. Проблема с table of...


2-1207470775
malyar
2008-04-06 12:32
2008.05.04
sql запросы без sql сервера


2-1207590779
иван8511
2008-04-07 21:52
2008.05.04
Перемещение курсора в компоненте Edit


15-1206016036
@!!ex
2008-03-20 15:27
2008.05.04
Добавить в res файл полноцветную иконку.


2-1207365197
Крылатый
2008-04-05 07:13
2008.05.04
Доступ к локальной папке





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский