Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.048 c
2-1132964759
KGC
2005-11-26 03:25
2005.12.11
Отправка письма с аттачем с помощью WinSock


14-1132654668
Ajax
2005-11-22 13:17
2005.12.11
Новый вид червей или персональный подарок?


1-1131793569
<PREDATOR>
2005-11-12 14:06
2005.12.11
Как запустить прогу из командной строки


2-1132743597
Василий927
2005-11-23 13:59
2005.12.11
OnActivate/OnDeactivate не работают?


4-1129093499
SANEK_10289
2005-10-12 09:04
2005.12.11
Где в реестре взять имя пользователя?