Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.047 c
1-1131837827
HF-Trade
2005-11-13 02:23
2005.12.11
Как эмулировать дабл клик мыши в другое окно не перемещая курсор


14-1132305664
pupkin
2005-11-18 12:21
2005.12.11
Подскажите компоненты для наведения красоты


2-1132805082
dreamse
2005-11-24 07:04
2005.12.11
Как в DBChart отключить Marks ?


3-1130308266
Goldmund
2005-10-26 10:31
2005.12.11
Работа с БД с применением DLL


2-1132850358
Бандерас
2005-11-24 19:39
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский