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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TComboBox.Items.AddObject, Как работать?? 
:(
    Опции темы
Rodman
Дата 10.11.2006, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Дароф.

Я работаю с базами и когда в TComboBox загоняю список, например пользователей, то пишу
Код

with ComboBox.items do
begin
  while not Query.eof do
  begin
      ComboBox.Items.AddObject(Query.Fields.Fields[1].AsString, Pointer(Query.Fields.Fields[0].AsInteger))//т.е пользователь видит список имен..
     Query.next;
  end
end;


а потом выбира значения кода так
Код

Edit1.Text:=IntToStr(Integer(ComboBox.Items.Object[ComboBox.ItemIndex]));


т.е. в запросе код юзера - целое, а имя - стринговское...

а как мне сделать, если оба стринговские???  Не позволяет Делфи заполнить в pointer не целое...

Суть вопроса - заполнять ComboBox стринговскими и кодом и именем.... а после выбора определенного имени выбрать из него код??? smile  smile 

Спасибо...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
skyboy
Дата 10.11.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



запихивай туда не переменную типа string, а указатель на string. или используй pansichar.
PM MAIL   Вверх
Matematik
Дата 10.11.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

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



Неполучится
PM MAIL WWW ICQ   Вверх
skyboy
Дата 10.11.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



pansichar - в самом деле, "неуказательный" тип. указательный ppansichar.
А вот так - реализация с указателем на тип string:
Код

procedure TForm1.Button1Click(Sender: TObject);
type
 pstring = ^string;
var s: pstring;
    i: integer;
begin
for i:=1 to 10 do
 begin
  new(s);
  s^:= inttostr(i);
  ComboBox1.AddItem(s^,TObject(s));
 end;
end;
procedure TForm1.ComboBox1Select(Sender: TObject);
type
 pstring = ^string;
begin
showmessage(pstring(ComboBox1.Items.Objects[ComboBox1.itemindex])^);
end;

PM MAIL   Вверх
Rodman
Дата 10.11.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



skyboy, ну я получу указатель на строку... а мне нужно код который связан с записью...

т.е.

например есть таблица
  ID        Name
  1        Vasya
  2        Petya
  3        Mikola

Я заполняю в TComboBox и от и то.. а после выбора должен взять только ID выбранного имени... не указатель на него а ID... просто когда он целый, то все ОК, а если нет - то не позволяет Делфи заполнить...

Как сделать???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
skyboy
Дата 10.11.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Rodman, не понял, что у тебя не получается. 
PM MAIL   Вверх
Rennigth
Дата 10.11.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Rodman, не понимаю, зачем вообще стринг тебе сохранять? 
skyboy, дал тебе пример, только можно немного изменить на Integer.
Код

var
  lSomeID: Integer;
  lpInt: PInteger;
  lSomeStr: string;
begin
//...
  lSomeID := '10'; // твой ID
  lSomeStr := 'text';
  GetMemory(lpInt, SizeOF(PInteger));
  lpInt^ :=  lSomeID; 
  combobox.AddObject(lSomeStr, TObject(lpInt));
//...

// для чтения
  lpInt := PInteger(combobox.Objects[Index]);
  if Assigned(lpInt) then
    lSomeID := lpInt^;
)

end;

толко при destroy combobox-a не забудь освободить память в Objects.



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rodman
Дата 10.11.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Вот то что есть.. как исправить???

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Test.rar 11,63 Kb
PM MAIL WWW Skype GTalk YIM MSN   Вверх
UnSmiLe
Дата 18.11.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.11.2006

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



Попробуй так
Код

with ComboBox.items do
begin
  while not Query.eof do
  begin
      ComboBox.Items.AddObject(Query.Fields.Fields[1].AsString, TObject(Query.Fields.Fields[0].AsString))
     Query.next;
  end
end;

а дальше будешь обращаться следующим образом:
Код

Edit1.Text:=string(ComboBox.Items.Object[ComboBox.ItemIndex]);

PM MAIL   Вверх
Rodman
Дата 18.11.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



UnSmiLe, вот немного переделал
все равно криво работает...

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Test.rar 12,07 Kb
PM MAIL WWW Skype GTalk YIM MSN   Вверх
UnSmiLe
Дата 21.11.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.11.2006

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



Rodman, дело в таблице, то есть в том что в таблице SecondTable ключевое поле является строкой, я сделал его не ключевым у все начало почти нормально отображать, то есть не 001 а 1
PM MAIL   Вверх
Rodman
Дата 27.11.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



UnSmiLe, если бы можно было бы использовать 1 вместо 001... я сделал как в первом комбобоксе....
PM MAIL WWW Skype GTalk YIM MSN   Вверх
murod
  Дата 28.11.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 17.9.2005
Где: Uzbekistan/Tashke nt

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



Может все это объектами сделать? так было бы проще. тока потом надо будет удалить объект!!
есть у нас таблица типа:
ID        Name
  1        Vasya
  2        Petya
  3        Mikola

объявляем для него  самы простой объект:
Код


TmyTableRow=class
public
ID:integer;
Name:string;
end;

а потом:
Код

var  row:TmyTableRow;
------------------------------
with ComboBox.items do
begin
  while not Query.eof do
  begin
      row:=TmyTableRow.create;
      row.Id:=Query.Fields.Fields[0].AsInteger;
      row.name:=Query.Fields.Fields[1].AsString;
      ComboBox.Items.AddObject(row.name,row)//т.е пользователь видит список имен..
     Query.next;
  end
end;

вместо 
Цитата

Edit1.Text:=IntToStr(Integer(ComboBox.Items.Object[ComboBox.ItemIndex]));

обрашаемся так:
Код

Edit1.Text:=IntToStr(TmyTableRow(ComboBox.Items.Object[ComboBox.ItemIndex]).ID);


надеюсь все будет нормально smile 
--------------------
Люди всего мира берегите природу!  
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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