Главная страница
    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.039 c
4-1128670772
Stanislav
2005-10-07 11:39
2005.12.11
как использовать CreateThread


6-1125579845
Autogen
2005-09-01 17:04
2005.12.11
RPC


1-1132010992
Dark Lord
2005-11-15 02:29
2005.12.11
Форма в dll


2-1132571540
Perf2k2
2005-11-21 14:12
2005.12.11
Пытаюсь вызвать процедуру показа формы FormShow, не получается :(


14-1132302191
pic509
2005-11-18 11:23
2005.12.11
Ограничения в Database Descktop под Delphi ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский