Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

как записать строку в св-во Objects компонента combobox?   Найти похожие ветки 

 
kivadim   (2005-01-31 18:16) [0]

записывал значение типа integer таким образом:

cbox1.Items.AddObject(Query[1].AsString,TObject(Query[2].AsInteger));

а считывал так:

i:=integer(cbox1.Items.Objects[cbox1.ItemIndex]);


теперь надо записать значение типа string.
пытаюсь сделать так:

cbox1.Items.AddObject(Query[1].AsString,TObject(Query[2].AsString));

но при считывании выдает мусор

s:=string(cbox1.Items.Objects[cbox1.ItemIndex]);

Подскажите пожайлуста как привильно записать...


 
Arm79 ©   (2005-01-31 18:21) [1]

Переведи строку в PChar(выделив под нее соответственно область памяти), и в Object кидай указатель на эту область. А когда надобность в ней отпадет, освободи эту область FreeMem"ом


 
MBo ©   (2005-01-31 18:22) [2]

var s:string;

s:=Query[2].AsString;
затем
cbox1.Items.AddObject(Query[1].AsString,TObject(s));


 
Набережных С. ©   (2005-01-31 18:28) [3]

>MBo ©   (31.01.05 18:22) [2]

Че, правда?:)


 
kivadim   (2005-01-31 18:30) [4]

>MBo ©   (31.01.05 18:22) [2]
Я вроде также сделал. Записывать, то записывает, а как потом вытащать записанное, а не мусор


 
Набережных С. ©   (2005-01-31 18:33) [5]

>kivadim   (31.01.05 18:30) [4]

Он пошутил:)


 
kivadim   (2005-01-31 18:35) [6]

>Набережных С. ©   (31.01.05 18:33) [5]
а все-таки что нет простого решения?


 
MBo ©   (2005-01-31 18:36) [7]

>Набережных С. ©   (31.01.05 18:28) [3]
Уел ;))
Да, конечно, память нужно выделять, чтобы строки не пропадали, например, как Arm79 сказал.


 
kivadim   (2005-01-31 18:39) [8]

да неужели с integer такая красота получается, а со string-ом такя лажа??


 
MBo ©   (2005-01-31 18:41) [9]

>kivadim
Самое простое - завести дополнительный TStringList для хранения строк.


 
kivadim   (2005-02-01 13:58) [10]

и что в св-ве Objects хранить номер строки из TStringList?


 
MBo ©   (2005-02-01 14:33) [11]

>и что в св-ве Objects хранить номер строки из TStringList?
Если у тебя каждой строке combobox соответствует доп. строка, то ничего хранить и не надо - однозначное соответствие. Иначе - да, храни число-номер в списке.


 
Arm79 ©   (2005-02-01 14:33) [12]

Все достаточно просто.

kivadim   (31.01.05 18:16)

записывал значение типа integer таким образом:
cbox1.Items.AddObject(Query[1].AsString,TObject(Query[2].AsInteger));
а считывал так:
i:=integer(cbox1.Items.Objects[cbox1.ItemIndex]);


В Обджестс хранится адрес. Имеет размер 4 байта. Пишешь ты туда Интеджер. Тоже 4 байта. А потом интерпретируешь значение в Обджектс как Интеджер. Это допустимо и экономит память по 4 байта на каждую запись ;)

Можно записать и так:
var
 pInt : ^Integer;
 i    : Integer;
begin
   // запись
 pInt := AllocMem(SizeOf(Integer));
 pInt^:= Query[2].AsInteger;
 cbox1.Items.AddObject(..., TObject(pInt));
   ...
   // считывание
 pInt := PInteger(cbox1.Items.Objects[cbox1.ItemIndex]);
 i := pInt^;
 FreeMem(pInt, SizeOf(Integer));
end;

Если записывать строки, то нужно их перевести в PChar
var
 pcTemp : PChar;
begin
 pcTemp := AllocMem(Length(MyStr)+1); // для последнего #0
 System.Move(MyStr[1], pcTemp^, Length(MyStr))
 PByteArray(pcTemp)[Length(MyStr)] := 0; // вроде можно
                                         // не писать, но привык
end;

Потом закинуть в Обджектс как в примере с Интеджер.

Считывание аналогично.
 pcTemp := PChar(...Objects[your_index]);
 MyStr  := string(pcTemp);
 FreeMem(pcTemp, StrLen(pcTemp)+1);

Вроде бы так.


 
kivadim   (2005-02-01 14:56) [13]

>MBo ©   (01.02.05 14:33) [11]
Сделал по твоему. Все работает, но получается что для каждого комбокса нужен свой объект TStringList-а, это как-то не очень эффективно.

>Arm79 ©   (01.02.05 14:33) [12]
спасибо теперь будем знать, но тоже довольно длинный путь....


 
MBo ©   (2005-02-01 15:33) [14]

>kivadim   (01.02.05 14:56) [13]
> получается что для каждого комбокса нужен свой объект TStringList-а, это как-то не очень эффективно.

В любом  случае придется где-то хранить эти строки.



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

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.051 c
1-1106744363
Raider
2005-01-26 15:59
2005.02.13
Исходник звонилки


1-1107250958
Anknown
2005-02-01 12:42
2005.02.13
XML для Delphi - сохранить и загрузить...


14-1106586522
SteelMan
2005-01-24 20:08
2005.02.13
Не закачиваются мелодии на телефон....


3-1105430335
AleKo
2005-01-11 10:58
2005.02.13
HalcyonDataSet кто сталкивался.


3-1105733576
armada
2005-01-14 23:12
2005.02.13
Как на Sql найти "осиротевшую" запись?