Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Снова проблемы с аськой, Теперь переполнение стека... 
V
    Опции темы
Coderr
Дата 26.3.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: 0
Всего: 0



Доброго времени суток. Использую компонент TICQClient Есть такой код.
Код

procedure TMainForm.ICQClientServerListRecv(Sender: TObject;
  SrvContactList: TList);
var i        : Word;
    j        : integer;
    UserInfo : TUINEntry;
    b        : boolean;
    Empty    : boolean; //если контакт-лист был пуст
    U        : string;
begin

//Узнаём пуст список контактов или нет
//Empty = false - список не пуст
//Empty = true  - список пуст
 Empty:=false;
 if ContactList.Items.Count=0 then Empty:=true;


 if SrvContactList.Count>0 then
  for i:=0 to SrvContactList.Count-1 do begin
   UserInfo:=PUINEntry(SrvContactList.Items[i])^;
   if UserInfo.CGroupID<>UserInfo.UIN then begin
    b:=false;
    U:=IntToStr(UserInfo.UIN);

//Если контакты были не пусты, то ищем контакт в листе
    if not Empty then
     for j:=0 to ContactList.Items.Count-1 do
      if not (InInvisible(ContactList.Items[i].SubItems[0]) and
        InVisible(ContactList.Items[i].SubItems[0])) and
         (U=ContactList.Items[j].SubItems[0]) then begin
       b:=true;
       exit;
      end;

//Если такой контакт не встречается в списке, то добавляем его
    if not b then begin
     with ContactList.Items.Add do begin
      if UserInfo.Nick<>'' then
       Caption:=UserInfo.Nick //Если ник есть, то пишем его
      else
       Caption:=U;            //Если нет ника, то пишем УИН
      ImageIndex:=7;
      SubItems.Add(U);
     end
    end;
   end;
  end;
 ICQClient.DestroyUINList(SrvContactList);

 Application.ProcessMessages;


 //Добавляем контакт в лист
 for i:=0 to ContactList.Items.Count-1 do
  ICQClient.AddContact(strtoint(ContactList.Items[i].SubItems[0]));

end;


Вот эта функция подвешивает прогу. Скажите, что здесь может подвешивать?

ЗЫ Выкладываю ещё код обработки процедуры смены статуса. На всякий случай. =)
Код

procedure TMainForm.ICQClientStatusChange(Sender: TObject; UIN: String;
  Status: Cardinal);
var i,j : integer;
    img : byte;
    s   : string;
begin
 if ContactList.Items.Count>0 then
  for i:=0 to ContactList.Items.Count-1 do
   if ContactList.Items[i].SubItems[0]=UIN then begin
    s:=StatusToStr(Status);
    if s='В сети' then img:=0 else
    if s='Готов поболтать' then img:=1 else
    if s='Отошёл' then img:=2 else
    if s='Не беспокоить' then img:=3 else
    if s='Занят' then img:=4 else
    if s='Недоступен' then img:=5 else
    if s='Невидимый' then img:=6 else
    if s='Злой' then img:=12 else
    if s='Дома' then img:=13 else
    if s='На работе' then img:=14 else
    if s='Депрессия' then img:=15 else
    if s='Кушаю' then img:=16 else
     img:=7;
    for j:=0 to MessForm.Messages.PageCount-1 do
     if MessPages[j].UIN=UIN then
      MessForm.Messages.Pages[j].ImageIndex:=img;
    ContactList.Items[i].ImageIndex:=img;
    Exit;
   end;
end;


Это сообщение отредактировал(а) Coderr - 26.3.2007, 22:08
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Yanis
Дата 27.3.2007, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Coderr @  26.3.2007,  23:01 Найти цитируемый пост)
Вот эта функция подвешивает прогу. Скажите, что здесь может подвешивать?

А для чего нам IDDE дана то? На то, что бы удобно было писать и отлаживать код. Вот и воспользуйся клавишами F4F5F7 и F8!

Добавлено через 4 минуты и 24 секунды
Цитата(Coderr @  26.3.2007,  23:01 Найти цитируемый пост)
    if s='В сети' then img:=0 else
    if s='Готов поболтать' then img:=1 else
    if s='Отошёл' then img:=2 else
    if s='Не беспокоить' then img:=3 else
    if s='Занят' then img:=4 else
    if s='Недоступен' then img:=5 else
    if s='Невидимый' then img:=6 else
    if s='Злой' then img:=12 else
    if s='Дома' then img:=13 else
    if s='На работе' then img:=14 else
    if s='Депрессия' then img:=15 else
    if s='Кушаю' then img:=16 else
     img:=7;

Прикольно smile

Это сообщение отредактировал(а) Yanis - 27.3.2007, 09:09


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Coderr
Дата 27.3.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: 0
Всего: 0



На счёт "прикольно" - я старался, но так не тока у меня. Такой метод я из экзампла взял.

На счёт клавиш - трейсил я! Причём заметил такую закономерность. Утром всё работает как часы, а вот днём и ночью ни в какую... Мистика. Именно трассировкой я нашёл, что тормоза именно в этом событии.
Ещё трассировка показала, что если убрать вот эту строчку:
Код

//Добавляем контакт в лист
 for i:=0 to ContactList.Items.Count-1 do
  ICQClient.AddContact(strtoint(ContactList.Items[i].SubItems[0]));

то всё работает нормально, но зато событие OnStatusChange не будет вызываться...
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Coderr
Дата 31.3.2007, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: 0
Всего: 0



Трассировка показала, что вышеперечисленные события не виноваты. Эта ошибка появляется после них...
Вот только не отображается строка, после которой вылетает ошибка. Может опять проблема в компоненте?
В аттаче скрин ошибки.

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  Error.jpg 54,16 Kb
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
bems
Дата 31.3.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Код

for i:=0 to ContactList.Items.Count-1 do
  ICQClient.AddContact(strtoint(ContactList.Items[i].SubItems[0]));

Ты уверен, что метод ICQClient.AddContact не увеличивает список ContactList.Items?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ivan219
  Дата 1.4.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Поповоду прикольно: возникнут проблемы в нерускоязычной Windows помойму тут лучше подумать и циферками это дело оргинизовать.

Вот так будет по симпатичнее.
Код

case S of
     0: img:=0;
     1:;
     2:;
     3:;
     4:;
     5:;
     6:;     
     7:;
     8:;
     9:;
     10:;
     11:;
     12: img:=7;;
end;

А вот по поводу того как S присвоить номер это надо весь код смотреть там скорей всего массив есть где 'В сети' 'Кушаю' прописанны вот от туда и бери если нет то организуй так проще да и надёжнее будет.

Это сообщение отредактировал(а) ivan219 - 1.4.2007, 00:08
PM MAIL ICQ   Вверх
Coderr
Дата 1.4.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: 0
Всего: 0



Цитата(bems @ 31.3.2007,  23:36)
Код

for i:=0 to ContactList.Items.Count-1 do
  ICQClient.AddContact(strtoint(ContactList.Items[i].SubItems[0]));

Ты уверен, что метод ICQClient.AddContact не увеличивает список ContactList.Items?

Нет. ContactList - это компонент TListView...  smile 
В здесь компонент и исходник главной формы.

--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
ivan219
  Дата 1.4.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Там нехватает одного файла и Class TRxTrayIcon
PM MAIL ICQ   Вверх
Coderr
Дата 2.4.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: 0
Всего: 0



Какого именно файла?
TRxTrayIcon - это компонент из rxLib 2.75
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
ivan219
Дата 3.4.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



.dpr .cfg .dof .res но восновном .dpr
rxLib 2.75 отдельно компонент можно или придётся всю библ. скачиват?
PM MAIL ICQ   Вверх
Coderr
Дата 3.4.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: 0
Всего: 0



dpr в аттаче.
rxLib всю качать. Но с трейиконом вроде проблем нет...  smile 

Присоединённый файл ( Кол-во скачиваний: 27 )
Присоединённый файл  Thumbelina.dpr 0,39 Kb
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Yanis
Дата 3.4.2007, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Coderr @  31.3.2007,  21:48 Найти цитируемый пост)
Трассировка показала, что вышеперечисленные события не виноваты. Эта ошибка появляется после них...
Вот только не отображается строка, после которой вылетает ошибка. Может опять проблема в компоненте?
В аттаче скрин ошибки. 

Кстати, а галочка «Use Debug DCUIL/DCUs» стоит в настройках проекта?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Coderr
Дата 4.4.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: 0
Всего: 0



"Use Debug DCUs"? Стоит!
У меня появилась мысль, что неправильно добавляются элементы в TListView... Я испытываю на своём номере, которым пользуюсь постоянно. Контакт-лист = 106 юзеров...  smile 
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Yanis
Дата 4.4.2007, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Coderr
Ну раз уж такой сложный случай, то либо досконально дебаж код пополнения ListView, либо выводи это пока что в TStringList какой-нибудь. Мона и в Memo.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Coderr
Дата 16.4.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: 0
Всего: 0



Вопрос исчерпан... Спасибо всем за внимание!
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0988 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.