![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Shouldercannon |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.8.2010 Репутация: нет Всего: нет |
Доброго времени суток!
Пытаюсь реализовать работу с вкладками TabControl
Нашёл один недостаток. Если пересоздать список пользователей в ListView и кликать по этим записям, то в TabControl появляться дубликаты уже имеющихся/открытых вкладок. Тут
отладчик показывает одинаковые данные до обновления и после обновления списка пользователей, но при сравнении не находит совпадения (0, 'Name: 0', '') (0, 'Name: 0', '') В чём проблема? |
||||
|
|||||
| Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Вместо
сделай
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
| Shouldercannon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.8.2010 Репутация: нет Всего: нет |
Результат остался тот же :(
|
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
проверяй наличие, и создавай если такой нет, а если есть просто переключайся на неё.
TabControl1.Tabs.IndexOf(); -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
drkot, код его вообще смотрел?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
если у него IndexOfObject не ищет, то может по имени получится ;) -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Не вариант, т.к. имя может быть одинаковое у разных записей. Тут больше интересно почему же все-таки не ищет IndexOfObject. Я вот состряпал на коленке теститик, все срабатывает. Не понятно почему у Shouldercannon не работает.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Либо он что-то не так делает, либо у него UsrData каждый раз новая.
-------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Shouldercannon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.8.2010 Репутация: нет Всего: нет |
Прикрепляю свои наработки для эксперемента Присоединённый файл ( Кол-во скачиваний: 1 )
TabControl.zip 15,26 Kb |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Все понятно. В TForm2.ProcAddTab передается TListItem, взятое из TListView.Items. Там же потом извлекается Data. Так вот, что же храниться в Data? А там храниться ссылка на обрасть памяти. Той самой памяти, которая заполняется в AddTab и отдается потом в TabControl1.Tabs.Objects. При нажатии Button1 срабатывает LVUsers.Clear; TListView очищается и, соответственно, очищаются все Data. При последующем срабатывании ProcAddTab данных в Data нет. А раз так, то выполняется условие (UsrData = nil), заново выделяется и заполянется данными панять в AddTab, идет сравнение по IndexOfObject и оно не срабатывает т.к. хоть данные и одинаковые, но это не те же данные, а поэтому IndexOfObject возвращает -1. Это очень хорошо видно, если под отладчиком в ProcAddTab вызвать Pointer(UsrData) и посмотреть что там будет для каждой записи при первом заполнении LVUsers и потом при перезаполнении LVUsers.
Короче, IndexOfObject не срабатывает потому, что мы сравниваем разные экземпляры класса TTabData. И хоть они заполненны одинаковыми данными, это все-равно разные экземпляры. Я бы переделал TTabData в record и, соответственно, немного переделается логика работы программы. Но тогда не будет таких подводных камней и UsrData с одинаковыми данными будут считаться одинаковыми. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Shouldercannon |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.8.2010 Репутация: нет Всего: нет |
Для Name: 0 Первое формирование данных в ListView - $1E29A0C Второе формирование данных в ListView - $1E29EA8 Третье формирование данных в ListView - $1E2A2C8
Можно попросить помочь с этим, данный код был написан не лично мной и при внесении изменений всё полетит в тартарары. Пока не шибко разбираюсь Вот первый пример
и понеслась Build [Error] frm_2.pas(12): ',' or ':' expected but identifier 'UserID' found [Error] frm_2.pas(73): Object or class type required [Error] frm_2.pas(77): Incompatible types: 'TObject' and 'TTabData' [Error] frm_2.pas(82): Operator not applicable to this operand type [Error] frm_2.pas(106): Incompatible types: 'TTabData' and 'Pointer' [Error] frm_2.pas(108): Incompatible types [Error] frm_2.pas(113): Incompatible types: 'TTabData' and 'Pointer' [Error] frm_2.pas(116): Incompatible types: 'TObject' and 'TTabData' [Error] frm_2.pas(122): Incompatible types: 'TObject' and 'TTabData' [Fatal Error] Project1.dpr(6): Could not compile used unit 'frm_2.pas' Это сообщение отредактировал(а) Shouldercannon - 12.10.2014, 10:17 |
||||||
|
|||||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
для начала это убрать а в дальнейшем взять любую книжку по Delphi (или справку) и словарик англо-русский.... да попробовать самому подучиться... -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Я не сильно там лез в дебри, т.к. я бы вообще все переписал бы даже в этих трех строках, но посмотреть что к чему есть где. Присоединённый файл ( Кол-во скачиваний: 4 )
TabControl.rar 17,21 Kb-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Shouldercannon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.8.2010 Репутация: нет Всего: нет |
Poseidon, низкий Вам поклон.
Застрял на получении данных для выбранной вкладки из UserData. Индекс текущей вкладки
Вопрос, как теперь подлезть к указанному tbInd в UserData? Это сообщение отредактировал(а) Shouldercannon - 13.10.2014, 14:07 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |