Вниз
Скачать: 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 вся ветка

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



Память: 0.49 MB
Время: 0.012 c
15-1218831455
_koha
2008-08-16 00:17
2008.10.05
Народ как достать RAD STUDIO


1-1199488934
Vopros123123
2008-01-05 02:22
2008.10.05
Как снять флажок из Delphi у компонента HTML "checkbox"?


15-1218377553
Урсулапов
2008-08-10 18:12
2008.10.05
А почему пост про день рождения 9 августа не было?


11-1194282600
Elec3C
2007-11-05 20:10
2008.10.05
Проблема с контролами


1-1198856107
Max
2007-12-28 18:35
2008.10.05
Подсказка...




   Наверх