Знак "=" и строки

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Basileus
новенький
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

Знак "=" и строки

Сообщение Basileus »

Мне нужно слить строки из листбокса в одну большую строку. Загвоздка в том, что в этом самом листбоксе есть символы "=", а Лазарус, в отличие от Делфи, игнорирует его и копирует строку только после этого знака. Как можно отключить эту "фичу", или хотя бы скопировать всю строку нормально?

То есть вместо a=b получается просто b
ОС Win7 x64, Lazarus последний.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Если обращаться к строкам ListBox через

Код: Выделить всё

ListBox1.Items[i]

то у меня всё работает как положено, т.е. получаю "a=b".
Так что без примера кода будет сложно понять в чём проблема.

P.S.
И "Lazarus последний" -- довольно растяжимое понятие. Последний релиз, т.е. 0.9.28.x, или последняя ночная сборка, или последняя ревизия из репозитория? Если это не релиз, то через пару часов "последней" может быть уже другая версия. Поэтому лучше указывать версию и ревизию, их можно посмотреть в окошке "О программе".
Последний раз редактировалось Odyssey 13.05.2010 22:13:59, всего редактировалось 1 раз.
Basileus
новенький
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

Сообщение Basileus »

*чешет в затылке*

Код: Выделить всё

ListBox1.Items[i]
тоже можно, значит? А я ValueFromIndex использовал. А в чем тогда между ними разница?
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Разница в том, что для строки a=b

Код: Выделить всё

Items[i] = 'a=b'
Items.Strings[i] = 'a=b'
Items.Names[i] = 'a'
Items.Values['a'] = 'b'
Items.ValueFromIndex[i] = 'b'

Неужели Delphi возвращает ValueFromIndex[i] = 'a=b'? О_о
Последний раз редактировалось Odyssey 13.05.2010 22:27:51, всего редактировалось 2 раза.
Basileus
новенький
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

Сообщение Basileus »

Спасибо, буду знать. Просто я что-то перепутал (с lazarus встречаюсь впервые) и посчитал, что невозможно использовать items[i], а первое, что попалось на глаза - Items.ValueFromIndex[i], который я никогда и не использовал.
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

Познай силу LCL!
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

ListBox.Items - это TStringList, а что такое TStringList, лучше всего описано здесь. После этого все вопросы пропадут.
Basileus
новенький
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

Сообщение Basileus »

Climber
Спасибо за ссылку.
Я тут столкнулся с проблемой, но создавать очередную тему с нубским вопросом неохота)
Собсно, работает ли свойство Duplicates класса TStringList в Lazarus вообще и, если да, как его вызвать в ComboBox?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Код: Выделить всё

(ComboBox1.Items as TStringList).Duplicates:=dupIgnore;
Basileus
новенький
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

Сообщение Basileus »

Mr.Smart
Только сейчас появилось время попробовать - не выходит, ошибку выдает.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Basileus
К сожалению при использовании виджетов Win32/Win64 свойство Items имеет тип TWin32ComboBoxStringList, а он (класс) в свою очередь не наследуется от TStringList. По этому и возникает ошибка.
В свою очередь TWin32ComboBoxStringList не имеет методов и свойств подобным методам и свойствам класса TStringList....
В данном случае опирайтесь и изучайте базовый класс TStrings :wink:

з.ы. Нужно было сразу проверить и не вводить в заблуждение, но если судить о свойстве Items класса TComboBox, то оно инициализируется именно как FItems:=TStringList.Create, а это в свою очередь вводит в заблуждение. Я даже удивился такому повороту :oops:
Basileus
новенький
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

Сообщение Basileus »

Спасибо. Наверное, тогда проще будет заполнять ComboBox через переменную типа TStringList)
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Заполнить проще всего будет следующим способом:

Код: Выделить всё

var
 s: TStringList;
begin
...
  ComboBox1.Items.Assign(s);
...
Basileus
новенький
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

Сообщение Basileus »

А в какой именно части это вставлять? И заполнять s или ComboBox?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Basileus
Заполняешь s, а после делаешь присваивание Combobox1.Items.
Ответить