IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Массив компонент
Unconnected
сообщение 25.01.2009 23:26
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Допустим,нужно много копий одного компонента и возможность обращения к свойствам любого из них. Как это можно реализовать?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.01.2009 0:35
Сообщение #2


Гость






Что именно тебя смущает? Что это массив компонентов? Напрасно: "DRKB -> VCL -> TEdit, TSpinEdit -> Массив Edit-компонентов" приведен пример использования таких массивов.
 К началу страницы 
+ Ответить 
Unconnected
сообщение 26.01.2009 14:36
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


При использовании такого метода получается, что все Edit'ы уже должны находиться на форме, так? А мне нужно, чтобы было много компонентов без помещения их на форму... Конкретно icqclient.

mas3:array[1..m] of ticqclient;


Я сначала попробовал так, но при обращении к элементу, например mas3[4].login вылетает ошибка Acsess Violation. Хотя просто icqcliet1.login всё нормально..

Сообщение отредактировано: Unconnected - 26.01.2009 14:44


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.01.2009 15:14
Сообщение #4


Гость






Цитата
Я сначала попробовал так, но при обращении к элементу, например mas3[4].login вылетает ошибка Acsess Violation. Хотя просто icqcliet1.login всё нормально..
Просто icqclient1 у тебя лежит на форме, то есть, конструктор его тебе (вручную) вызывать не надо. Если же у тебя массив компонентов, НЕ присутствующих на форме - то перед обращением к методу требуется вызвать конструктор (что там у TIcqClient за конструктор? Create?)... Что-то вроде
mas3[4].Create(nil); // Ну, или как там конструктор называется...
mas3[4].UIN := ...
mas3[4].Password := ...
mas3[4].Login;
 К началу страницы 
+ Ответить 
Unconnected
сообщение 26.01.2009 15:24
Сообщение #5


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Сделал в цикле:

  for z:=1 to i do
begin
mas3[z].create(nil);
mas3[z].uin:=.....;
mas3[z].password:=.....;
mas3[z].login;
end;


И опять Acsess Violation..Показывает на строку с конструктором. Может, не Create, а ещё что-то, как узнать?

Сообщение отредактировано: Unconnected - 26.01.2009 15:24


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 26.01.2009 16:18
Сообщение #6


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Кстати, если просто написать TIcqClient.create(nil), то всё нормально..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.01.2009 16:19
Сообщение #7


Гость






Блин... FPC-шная привычка... Не так, конечно, это не Дельфи-way... Вот так:
mas3[z] := TIcqClient.create(nil);

 К началу страницы 
+ Ответить 
Unconnected
сообщение 26.01.2009 16:23
Сообщение #8


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Спасибо! good.gif good.gif good.gif smile.gif

Сообщение отредактировано: Unconnected - 26.01.2009 16:24


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 29.01.2009 19:41
Сообщение #9


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ещё проблема... На форме у нас компонента нет. А если, допустим, нужно обработать событие OnMessageRecv, что делать?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.01.2009 20:58
Сообщение #10


Гость






В класс формы добавляешь свой обработчик:
procedure TForm1.myOnMessageRecv(Sender: TObject; Msg, UIN: String);
begin
// делаешь то, что тебе надо
end;


и присваиваешь это событие конкретному экземпляру после Login:
  ...
mas3[z].login;
mas3[z].OnMessageRecv := myOnMessageRecv;
...
 К началу страницы 
+ Ответить 
Unconnected
сообщение 30.01.2009 14:28
Сообщение #11


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Спасибо, работает smile.gif


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 11.02.2009 19:09
Сообщение #12


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Теперь возникла небольшая проблема, на коде

Код
mas3[z].Onserverdisconnect:=myOnserverdisconnect;


вылетает Incompatible types: 'Parameter lists differ'..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.02.2009 23:43
Сообщение #13


Гость






Как описывал myOnserverdisconnect покажи...
 К началу страницы 
+ Ответить 
Unconnected
сообщение 12.02.2009 19:15
Сообщение #14


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Код
Procedure MyOnserverdisconnect(sender:TObject);


Эта процедура описана в модуле главной формы, но вызывается из потока..

Код
mas3[z].Onserverdisconnect:=form1.myOnserverdisconnect;


Добавлено через 7 мин.
Всё,я догадался,в чём проблема, описание MyOnServerdisconneсt не совпадало с описанием Onserverdisconnect в TIcqClient. Надо было так:

Код
Procedure MyOnserverdisconnect(sender:TObject;Reason: Integer;  Description: string);


Сообщение отредактировано: Unconnected - 12.02.2009 19:23


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 13.02.2009 21:06
Сообщение #15


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Стала возникать ошибка на строке
Код
Procedure myonlogin(sender:tobject);
в классе формы. Ошибка
Цитата
[Pascal Error] Unit1.pas(95): E2065 Unsatisfied forward or external declaration: 'TForm1.myonlogin'
.

Использую в
Код
mas3[z].OnLogIn := myOnLogIn;


Код
Procedure myonlogin(sender:TObject);
begin
  ...
end;

Попробовал даже объявить новый класс и добавить обработчик туда, ошибка не исчезла.. Причём когда только добавил обработчик на событие - всё работало, а что потом произошло..

Сообщение отредактировано: Unconnected - 13.02.2009 21:06


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.02.2009 21:48
Сообщение #16


Гость






Цитата
Попробовал даже объявить новый класс и добавить обработчик туда, ошибка не исчезла..
Зачем новый класс? У тебя ж в сообщении об ошибке ясно сказано, что должно быть:
Procedure TForm1.myonlogin(sender:TObject);
begin
...
end;
, компилятор тебе говорит, что он не нашел реализации этого метода...
 К началу страницы 
+ Ответить 
Unconnected
сообщение 13.02.2009 22:07
Сообщение #17


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Благодарю,работает(как же блин всё просто оказывается)... good.gif

Ещё один сопутствующий вопрос: в TIcqClient событие "насильственного" отключения от сервера(по инициативе сервера) - это OnServerDisconnect как я понял?

Сообщение отредактировано: Unconnected - 13.02.2009 22:08


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.02.2009 22:18
Сообщение #18


Гость






Цитата
событие "насильственного" отключения от сервера(по инициативе сервера) - это OnServerDisconnect
Да, оно самое...
 К началу страницы 
+ Ответить 
Unconnected
сообщение 14.02.2009 20:40
Сообщение #19


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


А вот допустим если мне нужно узнать, находится ли мой номер в онлайне, можно сделать так:
if not(mas3[valid1[ab]].LoggedIn) then ...

?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.02.2009 23:39
Сообщение #20


Гость






Ну, откуда же я знаю, что такое у тебя valid1, например? Вообще принцип правильный, надо проверять поле LoggedIn...
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 11.07.2025 14:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"