TreeView странность.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: TreeView странность.

Сообщение vitaly_l » 03.09.2017 16:53:40

zub писал(а):Какие сложности с пониманием этого?

А так Вы значит правы, а я неправ? И это значит, что указатель на адрес в памяти - может самопроизвольно меняться, в зависимости от времени выполнения функции и только QueueAsyncCall или задержка на 100 мс - лечат от этого странного нонсенса? Верно?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TreeView странность.

Сообщение zub » 03.09.2017 17:07:21

Ты издеваешся? QueueAsyncCall совсем для другого. "Абстрактный" пример с кнопкой посмотри, проще объяснить невозможно
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TreeView странность.

Сообщение vitaly_l » 03.09.2017 17:11:26

zub писал(а):Ты издеваешся?

Попробуйте в изначальном варианте заменить проверку вот на такую и убрать QueueAsyncCall и самописную Clear(), вот так:
Код: Выделить всё
if Tree1.Items.Item[i].Data^ = FieldByName(idParent).asInteger then ...

Будет правильно заполнять и работать или всё таки рухнет?
Последний раз редактировалось vitaly_l 03.09.2017 17:40:30, всего редактировалось 2 раз(а).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TreeView странность.

Сообщение zub » 03.09.2017 17:29:58

>> и работать без QueueAsyncCall?
оно сегодня может работать, а завтра неработать. Нельзя удалять чтото а потом к этому чемунибудь обращаться.

>>опробуйте в изначальном варианте заменить
Чтобы окружающие не брезговали пробовать надо 1 - без ненужных зависимостей, 2 - не галемотья которой является if Tree1.Items.Item[i].Data^ =
Давно пора это запомнить. Исходный пример я не рассматриваю потому что он не проходит уже через 1.
Не компилируя и не запуская я вижу в нем проблему с отсутствием QueueAsyncCall. Это не отменяет наличие там других проблем, но мне жаль своего времени пытаться вникать в них "в уме" без компиляции и запуска
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TreeView странность.

Сообщение wofs » 03.09.2017 17:39:02

zub писал(а):Чтобы окружающие не брезговали пробовать надо 1 - без ненужных зависимостей,

Не брезгуйте, давно все перезалито.
viewtopic.php?f=5&t=25392&start=30#p125129
Если только зависимость от FPC и пары стандартных визуальных компонент вас не смущает.
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: TreeView странность.

Сообщение vitaly_l » 03.09.2017 17:43:15

wofs писал(а):Не брезгуйте, давно все перезалито.

У вас не равнозначный пример т.к. в примере вы используете глобальную переменную, а у SQL она локальная и поэтому сегодня локальный адрес работает, а завтра нет. В то время как глобальный в примере - работает всегда.

Ещё вот так оно 100% правильно заполняет, без QueueAsyncCall:
Код: Выделить всё
if integer(Tree1.Items.Item[i].Data) = FieldByName(idParent).asInteger then ...

проверял на
Код: Выделить всё
if integer(Items.Item[iTree].Data) = integer(dbArr[i + 1, 1]) then ...

И дело 100% не в QueueAsyncCall.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TreeView странность.

Сообщение wofs » 03.09.2017 17:47:12

vitaly_l писал(а):проверял на

Код: Выделить всё
if integer(Items.Item[iTree].Data) = integer(dbArr[i + 1, 1]) then ...

Вы так и не поняли проблему... У меня и так все заполнялось... до ваших советов...

Добавлено спустя 1 минуту 26 секунд:
Встаньте на ветку дерева и отредактируйте ее название...

Добавлено спустя 1 минуту 36 секунд:
vitaly_l писал(а):У вас не равнозначный пример т.к. в примере вы используете глобальную переменную, а у SQL она локальная и поэтому сегодня локальный адрес работает, а завтра нет. В то время как глобальный в примере - работает всегда.

И опять - вы не туда смотрите.
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: TreeView странность.

Сообщение vitaly_l » 03.09.2017 17:56:51

wofs писал(а):Вы так и не поняли проблему... У меня и так все заполнялось...

Ну так уберите то что закомментировано из кода и глюк пропадёт, а правильное переименование останется:
Код: Выделить всё
procedure TForm1.EditItemName(Node: TTreeNode; var S: ansistring);
// редактирование узла
var
  i: integer;
begin
  log(Format('Номер изменяемого узла = %d', [integer(Node.Data)]));
  dbArr[integer(Node.Data - 1), 2] := S;

  //FillTree();
  //Application.QueueAsyncCall(@AsyncFillTree,0); // предложение zub
end;   

Вам вообще ненужно в EditItemName вызывать FillTree или FillTree через QueueAsyncCall. Равно как и Clear() там было лишним.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TreeView странность.

Сообщение zub » 03.09.2017 18:03:00

>>Вам вообще ненужно в EditItemName вызывать FillTree или FillTree через QueueAsyncCall. Равно как и Clear() там было лишним.
Да и вообще писать эту программу не надо))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TreeView странность.

Сообщение wofs » 03.09.2017 18:08:27

vitaly_l писал(а):Ну так уберите то что закомментировано из кода и глюк пропадёт, а правильное переименование останется:

А если что-то стряслось на стороне БД и она не записала изменения?
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: TreeView странность.

Сообщение vitaly_l » 03.09.2017 18:11:27

wofs писал(а):А если что-то стряслось на стороне БД и она не записала изменения?

Я надеюсь что работа БД написана программистами надёжнее чем написанные Вами вызов FillTree или Clear.
Мне кажется Вам нужно не о работе БД беспокоиться.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TreeView странность.

Сообщение wofs » 03.09.2017 18:28:23

Ладно, закрыли тему.
Аватара пользователя
wofs
постоялец
 
Сообщения: 379
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: TreeView странность.

Сообщение vitaly_l » 03.09.2017 19:32:39

wofs писал(а):Ладно, закрыли тему.

Вот здесь закомментируйте FillTree();
Код: Выделить всё
procedure TForm1.EditItemName(Node: TTreeNode; var S: ansistring);
// редактирование узла
var
  i: integer;
begin
  log(Format('Номер изменяемого узла = %d', [integer(Node.Data)]));
  dbArr[integer(Node.Data - 1), 2] := S;

  //FillTree();
  //Application.QueueAsyncCall(@AsyncFillTree,0); // предложение zub
end; 


А вот здесь вставьте без QueueAsyncCall и всё будет работать
Код: Выделить всё
procedure TForm1.Tree1EditingEnd(Sender: TObject; Node: TTreeNode; Cancel: Boolean);
begin
  FillTree();
end;     

EditingEnd - это одна из стандартных функций Tree1
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: TreeView странность.

Сообщение olegy123 » 03.09.2017 19:36:27

wofs писал(а):
vitaly_l писал(а):даже если потребуется это сочетание написать 1000 раз подряд.

И освобождать
Код: Выделить всё
Dispose(ptrToInt2);

тоже после каждого использования?
To deallocate the memory, you use the Dispose command

Никто не запрещает преобределить TTreeNode и в
Код: Выделить всё
TMyTreeNode.Destroy()
begin
Dispose(Data);
inherited Destroy();
end;


вообще можно свой визуальный компонент написать со своими плюшечками.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: TreeView странность.

Сообщение pupsik » 03.09.2017 20:43:43

вообще можно свой визуальный компонент написать со своими плюшечками.
как бы (правки с форума надо добавить). Если не считать TVirtualDBTree (куда интереснее.. хотя "чистый" VirtualTree куда лучше).

wofs возможно кажется но: вы, малость, не валидно заполняете. Т.е. хм... "рубите топором верхушку, а не низ дерева..." .Вроде как есть темы в подмогу на вопросы.
Плюс вики никто не отменял.

п.с.
Но: если залезли в указатели то... работайте по правилам. Хотя я считаю что не нужны они в данной задаче.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Alex2013, Google [Bot], Yandex [Bot] и гости: 26

Рейтинг@Mail.ru