Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.05;
Скачать: CL | DM;

Вниз

Компонент TreeVeiw   Найти похожие ветки 

 
Finjy   (2008-08-29 09:44) [0]

Здравствуйте всем! У меня вот какая проблема:
Есть форма AdvancedSearchForm в ней я пользуюсь компонентами (например IBQParam) из MainFrame,
но с компонентом TreeView1 не получается ничего, вываливает ошибка (Acces Violation....).
Мне нужно получить номер уровня, выбранного в TreeView1 элемента но на строке
"k:=Integer(TreeView1.Selected.Data);" вываливает.
Кто-нить знает в чем дело и как исправить?

 
function TAdvancedSearchForm.BBB: Boolean;
var
 fhh: TMainFrame;
 k:integer;
begin
 fhh:=TMainFrame.Create(nil);
   try
     k:=Integer(TreeView1.Selected.Data);
    with  fhh.IBQParam do
    begin
      SQL.Clear;
      SQL.Add("select par_name from par where par_id in (select par_id from nmk_par where nmk_id in (select "+
      .................
      ...............................

end;


 
Сергей М. ©   (2008-08-29 10:16) [1]

Значит текущий выбранный элемент отсутствует, т.е. элемент не выбран.


 
Finjy   (2008-08-29 10:23) [2]

Как его выбрать?


 
Сергей М. ©   (2008-08-29 10:28) [3]

Почему бы это не сделать самому юзеру ?


 
MsGuns ©   (2008-08-29 11:31) [4]

Для того, чтобы обратиться к св-ву TTreeNode.Data, надо туда предварительно что-то засунуть (указатель на объект, структуру, переменную...)
Каким образом и что туда "засовывается" из приведенного кода не видно абсолютно

Св-во "уровень" (TTreeNode.Level) соответствует уровню вложения ноды относительно вершины дерева (корня) и никаким образом не зависит от содержимого его же поля Data


 
Finjy   (2008-08-29 11:40) [5]

В MainFrame все туда засовывается, в этой форме почти такой же запрос работает. Data - это ID справочника


 
MsGuns ©   (2008-08-29 11:46) [6]

Покажите код "засовывания"


 
Finjy   (2008-08-29 13:12) [7]

procedure TMainFrame.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
 with IBQList do begin
   Close;
   ParamByName("PARENT").AsInteger := Integer(TreeView1.Selected.Data);
   ParamByName("CUR_ONLY").AsInteger := 0;
   Open;                                                   // ioe?uou cai?in iiiaieeaoo?u
 end;
 DBGridWM1.SelectedField.Name := "NMK_NOTE";
 IBQParam.Open;
end;
это код, а это запрос
select distinct NMK_ID, NMK_NAME, NMK_NOTE, NMK_NOTUSED
from  GET_NMK_TREE(:PARENT, :CUR_ONLY)
left join  NMK
on NMK.NMK_CLASSIF_ID = GET_NMK_TREE.ID
where ((NMK_NOTE containing :Filter) or (NMK_NAME containing :Filter))
and (NMK_NOTUSED containing :USED)              
order by NMK_NOTE, NMK_NAME


 
Сергей М. ©   (2008-08-29 13:50) [8]


> В MainFrame все туда засовывается



> ParamByName("PARENT").AsInteger := Integer(TreeView1.Selected.
> Data);


Это не "засовывание", а "высовывание")

"Засовывание" - это
TreeView1.Selected.Data := то_что_надо_"засунуть";

Что-то не видать в твоем коде никакого "засовывания" ..


 
Finjy   (2008-08-29 14:23) [9]

Вот засовывание
procedure TMainFrame.LoadData(NMK_CLASSIF_TYPE: Integer);
 procedure RefreshTree( Lev: Integer );
 var
   j: Integer;
 begin
   for j := TreeView1.Items.Count - 1 downto 0 do begin  
     IBQTree.First;                                  
     repeat
       if ( Integer( TreeView1.Items.Item[j].Data ) = IBQTree.FieldByName("NMK_CLASSIF_PARENT").AsInteger ) and  
          ( Lev = IBQTree.FieldByName("NMK_CLASSIF_LEVEL").AsInteger ) then
         TreeView1.Items.AddChildObject( TreeView1.Items.Item[j], IBQTree.FieldByName("NMK_CLASSIF_NAME").AsString,
                                       Pointer( IBQTree.FieldByName("NMK_CLASSIF_ID").AsInteger) );
       IBQTree.Next;
     until IBQTree.Eof;
   end;
 end;


 
Сергей М. ©   (2008-08-29 15:13) [10]

Чудесно.

Но все это не имеет отношения к "вываливает ошибка (Acces Violation....)."
Про причины сказано в [1]


 
MsGuns ©   (2008-08-29 15:27) [11]

>Finjy   (29.08.08 14:23) [9]

У меня сильные сомнения, что этот самый   TreeView1.Items.AddChildObject хотя бы один раз выполнялся


 
Сергей М. ©   (2008-08-29 15:31) [12]


> сомнения, что этот самый   TreeView1.Items.AddChildObject
> хотя бы один раз выполнялся


А по барабану выполнился он или не выполнился.

AV, согласно утверждения автора, вываливается на строчке

k:=Integer(TreeView1.Selected.Data);

Если Selected = nil, то вот они и грабли, далеко ходить за ними не надо)


 
MsGuns ©   (2008-08-29 15:34) [13]

Похоже про существование отладчика автор даже не догадывается


 
Finjy   (2008-08-29 16:32) [14]

про отладчика слышал вроде - у меня в гараже такой стоит.
на счет Selected, то он действительно nil  но вот как его сделать не nil?
форма AdvancedSearchForm - не модальная, мне нужно чтобы после вызова  этой формы, любое дествие с Treewiev на MainFrame - e отражалась в виде показа выбранного уровня на  AdvancedSearchForm, вот и все, а как  загрузка в дерево происходит это не важно.


 
aaaaa   (2008-08-29 16:37) [15]

а где ты вызываешь function TAdvancedSearchForm.BBB: Boolean;?


 
Finjy   (2008-08-29 16:46) [16]

В ShowForm, то есть она при создании окна работает


 
aaaaa   (2008-08-29 16:51) [17]


> Finjy   (29.08.08 16:46) [16]

сделай так:
function TAdvancedSearchForm.BBB: Boolean;
var
fhh: TMainFrame;
k:integer;
begin
 TreeView1.Items.Item[0].Selected := True;
fhh:=TMainFrame.Create(nil);
  try
    k:=Integer(TreeView1.Selected.Data)
.................


 
stas ©   (2008-08-29 16:55) [18]

if TreeView1.Selected<> nil and TreeView1.Selected.Data<>nil then
begin
 with  fhh.IBQParam do
   begin
     SQL.Clear;
     SQL.Add("select par_name from par where par_id in (select par_id from nmk_par where nmk_id in (select "+....
....
end;


 
Finjy   (2008-08-29 16:55) [19]

Спасибо большое! Попробую, но теперь уже в понедельник!



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

Текущий архив: 2008.10.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
2-1219304173
начинающий
2008-08-21 11:36
2008.10.05
как выбрать данные?


15-1218265588
Пробегал2....
2008-08-09 11:06
2008.10.05
Учебные курсы от intuit.ru


8-1185268687
s7r
2007-07-24 13:18
2008.10.05
Странная проблема с GDI+


15-1218525210
oldman
2008-08-12 11:13
2008.10.05
Последовательность действий при заправке кардриджа (лазер)


2-1219251862
demon
2008-08-20 21:04
2008.10.05
Контрольные суммы