Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.008 c
14-63782
Alexanders
2003-02-03 16:11
2003.02.20
Нужна ли лицензия на кодеки?


4-63913
mbIkola
2003-01-09 15:13
2003.02.20
Подсккажите плиз, как связать окно с PopupMenu


14-63847
Armageddon
2003-02-04 21:38
2003.02.20
Где можно взять компонент типа RichEdit в котором можно рисовать


14-63767
КККККООООЛЛЛкккуууууллл
2003-01-30 17:26
2003.02.20
на D6 захотели KOL поставить


14-63821
Holy
2003-02-04 13:01
2003.02.20
Харьковчане есть ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский