Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2012, 23:00   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Обработка Стринггрида, дататаймпикер

ЗДраствуйте такая проблема, по коду нужно вставить дататаймпикеры в стринг грид с примером с которым я работаю их там дожно быть 4 штуки, количество вставляемых компанентов равно количеству встречаемых символов, ":"
Суть проблемы в том что если изначально указать количество строк (RowCount) в стринг гриде и в коде не увеличивать их то всё рисуется замечательно, а если в коде указать после каждой итерации добавления ешё одной строки в стринг грид то отрисовываются последнии два компанента. Подскажите как выдти из затруднения, привожу код:

Код:
temp:=SqlText;
    rcount:=0;
    While Pos(':', temp)>1 do
      begin
        DateTimePicker:=TDateTimePicker.Create(self);
        DateTimePicker.Parent:=Form1;
        DateTimePicker.Name:='DateTimePicker'+IntTOStr(rcount);
        Form1.StringGrid1.Objects[1, rcount]:=DateTimePicker;
        Form1.StringGrid1.Objects[1, rcount].AfterConstruction;
        R:= Form1.StringGrid1.CellRect(1, rcount);
        if (Form1.StringGrid1.Objects[1, rcount] is TControl) then
        with TControl(Form1.StringGrid1.Objects[1, rcount]) do
          if R.Right = R.Left then
             Visible:=false
             else
             begin
              InflateRect(R, -1, -1);
              OffsetRect(R, Form1.StringGrid1.Left+1, Form1.StringGrid1.Top+1);
              BoundsRect:=R;
             Visible:=true;
            end;
        inc(rcount);
        Form1.StringGrid1.RowCount:=rcount;
        delete(temp, Pos(':', temp), 1);
      end;
Dozent вне форума Ответить с цитированием
Старый 21.05.2012, 23:04   #2
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Блин проблема решена, поставил увеличение строк стринг грида перед прорисовкой всё отлично

Код:
temp:=SqlText;
    rcount:=0;
    While Pos(':', temp)>1 do
      begin
         //ñîçäà¸ì êîìïàíåíò
        Form1.StringGrid1.RowCount:=rcount+1;    // ZAMENA!!!!!!!!!!!
        DateTimePicker:=TDateTimePicker.Create(self);
        DateTimePicker.Parent:=Form1;
        DateTimePicker.Name:='DateTimePicker'+IntTOStr(rcount);
       // âñòàâëÿåì
        Form1.StringGrid1.Objects[1, rcount]:=DateTimePicker;
        Form1.StringGrid1.Objects[1, rcount].AfterConstruction;
        R:= Form1.StringGrid1.CellRect(1, rcount);
        if (Form1.StringGrid1.Objects[1, rcount] is TControl) then
        with TControl(Form1.StringGrid1.Objects[1, rcount]) do
        // åñëè ðàçìåð ÿ÷åéêè íå ðàâåí 0, òî äåëàåì åãî íåâèäèìûì
          if R.Right = R.Left then
             Visible:=false
             else
             begin
            // èíà÷å ðèñóåì åãî
              InflateRect(R, -1, -1);
              OffsetRect(R, Form1.StringGrid1.Left+1, Form1.StringGrid1.Top+1);
              BoundsRect:=R;
             // äåëàåì êîìïîíåíò âèäèìûì
             Visible:=true;
            end;
        inc(rcount);
//        Form1.StringGrid1.RowCount:=rcount;
        delete(temp, Pos(':', temp), 1);
      end;
Dozent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать UNDO для стринггрида Renok Общие вопросы Delphi 7 10.06.2011 19:46
как пересчитать ячейки стринггрида TotKtoNado БД в Delphi 7 17.04.2011 14:37
Рандомное заполнение массива и стринггрида Repac123456 Помощь студентам 5 09.11.2010 00:29
ширина колонки СтрингГрида Lisi4ka Общие вопросы Delphi 1 12.05.2009 09:37