Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.08.2009, 10:43
zagrr zagrr вне форума
Прохожий
 
Регистрация: 26.08.2009
Сообщения: 3
Репутация: 10
По умолчанию ComboBox, (сделать как в 1с списокзначений)

в 1Ске есть элемент "СписокЗначений" (аналог нашего ComboBox)

в него можно добавлять данные в виде
ДобавитьЗначение(Значение, представление)

Представление - это то, что реально юзер видит в списке
Значение - реальное значение, соответствующее выбранной записи

как нечто подобное сделать в делфи на комбобоксе?

поясню зачем это надо

есть БД, в которой есть таблица с 2я полями id,name
пользователь должен выбирать из списка значения из поля name, но в БД надо писать id, соответствующее выбранному name
Можно кнешна перед записью делать
select id from tab where name=[COmboBox1.text]
но что-то как то не комильфо

кто решал подобные задачи?
Ответить с цитированием
  #2  
Старый 26.08.2009, 10:59
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,534
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от zagrr
в 1Ске есть элемент "СписокЗначений" (аналог нашего ComboBox)

в него можно добавлять данные в виде
ДобавитьЗначение(Значение, представление)

Представление - это то, что реально юзер видит в списке
Значение - реальное значение, соответствующее выбранной записи

как нечто подобное сделать в делфи на комбобоксе?

поясню зачем это надо

есть БД, в которой есть таблица с 2я полями id,name
пользователь должен выбирать из списка значения из поля name, но в БД надо писать id, соответствующее выбранному name
Можно кнешна перед записью делать
select id from tab where name=[COmboBox1.text]
но что-то как то не комильфо

кто решал подобные задачи?
Например так:
Код:
 ComboBox1.Items.AddObject('test',TObject(6));
 Caption:=IntToStr(Integer(ComboBox1.Items.Objects[0]));
Ответить с цитированием
  #3  
Старый 26.08.2009, 11:10
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Или (если ID не integer) завести 2 списка (чтоб потом не связываться с освобждением ресурсов).
В видимом - наименования, а в невидимом - ID.
Ответить с цитированием
  #4  
Старый 26.08.2009, 11:29
zagrr zagrr вне форума
Прохожий
 
Регистрация: 26.08.2009
Сообщения: 3
Репутация: 10
По умолчанию

roamer тож не комильфо

Admin
f[etyyf!!!
спасибо, ты красафчег!!! все получилось
Ответить с цитированием
  #5  
Старый 26.08.2009, 12:10
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

А если надо будет в таком списке хранить не только ID, но и аналог (из 1с): Вид() , Тип(), а также признак неопределенного значения ?
Тогда (опять же). Либо отдельный TStrings (с этими атрибутами).
Либо в качестве Objects[] использовать Record.
В этом случае придется озаботиться освобождением ресурсов.
Иначе будет точно "не комильфо".
:-)
Ответить с цитированием
  #6  
Старый 26.08.2009, 12:16
zagrr zagrr вне форума
Прохожий
 
Регистрация: 26.08.2009
Сообщения: 3
Репутация: 10
По умолчанию

roamer
поясни о каком освобождении ресурсов ты говоришь, чет я не вкуриваю
Ответить с цитированием
  #7  
Старый 26.08.2009, 12:38
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Добавляется указатель на объект (в памяти).
Программист (в общем случае) должен сам позаботиться о том, чтобы создать его в памяти (например, с помощью NEW).
А затем сам же и удалить (Dispose).
Типа этого (применительно к TTreeView).
Код:
Type        
  PRec_AttrEssenceInTree = ^TRec_AttrEssenceInTree; //Атрибуты узла в TTree_DB_fodb
  TRec_AttrEssenceInTree = packed record
                         //ID_THIS       : WideString;
                         ID_THIS       : String[CountChar_in_ID_This]; //ID строки в таблице базы данных
                         ID_KIND       : byte;                         //ID вида (объект или процесс)
                         ITS_BASE      : byte;                         //Признак: базовый или ссылочный
                         ITS_GLOBAL    : byte;                         //Признак глобальности
                         ITS_ABSTRACT  : byte;                         //Признак абстрактности
                       end;

Var            
  PRecEssence  : PRec_AttrEssenceInTree;

begin            
  ...      
  New(PRecEssence);
  ...      
  ...      
  Sx:='Наименование';                
  Selected:=Items.AddChildObject(NodeParent,Sx,PRecEssence);
  ...
  ...      
  Dispose(PRec_AttrEssenceInTree(Node.Data));
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter