Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.12.2012, 15:47
DimoK121 DimoK121 вне форума
Прохожий
 
Регистрация: 04.12.2012
Сообщения: 3
Репутация: 10
По умолчанию for to do

Всем привет. Столкнулся с одной проблемой.

В общем, мне надо повторять цикл до определённой точки.
Есть StringGrid с айпи адресами. С помощью массива создаю вкладки и РДП(MSTSCLib_TLB) окна. После чего с циклом for to do подключаюсь к каждому айпи.
Короче, надо по 2-3 айпи подключаться до последней вкладки Stringgrid.



Удаляется окно и вкладка. После чего надо создать заново, но уже с новым айпи.
Мучаюсь уже трое суток. Ничего не могу придумать, т.к. в делфи всего месяц, опыта нет.

Для MSTSCLib_TLB достаточно цикла. Тут потоки не нужны, имхо. Оно и так может одновременно подключаться к n-ому числу адресов.

Буду благодарен всем, кто хоть чем-то поможет.
Спасибо.

Последний раз редактировалось DimoK121, 08.12.2012 в 21:10.
Ответить с цитированием
  #2  
Старый 05.12.2012, 06:27
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Во-первых вместо статических массивов (якобы максимально недостижимых размеров) лучше использовать динамические массивы или объекты классов 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  
Старый 05.12.2012, 07:50
DimoK121 DimoK121 вне форума
Прохожий
 
Регистрация: 04.12.2012
Сообщения: 3
Репутация: 10
По умолчанию

Спасибо большое за развёрнутый ответ. Жаль, что у меня не получится это реализовать, т.к. мало знаний( А время поджимает.

Проще сделать никак нельзя?
Ответить с цитированием
  #4  
Старый 05.12.2012, 08:11
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от DimoK121
Спасибо большое за развёрнутый ответ. Жаль, что у меня не получится это реализовать, т.к. мало знаний( А время поджимает.

Проще сделать никак нельзя?
Ну это я описал по-моему самый простой вариант
Собственно и переделывать там не много.
Ответить с цитированием
  #5  
Старый 05.12.2012, 09:06
DimoK121 DimoK121 вне форума
Прохожий
 
Регистрация: 04.12.2012
Сообщения: 3
Репутация: 10
По умолчанию

Ответь в личке, пожалуйста
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025