Форум: "Сети";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];
ВнизНу не получается блин.... Найти похожие ветки
← →
Supreme (2002-12-25 14:22) [0]Я когда-то задавал воспрос про то как назначить компанентам TICQClient свойство UIN и Password,
если неизвестно сколько строк может быть в Listbox. Т.е. надо было посчитать строки и выбрать
такое же количество ICQClient"ов и назначить каждому своё.
Код был такой:
procedure TForm.Timer1Timer(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
if Components[i] is TICQClient then
with TICQClient(Components[i]), ListBox1.Items do
begin
UIN := StrToInt(Names[Tag]);
Password := Values[IntToStr(UIN)];
end;
Timer1.Enabled:=False;
end;
Но почему то на этой строке "UIN := StrToInt(Names[Tag]);" Delphi выдаёт ошибку,
что, мол, не Integer Value "", хотя на 100% проверено, что в Listbox"e только цифры.
Я уже и c memo Пробовал такое делать - тоже нифига. Я вот чё думаю, может всё из-за того,
что "переход" на новую строчку в ListBox"e или memo не считается за Integer (ну т.е. то же самое,
что и если нажать Enter и осуществится переход на новую строчку).
Что у меня не так?? Не понимаю...
← →
myor (2002-12-25 14:29) [1]а uin?
← →
myor (2002-12-25 14:33) [2]>UIN := StrToInt(Names[Tag]);
еще тут tag должен быть integer.
попробуй в лоб:
UIN := StrToInt(Names[1]);
← →
Supreme (2002-12-25 19:43) [3]Всё равно не получается :((
← →
gsu (2002-12-25 21:15) [4]Names[Index: Integer] String
Применяется для списков, имеющих структуру "Имя = Значение". Такую структуру имеют, например, файлы .ini. Свойство Names возвращает Имя, использованное в строке с указанным индексом. Если строка не имеет форму "Имя = Значение", возвращается пустая строка. Свойство только для чтения.
Дело в том, что Имя выдается в виде втроки и если у тя 1 = ппвваы,
то Имя будет "1 ", что в int не переводится
← →
Digitman (2002-12-26 10:09) [5]
> gsu
Тогда уж (для твоего примера) наоборот :
Names[i] - это "1"
Values[i] - это "ппвваы"
Тут как раз Names[i] допустит конвертацию, а Values[i] даст EConvertError
Скорей всего, у автора наоборот : строки в списке имеют формат
NICKNAME = 12345678 (коль скоро речь об ICQ идет)
И, пытаясь преобразовать Names[i] = "NICKNAME" в Integer человек с завидной регулярностью получает граблями по лбу))
Если так, то "ларчик просто открывался" - не Names[i], а Values[i] нужно приводить к Integer
← →
gsu (2002-12-26 11:47) [6]Если 1= ппвваы, то все работает и в Names будет 1 !!!
← →
Supreme (2002-12-26 12:42) [7]Чё то не понял...
Я вам опишу, что мне необходимо сделать полностью:
В ListBox1 при создании форму у меня заносятся UINы, которые берутся из database.ini. В итоге получается ListBox1 примерно с таким содержанием:
1435143
87277544
28546436
2487567
54667654
5466657
т.е. только одни цифры.
Ещё у меня на форме имеется множество компанент TICQClient.
И в зависимости от того сколько UINов содержится в ListBox1, стольким ICQClient и будут ставится значения. Но, как только ICQClient будет получать значение "UIN", программа должна из database.ini найти ЭТОТ UIN и глянуть его значение. В данном случае это пароль. И поставить пароль в свойство Password компаненты ICQClient.
Вот вся проблема.
Не знаю что у меня не получается, сколько уже не пробовал... :(
Кто поможет кодом, буду благодарен.
← →
gsu (2002-12-26 12:58) [8]>> программа должна из database.ini найти ЭТОТ UIN
А причем здесь LB ?
Если берешь число из LB, то так:
UIN := StrToInt(LB.items[ICQClient.tag]), а Names здесь не причем
← →
Digitman (2002-12-26 13:01) [9]Вот ты заладил про свой ICQClient)
У тебя до ICQ даже дело еше не доходит.
Все упирается в то, что не Names[] нужно использовать, а Items[] !
Для того, чтобы использовать св-во Names[], нужно чтобы каждый строковый эл-т списка ListBox имел формат
NAME = VALUE
где "NAME" и знак "=" - обязательные элементы строки, а VALUE - необязательный
Пойми, что Names[] не просто берет целиком строчку из списка, а производит парсинг строчки на предмет наличия знака "=" после непустого множества символов ДО этого знака. Если это условие не соблюдено тобой, то Names[] вернет пустую строку, и результат преобразования к Integer вызовет исключение EConvertError. Что ты, собственно, и наблюдаешь.
Одним словом - либо используй StrToInt(Items[i]) либо меняй формат каждой строки в ListBox"е на
1435143 =
87277544 =
28546436 =
2487567 =
54667654 =
5466657 =
← →
gsu (2002-12-26 13:14) [10]>> либо меняй формат каждой строки
не хорошо - это, лучше вообще LB выбросить, раз значения числа, максимум использовать stringlist, а конструкция with do у него items и съела, вот.
Интересно как в with ListBox1.Items do задать, н-р, items[1]:=1, но не явно, типа self[1]:=1 ???
← →
Digitman (2002-12-26 13:55) [11]да как ? оч просто :
with ListBox1.Items do
for i:= 0 to Count - 1 do
Strings[i] := IntToStr(i);
← →
gsu (2002-12-26 14:08) [12]>> да как ? оч просто :
Я имел ввиду: with ListBox1.Items.Strings do
← →
Digitman (2002-12-26 14:42) [13]Это
> with ListBox1.Items.Strings do
даже скомпилировано не будет, ибо Strings - не объектное свойство, а строковое (к тому же требует указание индекса возвращаемой из списка строки)
← →
Supreme (2002-12-26 19:24) [14]Попробовал вот так:
procedure TForm.Timer1Timer(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
if Components[i] is TICQClient then
with TICQClient(Components[i]), ListBox1.Items do
begin
UIN := StrToInt(ListBox1.Items[Tag]);
Password := Values[IntToStr(UIN)];
end;
end;
А Delphi теперь говорит, что "List Index out of bounds..."
Вобщем куда-то надо поставить ListBox1.Items-1. А куда?
← →
gsu (2002-12-26 19:53) [15]Никуда, это он пишет что у тя нету такого индекса, н-р, Tag = -1 или 1 000 000
← →
Supreme (2002-12-26 21:36) [16]Так а что делать?
← →
Digitman (2002-12-27 08:12) [17]Если значение св-ва Tag используется как индекс элемента списка ListBox1.Items, то оно должно лежать в диапазоне
[0 .. ListBox1.Items.Count - 1]
Проверяй и принимай меры , если это не так.
← →
Supreme (2002-12-27 16:35) [18]Так а как уменьшить на 1 значение ListBox1.Items в моём коде?
← →
Digitman (2002-12-27 17:25) [19]))
Да никак !
Ты вникни :
> Если значение св-ва Tag (понятия не имею, что у тебя там Tag находится - сам смотри) используется как индекс элемента
> списка ListBox1.Items, то оно (ЗНАЧЕНИЕ СВ-ВА TAG !!!!) должно лежать в диапазоне
>
> [0 .. ListBox1.Items.Count - 1]
>
← →
Supreme (2002-12-27 20:03) [20]Так что, получается невозможно сделать чтобы в зависимости от того сколько у меня в ListBox1 строк, чтобы и столько же компанент ICQClient использовалось?
← →
gsu (2002-12-28 11:00) [21]Возможно, но их надо выделять синхронно и соответственно инициировать
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c