Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / В чем ошибка? / 4 сообщений из 4, страница 1 из 1
27.02.2019, 09:57
    #39779616
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
Динамически строится сетка в DbGridEh.

Почему один код работает, а второй нет? Во втором случае, добавленные колонки отображаются после отрисованного месяца. По коду то ничего не меняется.

Рабочий:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 
 l:=0;
    a:=3;
    Z:=1;
  for i := Z to DaysInMonth(sDate) do
  begin
    j:=DayOfTheWeek(strtodate(inttostr(i)+'.'+inttostr(sMonth)+'.'+inttostr(sYear)));
    DGmonth.Columns.Add;
    DGmonth.Columns.Add;
    DGmonth.Columns[i+l].Title.Caption :=''+days[j]+#10#13+d.fds(inttostr(i)+'.'+inttostr(sMonth))+'| âõ.';
    DGmonth.Columns[i+l].Width:=34;
    DGmonth.Columns[i+l].FieldName:='din'+inttostr(i);
    DGmonth.Columns[i+l].Title.Hint:=d.fd(inttostr(i)+'.'+inttostr(sMonth)+'.'+inttostr(sYear));
    DGmonth.Columns[i+l+1].Title.Caption :=''+days[j]+#10#13+d.fds(inttostr(i)+'.'+inttostr(sMonth))+'| âûõ.';
    DGmonth.Columns[i+l+1].Width:=34;
    DGmonth.Columns[i+l+1].FieldName:='dout'+inttostr(i);
    DGmonth.Columns[i+l+1].Title.Hint:=d.fd(inttostr(i)+'.'+inttostr(sMonth)+'.'+inttostr(sYear));
    inc(l);
  end;

 for i := Z to DaysInMonth(sDate) do
begin
    DGmonth.Columns.Insert(a);
    DGmonth.Columns[a].Title.Color :=clBtnFace;
    DGmonth.Columns[a].Title.Caption := 'notein'+inttostr(i);
    DGmonth.Columns[a].Width:=1;
    DGmonth.Columns[a].Color:=DGmonth.Columns[a].Title.Color;
    DGmonth.Columns[a].FieldName:='notein'+inttostr(i);
    a:=a+3;
end;





Не рабочий:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
   
 l:=0; 
 a:=3;
  Z:=1;
  for i := Z to DaysInMonth(sDate) do
  begin
    j:=DayOfTheWeek(strtodate(inttostr(i)+'.'+inttostr(sMonth)+'.'+inttostr(sYear)));
    DGmonth.Columns.Add;
    DGmonth.Columns.Add;
    DGmonth.Columns[i+l].Title.Caption :=''+days[j]+#10#13+d.fds(inttostr(i)+'.'+inttostr(sMonth))+'| âõ.';
    DGmonth.Columns[i+l].Width:=34;
    DGmonth.Columns[i+l].FieldName:='din'+inttostr(i);
    DGmonth.Columns[i+l].Title.Hint:=d.fd(inttostr(i)+'.'+inttostr(sMonth)+'.'+inttostr(sYear));
    DGmonth.Columns[i+l+1].Title.Caption :=''+days[j]+#10#13+d.fds(inttostr(i)+'.'+inttostr(sMonth))+'| âûõ.';
    DGmonth.Columns[i+l+1].Width:=34;
    DGmonth.Columns[i+l+1].FieldName:='dout'+inttostr(i);
    DGmonth.Columns[i+l+1].Title.Hint:=d.fd(inttostr(i)+'.'+inttostr(sMonth)+'.'+inttostr(sYear));

    // Можно и DGmonth.Columns.Add;  результат одинаковый
    DGmonth.Columns.Insert(a);
    DGmonth.Columns[a].Title.Color :=clBtnFace;
    DGmonth.Columns[a].Title.Caption := 'notein'+inttostr(i);
    DGmonth.Columns[a].Width:=1;
    DGmonth.Columns[a].Color:=DGmonth.Columns[a].Title.Color;
    DGmonth.Columns[a].FieldName:='notein'+inttostr(i);
    a:=a+3;
    inc(l);
  end;



Результат:
...
Рейтинг: 0 / 0
27.02.2019, 10:19
    #39779626
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
Валерий666,

отладка в дебаге спасёт отца русской демократии.
Могу лишь направление подкинуть: в первом варианте формируются сначала столбцы по дням, а потом добавляются разделители. Индексы привязаны именно к этому алгоритму. Во втором варианте с индексами каша. В частности сначала 3 столбец формируется с шириной 1, а потом при следующей итерации цикла у этого столбца №3 устанавливается ширина 34.
...
Рейтинг: 0 / 0
27.02.2019, 10:33
    #39779632
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
goldmi45Валерий666,

отладка в дебаге спасёт отца русской демократии.
Могу лишь направление подкинуть: в первом варианте формируются сначала столбцы по дням, а потом добавляются разделители. Индексы привязаны именно к этому алгоритму. Во втором варианте с индексами каша. В частности сначала 3 столбец формируется с шириной 1, а потом при следующей итерации цикла у этого столбца №3 устанавливается ширина 34.

Замылился глаз, добавил еще один инкремент в индексы первых друх столбцов и все пошло как надо. Спасибо!
...
Рейтинг: 0 / 0
27.02.2019, 11:43
    #39779668
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
Валерий666Замылился глаз, добавил еще один инкремент в индексы первых друх столбцов и все пошло как надо. Спасибо! Чтобы глаз не мылился, надо поработать над стилем своего кода.
Запрети себе пользоваться индексами более одного раза в цикле:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// Плохо
    DGmonth.Columns[i+l].Width:=34;
    DGmonth.Columns[i+l+1].FieldName:='din'+inttostr(i);
    // Лучше
    ColumnIn := DGmonth.Columns.Add;    
    ColumnIn.Width:=34;
    ColumnIn.FieldName:='din'+inttostr(i);
    // итд
    ColumnOut := DGmonth.Columns.Add;
    // итд
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / В чем ошибка? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]