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

Вниз

Скрытие показ колонок TListView?   Найти похожие ветки 

 
first_aid   (2005-02-14 05:28) [0]

Приветствую!

Как сделать скрыие/показ колонок TListView или может каккой компонент посоветуете который это умеет?

Всем спасибо.


 
first_aid   (2005-02-14 13:09) [1]

Ну неужели не кто так не делает в своих программах???


 
Digitman ©   (2005-02-14 13:15) [2]

"Вы все еще кипятите ?"(С)

ну ты как ВИДИМЫЕ колонки добавляешь ? TreeView.Items.SubItems.Add ?

ну так просто не выполняй этот метод именно для тех колонок, которые исключены из просмотра !


 
Eraser ©   (2005-02-14 13:28) [3]

first_aid

Справку попробуй почитать. Вообще много нового узнаешь ))


 
first_aid   (2005-02-16 05:27) [4]

2 Digitman

Вообще то я имел ввиду заголовки колонок (Columns), а TreeView.Items.SubItems.Add - это относится к данным, если этого не делать то дыннх в не будет видно :), но заголовок то колонки все равно останется.

2 Eraser если ткнете где одязательно почитаю, а пока что я в хелпе ничего по этому поводу не видел.


 
Digitman ©   (2005-02-16 08:15) [5]


> Вообще то я имел ввиду заголовки колонок (Columns),


ну и что ? по аналогии - не добавляй ненужные заголовки, т.е. не выполняй для них ListView.Columns.Add (или удаляй ненужные)


 
first_aid   (2005-02-16 08:41) [6]

2 Digitman

Объясню по подробнее:

При первом запуске проги пользователь должен видеть все колонки списка, далее он может выбрать те которые ему нужны, как это будет делаться не суть важно, главное чтоб отключенные колонки небыли видны в списке. Если просто удалять отключенные пользователем колонки, то получается не хорошая вещь, а именно:
Допустим имеется список с 3-мя колонками:
A - 1 (данные отображаемые в колонке)
B - 2
C - 3
если удалить колонку A, то в колонке B будут отображаться данные колонки A(1), в С данные B(2), а данные колонки вообще не будут видны, а это естественно не то чего хотелось.


 
КаПиБаРа ©   (2005-02-16 08:49) [7]

first_aid   (16.02.05 8:41) [6]
если удалить колонку A, то в колонке B будут отображаться данные колонки A(1),


Ты в алгоритме программы учти, что колонки могут удалятся и что в первой колонке А нужно выводить данные 2.


 
Digitman ©   (2005-02-16 08:59) [8]


> При первом запуске проги пользователь должен видеть все
> колонки списка


не формируй колонки в дизайн-тайм

в ран-тайм веди свой (динамический) список колонок MyColumns, каждый элемент которого имеет кроме всего прочего поле флага "показать"

при первом выводе ListView добавляй в него заголовки для тех эл-тов списка MyColumns, у которых Показать=True, следом заполняй данными колонки

всякий раз когда юзер интерактивно изменяет набор отображаемых колонок, отражай эти изменения в MyColumns, очищай ListView.ListItems и ListView.ListColumns, после чего формируй ListView.ListColumns и ListView.ListItems заново, в соответствии с новым состоянием списка MyColumns


 
begin...end ©   (2005-02-16 09:00) [9]

> first_aid   (14.02.05 5:28)

uses CommCtrl;

begin
 MyListView.Perform(LVM_SETCOLUMNWIDTH, 1, 0)
end.


 
first_aid   (2005-02-16 10:46) [10]

2 Digitmag

Такое решение мне тоже приходило, но оно хорошо если в проге один список, а если их много, кодить для каждого - это моразм, можно конечно написать чтонить универсальное, но заморачиваться не охото, по этому я и спрашивал мож кто какой компонент знает где все уже реализовано.

2 begin...end

Я так понял Вы предлогаете установить ширину колонки равной 0, но тут возникает 2-ва нехороших последствия:

1) разделительная линия колонок, в том месте где находится колонка с шириной=0 выглядит коряво.

2) пользователь меняя ширину колонок мышкой может зацепить колонку у которой ширина=0 и изменить ее размер.


 
msguns ©   (2005-02-16 11:06) [11]

>first_aid   (16.02.05 10:46) [10]
>Такое решение мне тоже приходило, но оно хорошо если в проге один список, а если их много, кодить для каждого - это моразм, можно конечно написать чтонить универсальное, но заморачиваться не охото, по этому я и спрашивал мож кто какой компонент знает где все уже реализовано.

С таким подходом лучше завязывать программировать и итти в свайщики. Бьешь по свае кувалдой и нифига думать не надо. Главное - пошире размахнуться и посильнее вдарить.


 
first_aid   (2005-02-16 11:34) [12]

2 msguns

Думать или не думать, тут абсолютно не причем, зачем мне заморачиваться если возможно уже есть готовое решение!!! Если следовать вашей логике, то чтобы прочитать данные из dbf файла надо, переписать весь BDE или ADO по новой, и неиспользовать готовое(что нам Borland, мы будем полгода потеть, чтоб выудить из таблички строчки). Странный однако подход!


 
msguns ©   (2005-02-16 12:03) [13]

>first_aid   (16.02.05 11:34) [12]
>Думать или не думать, тут абсолютно не причем, зачем мне заморачиваться если возможно уже есть готовое решение!!!

Вот в этом-то и закавыка №1.
Пример. Надо построить мост через речку, чтобы жители села могли переезжать через нее.
Один чел подумал-подумал и решил, что мост тут дорог и ненадежен потому, что река сильно разливается весной. Проще сделать паромную переправу.
Второй же не может отойти от слова "мост" и типового проекта и упорно свозит цемент, камень и песок, ищет технику и подрядчика.

>Странный однако подход!

Да ну ? Тогда читаем это
"а если их много, кодить для каждого - это моразм, "

и становится понятно, что речь идет о нескольких похожих объектах, имеющих похожие свойства и методы. Действительно, заниматься кодированием каждого морочливо и как-то по-дилетантски. Тогда, если подумать, возникнет мысль о том, что надо как-то все это объединиить единой алгоритмикой. Либо создать базовый класс, куда разместить основную и самую громоздкую общую часть алгоритмики, либо просто написать некоторые методы, универсальные для всех описанных объектов.

В случае с твоими листвью такое решение просто напрашивается. Т.е. можно сделать несколько универсальных процедур (например, разметка, заполнение, вставка колнки, удаление и т.д.) и юзать их для всех многоколоночных вьюх.

Хотя, конечно, можно не заморачиваться, а искать "подрядчика".


 
msguns ©   (2005-02-16 12:08) [14]

И напоследок. Знаешь, чем отличается забиватель свай от инженера ?
Первый будет колотить своей кувалдой, думая лишь о пиве и бабах после работы. Максимум, на что он сподобится - это найдет новую кувалду, поудобнее.
Второй же придумает машину, которая будет забивать эти сваи без свайщика.


 
first_aid   (2005-02-16 12:38) [15]

2 msguns

Целую поэму однако написал :)

>Т.е. можно сделать несколько универсальных процедур (например, >разметка, заполнение, вставка колнки, удаление и т.д.) и юзать >их для всех многоколоночных вьюх.

Видимо примерно так и придется делать, я так думаю лучше наследника от TListView написать с данным функционалом.
Хотелось то ведь ка в известном мульфильме: "Лучше день потерять потом за 5 минут долететь" :)

И напоследок. Пока второй будет пидумывать машины, которые до него уже возможно выдуманы, сваи так и будут возле стройплощадки лежать, и денег за выдумывание никто не заплатит.


 
Digitman ©   (2005-02-16 12:52) [16]


> думаю лучше наследника от TListView написать


нафига ?!
чем тебя существующая (вполне УНИВЕРСАЛЬНАЯ) реализация этого списочного контрола не устраивает ?


> с данным функционалом


реализация ДАННОГО функционала отнюдь не требует каких-то там выкрутасов с наследованием TListView


 
first_aid   (2005-02-16 13:14) [17]

2 Digitman


>чем тебя существующая (вполне УНИВЕРСАЛЬНАЯ) реализация этого >списочного контрола не устраивает


тем что нет методов типа TListView.HideColumn(Index), TListView.ShowColumn(Index) ну или свойств (как кому больше нравится) TListView.Сolumns[Index].Visible := False,
TListView.Сolumns[Index].Visible := True


>реализация ДАННОГО функционала отнюдь не требует каких-то там >выкрутасов с наследованием TListView


Впринципе не требуется, но чтоб не заморачиваться с внешним хранением свойств колонок (ширина, позиция и д.т.), я так думаю, что лучше один раз написать наследника.


 
Digitman ©   (2005-02-16 13:31) [18]


> first_aid   (16.02.05 13:14) [17]


если уж на то пошло, то, во-первых, наследовать придется TCustomListView .. а во-вторых наследованием одного лишь этого класса просто так не отделаться - реализация внутренних алгоритмов TCustomListView тесно связана и зависит от многих других вспомогательных классов, которые тоже придется наследовать, если не переделывать "с нуля"

овчинка выделки не стоит !


 
first_aid   (2005-02-17 05:07) [19]

Ладно, я так понял готового решения не ни у кого, так что придется самому пыхтеть.

Спасибо всем за принявшим участие за интересную дискуссию!


 
Bel ©   (2005-02-17 10:43) [20]

А почему ты зациклился на ListView? Тебя не устроит другой компонент, например, StringGrid?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.039 c
1-1109094012
read_me
2005-02-22 20:40
2005.03.06
помогите пожалуйста разобраться и переделать


14-1108322204
Ig
2005-02-13 22:16
2005.03.06
Internet Explorer or Mozila FireFox


1-1108626509
Gost
2005-02-17 10:48
2005.03.06
Что за тип - Currency?


14-1108632653
Ega23
2005-02-17 12:30
2005.03.06
Умереть - не встать!


4-1106750531
Неуловимый Джо
2005-01-26 17:42
2005.03.06
Хук на запуск приложений





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