Форум: "Начинающим";
Текущий архив: 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