![]() |
|
|
#1
|
|||
|
|||
![]() Всем привет. Столкнулся с одной проблемой.
В общем, мне надо повторять цикл до определённой точки. Есть StringGrid с айпи адресами. С помощью массива создаю вкладки и РДП(MSTSCLib_TLB) окна. После чего с циклом for to do подключаюсь к каждому айпи. Короче, надо по 2-3 айпи подключаться до последней вкладки Stringgrid. Удаляется окно и вкладка. После чего надо создать заново, но уже с новым айпи. Мучаюсь уже трое суток. Ничего не могу придумать, т.к. в делфи всего месяц, опыта нет. Для MSTSCLib_TLB достаточно цикла. Тут потоки не нужны, имхо. Оно и так может одновременно подключаться к n-ому числу адресов. Буду благодарен всем, кто хоть чем-то поможет. Спасибо. Последний раз редактировалось DimoK121, 08.12.2012 в 21:10. |
#2
|
||||
|
||||
![]() Во-первых вместо статических массивов (якобы максимально недостижимых размеров) лучше использовать динамические массивы или объекты классов TList/TStringList.
Во-вторых число 4, которое здесь означает "предел создаваемых вкладок" лучше не вшивать в код, а использовать в виде переменной. Потом пишешь единую процедуру которая делает следующее: Проверяет все ли строки StringGrid обработаны, если да - то выход из процедуры; Иначе проверяет есть ли свободные "слоты", если нет - то выход из процедуры; Иначе помечает очередную строку StringGrid как обработанную, создаёт новый "слот" (т.е. новую вкладку, TMsRdpClient6, инициализирует их и т.п.) после чего прыгает в начало процедуры и цикл повторяется. В процедуре "по дсиконнекту" уничтожаешь/освобождаешь "слот" и вызываешь вышеприведённую процедуру (которая создаст новый "слот" при наличии необработанных строк StringGrid-а и при наличии свободных "слотов"). Теперь как помечать, что строка StringGrid обработана - самый простой способ использовать переменную-курсор которая будет указывать (т.е. содержать индекс) на ещё не обработанную строку грида. Сначала эта переменная будет содержать 1 (так как Row=0 это у тебя шапка грида), а каждая "пометка на обработанность" будет увеличивать её на единицу, пока не выйдет за границу грида. Теперь как проверять, что "слот" свободный. Можно например при старте заполнить массив rdp пустым указателем nil, а после уничтожения какого-то объекта из этого массива сразу же присваивать туда nil (например используя FreeAndNil вместо просто Free), тогда достаточно просто пройтись в цикле по массиву в поисках элементов с пустым указателем nil. При использовании вместо массивов списков TList/TStringList можно при разрушении объекта вместо присваивания nil просто удалять его из списка, тогда если количество элементов в списке меньше "предела создаваемых вкладок" значит есть свободные "слоты". Ну в основном примерно так ![]() |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
DimoK121 (05.12.2012)
|
#3
|
|||
|
|||
![]() Спасибо большое за развёрнутый ответ. Жаль, что у меня не получится это реализовать, т.к. мало знаний( А время поджимает.
Проще сделать никак нельзя? |
#4
|
||||
|
||||
![]() Цитата:
![]() Собственно и переделывать там не много. |
#5
|
|||
|
|||
![]() Ответь в личке, пожалуйста
![]() |