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

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

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

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

Сообщение Basileus » 13.05.2010 21:08:38

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

То есть вместо a=b получается просто b
ОС Win7 x64, Lazarus последний.
Basileus
новенький
 
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

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

Сообщение Odyssey » 13.05.2010 22:08:33

Если обращаться к строкам ListBox через
Код: Выделить всё
ListBox1.Items[i]

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

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

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

Сообщение Basileus » 13.05.2010 22:13:13

*чешет в затылке*
Код: Выделить всё
ListBox1.Items[i]
тоже можно, значит? А я ValueFromIndex использовал. А в чем тогда между ними разница?
Basileus
новенький
 
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

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

Сообщение Odyssey » 13.05.2010 22:19:25

Разница в том, что для строки 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 раз(а).
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

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

Сообщение Basileus » 13.05.2010 22:26:03

Спасибо, буду знать. Просто я что-то перепутал (с lazarus встречаюсь впервые) и посчитал, что невозможно использовать items[i], а первое, что попалось на глаза - Items.ValueFromIndex[i], который я никогда и не использовал.
Basileus
новенький
 
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

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

Сообщение hinst » 13.05.2010 22:45:11

Познай силу LCL!
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

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

Сообщение Climber » 14.05.2010 08:53:01

ListBox.Items - это TStringList, а что такое TStringList, лучше всего описано здесь. После этого все вопросы пропадут.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

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

Сообщение Basileus » 18.05.2010 16:11:02

Climber
Спасибо за ссылку.
Я тут столкнулся с проблемой, но создавать очередную тему с нубским вопросом неохота)
Собсно, работает ли свойство Duplicates класса TStringList в Lazarus вообще и, если да, как его вызвать в ComboBox?
Basileus
новенький
 
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

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

Сообщение Mr.Smart » 18.05.2010 16:46:28

Код: Выделить всё
(ComboBox1.Items as TStringList).Duplicates:=dupIgnore;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Basileus » 29.05.2010 18:12:29

Mr.Smart
Только сейчас появилось время попробовать - не выходит, ошибку выдает.
Basileus
новенький
 
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

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

Сообщение Mr.Smart » 29.05.2010 19:09:34

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

з.ы. Нужно было сразу проверить и не вводить в заблуждение, но если судить о свойстве Items класса TComboBox, то оно инициализируется именно как FItems:=TStringList.Create, а это в свою очередь вводит в заблуждение. Я даже удивился такому повороту :oops:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Basileus » 29.05.2010 20:16:09

Спасибо. Наверное, тогда проще будет заполнять ComboBox через переменную типа TStringList)
Basileus
новенький
 
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

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

Сообщение Mr.Smart » 29.05.2010 20:45:41

Заполнить проще всего будет следующим способом:
Код: Выделить всё
var
s: TStringList;
begin
...
  ComboBox1.Items.Assign(s);
...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Basileus » 04.06.2010 20:00:26

А в какой именно части это вставлять? И заполнять s или ComboBox?
Basileus
новенький
 
Сообщения: 23
Зарегистрирован: 31.03.2010 16:23:22

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

Сообщение Mr.Smart » 04.06.2010 20:03:00

Basileus
Заполняешь s, а после делаешь присваивание Combobox1.Items.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 248

Рейтинг@Mail.ru