Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Combobox.Items.AddObject('Текст','Текст') [D7, WinXP]


Slaviq ©   (2005-11-22 22:17:00) 

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

З.Ы. Такой вопрос уже подымался тут http://www.delphimaster.ru/cgi-bin/forum.pl?id=1132312500&n=0, но есть изюминка.


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


slaviq   (2005-11-24 11:41:00) [1]

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


Reindeer Moss Eater   (2005-11-23 11:35:00) [2]

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;


icWasya   (2005-11-23 10:34:00) [3]

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


Reindeer Moss Eater   (2005-11-23 09:43:00) [4]

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


Fay   (2005-11-22 23:36:00) [5]

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;


Fay   (2005-11-22 23:30:00) [6]

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

Ку?


Slaviq   (2005-11-22 23:12:00) [7]

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

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

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


Slaviq   (2005-11-22 22:45:00) [8]

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


Reindeer Moss Eater   (2005-11-22 22:40:00) [9]

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

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


Reindeer Moss Eater   (2005-11-22 22:37:00) [10]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо