powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / В чем ошибка?
4 сообщений из 4, страница 1 из 1
В чем ошибка?
    #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
В чем ошибка?
    #39779626
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666,

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

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

Замылился глаз, добавил еще один инкремент в индексы первых друх столбцов и все пошло как надо. Спасибо!
...
Рейтинг: 0 / 0
В чем ошибка?
    #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
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / В чем ошибка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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