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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сократить запись обращений к StringGrid, если их много 
V
    Опции темы
vl1639
Дата 25.1.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как сократить запись обращений к StringGrid если их много.  В программе для введения данных используются таблицы типа  StringGrid, размещенные на разных страницах TabSheet одной панели PageControl.   При первоначальной загрузке программы  надо заполнить часть столбцов(строк) однотипной информацией  (типа номера меток...). Можно ли свернуть в циклическую процедуру  обращения к StringGrid -ам, которые, например, заканчиваются номерами от 1 до 10 (StringGrid1...StringGrid10).
PM MAIL   Вверх
Rrader
  Дата 26.1.2009, 09:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Первый способ - проставляешь всем гридам Tag, соответствующий номеру (1..10)
Код

procedure TForm1.FormCreate(Sender: TObject);
var
  I, J, K: Integer;
begin
  for K := 0 to ControlCount - 1 do
    if (Controls[K] is TStringGrid) and (Controls[K].Tag in [1..10]) then
      with (Controls[K] as TStringGrid) do
        for I := 0 to ColCount - 1 do
          for J := 0 to RowCount - 1 do
            Cells[I, J] := IntToStr(I + J);
end;

Более наглядный способ, но со старыми версиями Дельфи несовместим:
Код

procedure TForm1.FormCreate(Sender: TObject);
type
  TGridArray = array of TStringGrid;
var
  Grids: TGridArray;
  Grid: TStringGrid;
  I, J: Integer;
begin
  Grids := TGridArray.Create(StringGrid1, StringGrid2, StringGrid3,
    StringGrid4, StringGrid5, StringGrid6, StringGrid7, StringGrid8,
    StringGrid9, StringGrid10);
  for Grid in Grids do
    with Grid do
      for I := 0 to ColCount - 1 do
        for J := 0 to RowCount - 1 do
          Cells[I, J] := IntToStr(I + J);
end;



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
vl1639
Дата 27.1.2009, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо! У меня Delphi 6 и второй вариант не работает, выдаются ошибки в каждой строке, хотя оператор TGridArray.Create она понимает, но в каком-то другом смысле. 
Первый вариант компиляцию проходит без ошибок, но пока ничего не выводит в ячейки - пытаюсь разобраться.

Это сообщение отредактировал(а) vl1639 - 27.1.2009, 07:49
PM MAIL   Вверх
Rrader
  Дата 27.1.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Цитата(vl1639 @  27.1.2009,  13:42 Найти цитируемый пост)
но пока ничего не выводит в ячейки - пытаюсь разобраться.

Не забыл про Tag?
Цитата(Rrader @  26.1.2009,  15:37 Найти цитируемый пост)
Первый способ - проставляешь всем гридам Tag, соответствующий номеру (1..10)




--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
vl1639
Дата 27.1.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мне надо масштабировать ячейки Grid-ов по результатам определения используемого пользователем фонта. Все работает нормально, если все имееющиеся 12 Grid-ов масштабировать поочередно. Как уже писал,есть соблазн свернуть эти процедуры в одну. С нанесением эквивалентных меток по Вашему первому способу все работает, а с масштабированием  заминка. У меня такая последовательность дочерних объектов на форме PageConst1  -  PageControl1.TabSheet(8 страниц).StringGrid(12 штук, разбросанные по страницам). Попробовал - и пока не получается. Ни компилятор, ни исполнение претензий не имеют, но не масштабируется.
Код

Uses  ...., MXGrid, Grids;
...........
procedure TPageConst1.FormActivate(Sender: TObject);
var
 k, i :byte;
 DefaultColWidth:TCustomDecisionGrid;
 DefaultRowHeight:TCustomDecisionGrid;
begin
{масштабирование ячеек таблиц для малого фонта, 1 - это малый фонт у меня}
if (fnt_tek=1) then with PageControl1 do
 begin
  for K := 0 to 7 do 
    if ((Controls[K] is TTabSheet) and (Controls[K].Tag in [1..8])) then 
    for i := 0 to 11 do 
     if ((Controls[i] is TStringGrid) and (Controls[i].Tag in [1..12])) then 
      with (Controls[i] as TStringGrid) do
         begin DefaultColWidth:=54;
               DefaultRowHeight:=19; 
         end;
 end;
end;


Чувствую, что я чересчур наворочал. Нормально все работает, если

Код

with PageConst1 do
begin
 StringGrid1.DefaultColWidth:=54;
 StringGrid1.DefaultRowHeight:=19;
 StringGrid2.DefaultColWidth:=54;
 StringGrid2.DefaultRowHeight:=19;
// и так далее до 12-ти
end;

захотелось свернуть и въехал в тупик.


Это сообщение отредактировал(а) vl1639 - 27.1.2009, 18:06
PM MAIL   Вверх
Rrader
  Дата 27.1.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Код

procedure TForm1.Button1Click(Sender: TObject);
var
  I, J: Integer;
begin
  with PageControl1 do
    for I := 0 to PageCount - 1 do
      with Pages[I] do
        for J := 0 to ControlCount - 1 do
          if (Controls[J] is TStringGrid) then
            with Controls[J] as TStringGrid do
            begin
              DefaultColWidth := 54;
              DefaultRowHeight := 19;
            end;
end;

Тут все гриды на всех вкладках затрагиваются. Если нужна фильрация - то через Tag.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
vl1639
Дата 28.1.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Масштабирование ячеек Грида работает по последнему варианту. Нанесение меток по первичному варианту работало на простом примере, стал переносить в программу по типу последнего варианта для, например, на Гридов [2,3,5..9] - заклинило. 
Код

with PageControl1 do
  for I := 0 to PageCount - 1 do
    with Pages[I] do
      for J := 0 to ControlCount - 1 do
        if (Controls[J] is TStringGrid) and (Controls[J].Tag in [2,3,5..9]) then
           with (Controls[J] as TStringGrid) do
             for K := 1 to RowCount - 1 do Cells[0, K] := IntToStr(K);

Но могу обойтись без. Что имелось в виду под последними версиями Дельфи, где все прозрачнее и проще - .NET? 

PM MAIL   Вверх
Rrader
  Дата 28.1.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Цитата(vl1639 @  28.1.2009,  15:44 Найти цитируемый пост)
стал переносить в программу по типу последнего варианта для, например, на Гридов [2,3,5..9] - заклинило. 

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


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
vl1639
Дата 28.1.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Думал, что смысл кодов понятен. У Гридов (не у всех, а выборочно) хочу оцифровать первый(нулевой) столбец, за заклинило извиняюсь. Просто столбцы остаются пустыми, ошибок не выдается. Где неправильность в  приведенном мной тексте - не вижу. Значит смысл кодов понимаю с ошибками. 
На форум сегодня попадаю с трудом.
PM MAIL   Вверх
Rrader
  Дата 28.1.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Цитата(vl1639 @  28.1.2009,  15:44 Найти цитируемый пост)
 Нанесение меток по первичному варианту работало на простом примере, стал переносить в программу по типу последнего варианта

Значит стоит внимательно посмотреть, чем отличается простой проект, где все работает, от твоего...


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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