Вниз
Скачать: CL | DM;

Combobox.Items.AddObject( Текст , Текст )   Найти похожие ветки 

← →
Slaviq   (2005-11-22 22:17) [0]

Версия с целочисленным объектом работает аж бегом:

З.Ы. Такой вопрос уже подымался тут http://delphimaster.net/view/1-1132312500/, но есть изюминка.


line.Items.AddObject(fieldbyname("nm").AsString, TObject(pchar(fieldbyname("id").AsInteger)));

<--- Забиваем значение Объекта
showmessage(IntToStr(integer(line.Items.Objects[line.ItemIndex])));
или
showmessage(IntToStr(line.Perform(CB_GETITEMDATA, line.ItemIndex, 0)));
<-- Получаем значение Объекта

Нужно забить и получить текстовый обьект. Следующий вариант не работает:

grp.Items.AddObject(fieldbyname("LongName").AsString, TObject(pchar(fieldbyname("Shortname").AsString)));
<--- Забиваем значение Объекта
showmessage(String(grp.Items.Objects[grp.ItemIndex]))); <-- Получаем значение Объекта

У кого нибуть есть варианты? Заранее 10х!


← →
Reindeer Moss Eater ©   (2005-11-22 22:37) [1]

TObject(pchar(fieldbyname("Shortname").AsString)));

У тебя передана ссылка на ансистроку. Все правильно.
За исключением того, что сама строка после выхода за пределы видимости уничтожается.
И ссылка начинает указывать в открытый космос.


← →
Reindeer Moss Eater ©   (2005-11-22 22:40) [2]

TObject(StrNew(pchar(fieldbyname("Shortname").AsString))));

Но после этого ты сам будешь ответственен за освобождение памяти.


← →
Slaviq   (2005-11-22 22:45) [3]

Спасибо, работает!
Но, можно  ли поподробней про память?


← →
Slaviq   (2005-11-22 23:12) [4]

Да уж, чтото у меня вапще каша уже получилась :)
теперь еще и индекс не возвращается :(

grp.ItemIndex:=grp.Items.IndexOfObject(TObject((pchar(Edit1.Text))));
или
grp.ItemIndex:=grp.Items.IndexOfObject(TObject(StrNew(pchar(Edit1.Text))));

ЛистАутОфБаундс(0) :(
А!!! Спасите! Будите в Киеве поставлю пиво :)


← →
Fay ©   (2005-11-22 23:30) [5]

2 Slaviq   (22.11.05 23:12) [4]
Дя-а... Тяжёлый случай.
У тебя в Object хранится просто НЕКИЙ АДРЕС.
TObject((pchar(Edit1.Text))) - тоже просто НЕКИЙ АДРЕС, по которому лежит какая-то хрень, а не строка (в общем случае).
1) строки, полученные fieldbyname("LongName").AsString давно сдохла.
2) в случае, когда в всё-таки Object лежит нечто адекватное, оно точно не совпадёт с TObject(pchar(Edit1.Text)).

Ку?


← →
Fay ©   (2005-11-22 23:36) [6]

2 Slaviq   (22.11.05 23:12) [4]
Вот примерчик

procedure TForm1.Button1Click(Sender : TObject);
const
 a : array[Boolean] of string = ("не равны", "равны");
var
 s1, s2 : string;
begin
 s1 := Caption;
 s2 := Caption;
 ShowMessage(a[PChar(s1) = PChar(s2)]);
end;


← →
Reindeer Moss Eater ©   (2005-11-23 09:43) [7]

К чему этот пример?
В Objects в любом случае лежат четыре байта.
Как их интепретировать - дело автора.
Рассматривать это как указатель на строку терминированную нулем так же допустимо.


← →
icWasya ©   (2005-11-23 10:34) [8]

Читать на RSDN.RU статью про строки в Delphi


← →
Reindeer Moss Eater ©   (2005-11-23 11:35) [9]

procedure TForm1.Button2Click(Sender : TObject);
const
a : array[Boolean] of string = ("не равны", "равны");
var
s1, s2 : string;
begin
s1 := Caption;
s2 := Caption;
ShowMessage(a[StrComp(PChar(s1),PChar(s2)) = 0]);
end;


← →
slaviq   (2005-11-24 11:41) [10]

2Fay
Ку :)
Впринципе так и думал, что стринг туда никак не поместится.
Забью поле ID в базу. Проще, и нервные окончания сэкономлю.
Всем спасибо!
Тема закрыта.
Вывод: варианты возможны, но проще найти обходной путь :)



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.025 c
1-1132043842
auz
2005-11-15 11:37
2005.12.11
TProgressBar - (Delphi6+NT4) vs (Delphi7+WinXP)


2-1132816955
Андрюша
2005-11-24 10:22
2005.12.11
e в степени ln(x)? Как сделать?


2-1132914567
serko
2005-11-25 13:29
2005.12.11
Шифровка!


14-1132637872
ZeroDivide
2005-11-22 08:37
2005.12.11
Комбо-привод Nec 3520A перестал видеть CD диски :(


14-1132666500
Еремеев Андрей
2005-11-22 16:35
2005.12.11
Нужна консультация продвинутых




   Наверх