Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.20;
Скачать: CL | DM;

Вниз

Ну не получается блин....   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
1-63598
a123
2003-02-11 08:48
2003.02.20
Переменную окружения USERPROFILE


1-63658
loginov
2003-02-11 23:38
2003.02.20
просмотр таблицы excel в своем приложении


3-63479
Андрю-ХА!
2003-02-04 16:37
2003.02.20
Транспонирование набора данных


1-63611
dim-
2003-02-09 01:04
2003.02.20
про MsWord


14-63774
Nick-From
2003-02-01 14:22
2003.02.20
хочу сканер