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

Вниз

Компонент 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.007 c
2-1219849223
Terasbetoni
2008-08-27 19:00
2008.10.05
Вопрос о создании компонента


2-1219660385
Asker
2008-08-25 14:33
2008.10.05
Поиск в строке подстроки по маске


15-1218210229
Eraser
2008-08-08 19:43
2008.10.05
Как подарить лицензию?


2-1219855868
fokas
2008-08-27 20:51
2008.10.05
Смена FormStyle в run-time пересоздаёт форму


2-1219232190
AndreyBg
2008-08-20 15:36
2008.10.05
Проблема с изменением св-в компонент в реалтайм.





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