Как лучше всего добавить индикатор в столбце cxGrid? - PullRequest
0 голосов
/ 30 августа 2011

Я добавляю индикатор прогресса в каждую строку столбца табличного представления моей первой таблицы. Как я это делаю => Я поместил 4 индикатора в форму и btvArrProgGetProperties(TcxCustomGridTableItem *Sender, TcxCustomGridRecord *ARecord, TcxCustomEditProperties *&AProperties) присваивание свойств определенной строке путем изменения помещенных свойств индикатора выполнения. вот мой код

void __fastcall TfMain::btvArrProgGetProperties(TcxCustomGridTableItem *Sender, TcxCustomGridRecord *ARecord,
          TcxCustomEditProperties *&AProperties)
    {
          if ( StrToInt(ARecord->Values[ARecord->RecordIndex,1])==4 ){
            ARecord->Values[ARecord->RecordIndex,0]=100;
            AProperties=pCancel->Properties;
          }
          else
            if ( StrToInt(ARecord->Values[ARecord->RecordIndex,1])==2) {
                ARecord->Values[ARecord->RecordIndex,0]=100;
                AProperties=pDep->Properties;
          }
              else  {

                  if (StrToInt(ARecord->Values[ARecord->RecordIndex,1])==1) {
                        if ((ARecord->Values[ARecord->RecordIndex,7])!=0 && (ARecord->Values[ARecord->RecordIndex,12])!=0) {
                            //now time
                            nwTm=Now().FormatString("hh:mm:ss");
                            //get dep time
                            dpTm=StrToDateTime(ARecord->Values[ARecord->RecordIndex,7]);
                            dpTm.DecodeTime(&dpH,&dpM,&dpS,&dpMS);
                            //get reg time
                            rgTm=StrToDateTime(ARecord->Values[ARecord->RecordIndex,12]);
                            //find difference between dep and reg
                            dif=(1.0 + Double(dpTm)-Double(rgTm));
                            //get difference hours and mins
                            dif.DecodeTime(&difH,&difM,&difS,&difMS);
                            //diff between dep and reg in seconds
                            pReg->Properties->Max=difH*3600+difM*60+difS;
                            nwTm=Now().FormatString("hh:mm:ss");
                            nwTm.DecodeTime(&nwH,&nwM,&nwS,&nwMS);

                            if ((dpH>nwH) || ((dpH>nwH) && (dpM>=nwM ||dpM<=nwM)) || (dpH==nwH && dpM>nwM)  ) {
                                fltRem =(1.0 + Double(dpTm)-Double(nwTm));
                                fltRem.DecodeTime(&remH,&remM,&remS,&remMS);
                                _result=remH*3600+remM*60+remS;


                                pReg->Properties->Text=getTimeBySecs(_result);
                                ARecord->Values[ARecord->RecordIndex,0]=pReg->Properties->Max-_result;
                                pReg->Position=- _result;
                            }
                            else
                            {
                                    pReg->Properties->Max=100;
                                    ARecord->Values[ARecord->RecordIndex,0]=100;
                                    pReg->Properties->Text="Готово";

    /*
                                        ARecord->Values[ARecord->RecordIndex,0]=pReg->Properties->Max;

                                        pReg->Position=pReg->Properties->Max;

    */
                            }
                            AProperties=pReg->Properties;

                        }
                  }

            }

    }

Я думаю, что это не очень хороший подход для решения моей проблемы (добавление индикатора выполнения в столбец, для которого его позиция изменяется динамически), потому что, когда я нажимаю на строку строки, позиция индикатора прогресса изменяется из-за последнего значения, установленного в прогрессбар !!

Я предпочитаю динамически создавать имя набора индикаторов выполнения и другие свойства для него во время выполнения и назначать определенную строку в событии GetProperties. Какой подход является лучшим? Есть ли демоверсия по этому вопросу? Если да, не могли бы вы поделиться, пожалуйста! Заранее спасибо!

...