Главная страница
    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.46 MB
Время: 0.037 c
3-1130397012
solenko
2005-10-27 11:10
2005.12.11
Русский язык в 16-ти разрядном InterBase


2-1132566744
arkan
2005-11-21 12:52
2005.12.11
База данных (SQL)


2-1132559466
psa247
2005-11-21 10:51
2005.12.11
Открыть реестр подобно Regmon !


3-1130245819
Sergey13
2005-10-25 17:10
2005.12.11
Ошибка ORA-01467 и как с ней бороться


6-1125377105
Laymer
2005-08-30 08:45
2005.12.11
сокет сервер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский