Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TreeView и Data 
V
    Опции темы
Nic442
Дата 27.4.2006, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



Вопрос такой у меня есть treeview и memo и фунукция, которая ищет определенные слова и запихивает их в treeview. Как сделать, чтобы при нажатии на пункт treeview но выделял слово. Позиция начала и конца выделения известны. Я думал их занести в рекорд.

Код

type
  PositRec = ^TMyRec;
  TMyRec  = record
     begin_pos: array of integer;
     end_pos: array of integer;
  end;

Код

Функция
var
 MyRecPtr: PositRec;
 start_pos: integer;
 ....
begin
...
SetLength(MyRecPtr^.end_pos, High(MyRecPtr^.end_pos)+1);
MyRecPtr^.end_pos[High(MyRecPtr^.end_pos)]:= start_pos;
Index_Form.spiski.Items.AddChildObject(Index_Form.spiski.Items[0].Item[3].Item[id],'bbh '+name_txt,MyRecPtr);



Код

procedure TIndex_Form.spiskiDblClick(Sender: TObject);
begin
  text_GL.SelStart:=PositRec(spiski.Selected.Data)^.Begin_pos[не знаю что];
  text_GL.SelLength:=
PositRec(spiski.Selected.Data)^.Begin_pos[1]-PositRec(spiski.Selected.Data)^.end_pos[не знаю что];

end;


И главный вопрос. Как при щелчке на treeview определить куда ссылается ? на какой индекс??

TreeView имеет вложенность.
 smile  
PM MAIL   Вверх
_hunter
Дата 27.4.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



у TTreeNode есть свойство Data пиши в него свою запись. у дерева есть Selections. бери первый из них (это будет нода) читай ее  Data -- получиш искомую запись 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Nic442
Дата 27.4.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



Можно пример с массивом. Я сделал без массива но он выделял только последнее слово
Код

type    
  PositRec = ^TMyRec;    
  TMyRec  = record    
     begin_pos:  integer;    
     end_pos: integer;    
  end;


А с массивом какая-то фигня происходит. 
Я должен создавать 2 массива, а в Data сохранять указатель на элементы этих двух массивов. Как это сделать? 
PM MAIL   Вверх
_hunter
Дата 27.4.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



в смысле? с каким массивом (да и зачем?)? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Nic442
Дата 27.4.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



В Data нельзя же записывать данные, только указатели на данные - я так понял. Следовательно, начало и конец выделения должны храниться в двух массивах, на элементы которых должно ссылаться Data. 
PM MAIL   Вверх
_hunter
Дата 27.4.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



зачем массив?
создавай структуру Create' ом (или как-там-у-вас-) и полученный указатель и засовывай в Data указатель (только про удаление потом не забудь) 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 27.4.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Зачем? Чем тебе Data не массив? 
PM MAIL   Вверх
Nic442
Дата 27.4.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



Сделал!!! заработало :-) . Когда я вчера сделал я стормозил и не впихнул в цикл New(MyRecPtr); поэтому выдавало только одно слово, но было поздно и бошка не сработала.

Теперь возник вопрос. Я создаю в цикле New(MyRecPtr); как мне его очищать???
Вот так?
Код

FreeMemory(MyRecPtr);

 
PM MAIL   Вверх
_hunter
Дата 27.4.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



пройтись по всем итемам дерева (это линейный массив) и удалить все указатели из Data 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 27.4.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Dispose(MyRecPtr); 
PM MAIL   Вверх
Nic442
Дата 27.4.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



Так мне так делать???

Код

pamyt:=spiski.Items.Count-1;
 for pamyt:=pamyt downto 0 do  spiski.Items[pamyt].Data:=nil;


или достаточно один раз написать Dispose(MyRecPtr); 
PM MAIL   Вверх
Snowy
Дата 27.4.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

  for pamyt:=pamyt downto 0 do  begin
    Dispose(TMyRec(spiski.Items[pamyt].Data));
    spiski.Items[pamyt].Data:=nil;
  end;
 
PM MAIL   Вверх
Nic442
Дата 27.4.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



А при закрытии формы указатели и Data автоматически очищаюся? 

Код

for pamyt:=pamyt downto 0 do  begin    
    Dispose(TMyRec(spiski.Items[pamyt].Data));    
    spiski.Items[pamyt].Data:=nil;    
  end;


А то этот код на OnClose или OnDestroy выдаёт ошибку. А при обновлении работает. 
PM MAIL   Вверх
_hunter
Дата 27.4.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



что OnClose что OnDestroy происходят до вызова деструкторов => само удаляться ничег оне должно... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Nic442
Дата 27.4.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 5.4.2006
Где: Советский Союз

Репутация: нет
Всего: нет



Так куда тогда вешать очистку памяти? 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0752 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.