Тема: for to do
Показать сообщение отдельно
  #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 просто удалять его из списка, тогда если количество элементов в списке меньше "предела создаваемых вкладок" значит есть свободные "слоты".

Ну в основном примерно так
Ответить с цитированием