![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TComboBox vs PStrings [D7, WinXP]
KIR@PRO © (2011-09-13 10:28:00)Приветствую всех. Подскажите пожалуйста как переделать TComboBox чтоб компонент работал не со своим списком TStrings
а с созданным отдельно TStrings и присоединенным к нему и другим таким же TComboBox через свойство...
На подобие этого:
s1:Tstrings;
...
ComboBox1.PComboStringList:=@s1;
ComboBox2.PComboStringList:=@s1;
необходимо это для экономии памяти т.к. необходимо чтоб много ComboBox'ов отображало один и тот же список но выбирать могли разные пункты....
Зарание благодарю за любую конструктивную помощь...
Омлет (2011-09-14 15:08:00) [1]> KIR@PRO (14.09.11 15:04) [29]
Посмотри на это: http://www.soft-gems.net/index.php?option=com_content&task=view&id=12&Itemid=33
Очень мощная и удобная штука. Можно делать таблицы и деревья с любым оформлением. StringGrid - это убожество.
KIR@PRO (2011-09-14 15:04:00) [2]я уже думал над таким вариантом, это довольно разумно при использовании допустим с StringGrid, но я категорически не хочу его использовать... в плане оформления...
Омлет (2011-09-14 15:01:00) [3]> KIR@PRO (14.09.11 14:37) [24]
О чем я и говорил.. Нужна всего 1 таблица для отображения. При клике или наведении на ячейку создается комбобокс, после выбора или потери фокуса уничтожается. И не надо 80 комбобоксов.
В качестве компонента таблицы советую, например, Virtual Treeview (soft-gems.net)
Плохиш (2011-09-14 15:00:00) [4]
> Программа конечно же для составления/изменения расписания
>
Достаточно иметь один комбобокс и показывать его только когда нужно в требуемом месте.
KIR@PRO (2011-09-14 14:56:00) [5]stasесли так делать, то Combobox будет копировать S в свой собственный, и потом при изменении S снова придется присваивать
Combobox1.Items:=s;
при этом Combobox'ов много... на время этих операций интерфейс пользователя будет заморожен, можно конечно использовать потоки но это не выход, т.к. придется своими средствами запрещать пользователю изменять что то пока всем Combobox'ам не присвоятся новые значения.
как уже писал DiamondShark
Combobox использует SendMessage для заполнения отображаемого списка, но значения он берет из своего TStrings, было бы намного проще если б Combobox хранил не TStrings а PStrings (^TStrings), т.е. указатель на список, и в SendMessage отправлял значения из стороннего TStrings
как писал sniknikэто похоже на DBComboBox но вместо DataSheet использовать указатель на TStrings...
Разбираться в структуре компонента TComboBox займет не мало времени, по этому я и задал здесь вопрос в надежде найти людей для которых изменить компонент не составит особого труда, и они смогут мне помоч если не готовым компонентом, то хотябы в каких функциях/процедурах надо изменять...
stas (2011-09-14 14:43:00) [6]KIR@PRO (14.09.11 13:51) [22]
В общем мужики (Медвежонок Пятачок,Омлет,DiamondShark, Dennis I. Komarov, Inovet) не сдали вы экзамен...
KIR@PRO (13.09.11 14:47) [5]
Зачем столько комбобоксов ?
А почему так не сделать:
var S:TStringList;
begin
S:= TStringList.Create;
S.Add('...');
....
Combobox1.Items:=s;
Или я не понял что нужно?
KIR@PRO (2011-09-14 14:37:00) [7]Омлетмне начинает нравиться твоя серьезность, одно но:
заведомо ненужной задачи- не факт конечно, но я начинаю представлять как можно по другому реализовать....
по проекту: у меня примерно тоже самое что ты описал ток не на html... ядро уже сделано осталась обертка... программа работает с расписанием занятий, с возможностью вывода разных связанных таблиц, пример:
имеется расписание по классам которое вывешано для учащихся, и имеется расписание для руководителей, где напротив каждого руководителя в какой день какой парой какой класс, а предмет указывается как подстрока(тоесть строка с учителем делится на строчки кол-вом равным предметам которые преподает этот учитель)....
Программа конечно же для составления/изменения расписания
вот и бьюсь теберь над более менее простым интерфейсом....
Омлет (2011-09-14 14:22:00) [8]> KIR@PRO (14.09.11 13:51) [22]
Однажды, один из наших программистов реализовал заполнение зачетной ведомости учебной группы в вузе - такая здоровенная таблица где в строках студенты, в столбцах предметы, а на пересечении - оценки. В первоначальном варианте там тоже было в каждой ячейке по выпадающему списку. Жутко выглядело. Особенно, если учесть, что всё на html, грузилось это очень долго.
Потом переделали на обычную таблицу, где при клике на ячейке динамически появляется селект (выпадающий список). В итоге - выглядит гораздо лучше и не тормозит.
Поэтому, пока нет веры в то, что ты выбрал верный путь, помогать в реализации [вероятно] абсурдной задачи не никакого желания (заметь, не только у меня). Давно бы показал, что у тебя за форма, и рассказал, что делает - не было бы всяких пустых споров.
Ты не первый, кто здесь просит решения конкретной, заведомо ненужной задачи.
KIR@PRO (2011-09-14 13:51:00) [9]Inovetпо делу ответили только sniknik, Jeer, icWasya, DimaBr
остальные ОФФТОП.
упираться на своём ещё и с агрессией и обидами теперь.не привык обижаться... я лишь попросил разъяснить твои же слова, не более...
Медвежонок Пятачок - 3 сообщения, ни одноиз который к вопросу не относится
Омлет - 2 сообщения, все про проектирование
DiamondShark - 1 сообщение, ответ на его сообщение:
procedure TCustomCombo.SetItems(const Value: TStrings);
begin
if Assigned(FItems) then
FItems.Assign(Value)
else
FItems := Value;
end;
если код ни о чем не говорит загляни в Tstrings.Assign
procedure TStrings.Assign(Source: TPersistent);
...
AddStrings(TStrings(Source));
...
end;
Dennis I. Komarov - 1 сообщение, создающее впечатление будто название темы " ЧТО СДЕЛАТЬ С ИНТЕРФЕЙСОМ??? ПОМОГИТЕ "
2 Inovetты все еще уверен что я " ..не услышал и продолжаю упираться на своём.."
Inovet (2011-09-14 13:01:00) [10]> [19] KIR@PRO (14.09.11 12:50)
> Inovet © и как ты вообще определил что все писавшие, или
> хотя бы один из них, намного более грамотные???
Тебе ответили по делу, ты не услышал и продолжаешь упираться на своём ещё и с агрессией и обидами теперь.
sniknik (2011-09-14 12:55:00) [11]> нет смысла показывать
вот... вот она основная ошибка, не желание/"не видение" смысла показывать, что/делаешь но желание получить совет... сродни лечению по фотографии, ремонту по телефону...
по вопросу, посмотри на DB контролы... они могут работать с одними и теми же данными. и комбо бокс тим есть.
но от TStrings-листов придется уйти к датасетам... хотя, всяко проще чем бесконечно изобретать один и тот же велосипед.
KIR@PRO (2011-09-14 12:50:00) [12]Inovet ©и как ты вообще определил что все писавшие, или хотя бы один из них, намного болееграмотные??? это ты так ненавящиво решил меня принизить? или наоборот чтоб они себя гуру почувствовали?
KIR@PRO (2011-09-14 12:46:00) [13]Inovetо чем ты говоришь... 1)перечитай первй пост а потом сообщения этих "грамотных" людей.
2) Слушаю ВСЕХ, прислушиваюсь только к тем кто пишет ПО СУЩЕСТВУ
3) Я НЕ ПРОСИЛ оценивать интерфейс разрабатываемого приложения И ни один из читающих эту ветку людей кроме меня этот интерфейс вообще не виделии представить его не смогут (нет смысла показывать), дак о какой ошибкепроэктирования интерфейса может идти речь?
Надеюсь обхяснил доходчиво...
Всем спасибо до новых встреч...
Jeer (2011-09-14 11:09:00) [14]P.S.
Ему прямая дорога в DBLookup, либо использовать
cbx.Items.Assign(lst1);
cbx.Items.Assign(lst2);
и до .. дальше
Jeer (2011-09-14 10:59:00) [15]
> Ты слушай,
Зачем ? Пусть парится дальше, у него слушалка еще не отросла, а после этого должна еще понималка отрасти.
Inovet (2011-09-14 10:37:00) [16]> [14] KIR@PRO (14.09.11 09:56)
Ты слушай, что тебе намного более грамотные люди говорят, а не сябя любимого с единственно верным взглядом на бытие.
KIR@PRO (2011-09-14 09:56:00) [17]icWasyaспасибо....
2Dennis I. Komarov мозг твой туда надо...
icWasya (2011-09-14 09:49:00) [18]Если всё делать руками, то:
1)создать свой компонент, отнаследованый не от ComboBox, а от CustomEdit.
2)добавить к нему кнопку
3)по нажатию на кнопку показывать ListBox с Style=lbVirtual
4)в этом ListBox`е сделать свою отрисовку в OnDrawItem
5)еще добавить обработку потери фокуса, нажатий на Enter, Esc, Up/Down, Скролл мышки и т п.
Что-то подобное делает TLookupComboBox. Там наследник от TEdit, по кнопке показывается DBGrid. Можно попытаться переделать.
Также Edit с кнопкой был в библиотеке Rx. Может там и есть то, что Вам нужно.
Dennis I. Komarov (2011-09-13 21:41:00) [19]
> так и не услышал
услышал, но не понял...
Суть: интерфейс - в печку...
KIR@PRO (2011-09-13 21:26:00) [20]вобщем ни чего по вопросу так и не услышал кроме DimaBrза что ему спасибо... услышал только блестящие знания мего проектировщиков и оптимизаторов...ожидал на самом деле большего...