CnPack Forum


 
Subject: cnvcl hexedit的bug?
veket
普通灌水员
Rank: 2



UID 67658
Digest Posts 0
Credits 51
Posts 21
点点分 51
Reading Access 10
Registered 2012-9-10
Status Offline
Post at 2012-9-14 20:12  Profile | Blog | P.M. 
cnvcl hexedit的bug?

程序运行过程中,动态更新hexedit的内容,如果原来的hexedit内容只有一行,但是更新的内容超过两行,那么第二行不会自动显示出来。是我用的不对么?还是hexedit的bug?
void TForm1::UpdateHexedtContent(void)
{
        UINT8        ucSndDat[1024];

        UINT32        udwFrmLen = 0,udwIndex;
//Frm TAG
        ucSndDat[udwFrmLen++] = 0x12;
       
//FRM Len.Current is fake valie
        ucSndDat[udwFrmLen++] = 0;

//FT + CR + TD
        ucSndDat[udwFrmLen++] = cbbFT->ItemIndex;
        ucSndDat[udwFrmLen++] = cbbCR->ItemIndex;
        ucSndDat[udwFrmLen++] = cbbTD->ItemIndex;

        if(cbbFT->ItemIndex == 3)        //It is ftResp, add ftResp Result field
        {
                ucSndDat[udwFrmLen++] = 0;        //Resp OK
        }
        else if(cbbFT->ItemIndex == 1)        //It is ftLog, add log into the frm buffer
        {
                UINT32 dwTextLen         = edtLog->GetTextLen();
                UINT8 *pucTextBuffer = new UINT8 [dwTextLen + 1];

                edtLog->GetTextBuf(pucTextBuffer,dwTextLen + 1);

                for(udwIndex = 0;udwIndex < dwTextLen;udwIndex++)
                {
                        ucSndDat[udwFrmLen++] = pucTextBuffer[udwIndex];
                }

                delete [] pucTextBuffer;
        ucSndDat[udwFrmLen++] = '\0';
    }


//Update the real FRM-LEN field
        ucSndDat[1] = udwFrmLen;

//Calculate the CRC
        ucSndDat[udwFrmLen++] = CMN_GetCRC(&ucSndDat[1],udwFrmLen - 2);  //When cal CRC, the FT-TAG and CRC should be discard,so CAL-CRC-LEN is frame len - 2

//Set buffer to the HexEdt's TMemoryStream
//**************************
//如果原来的内容是一行,但是此处ucSndDat的长度超过1行,那么第二行的内容不会自动刷出来。
//*****************************
        hxedtDat->MemoryStream->Clear();
        hxedtDat->MemoryStream->WriteBuffer(ucSndDat,udwFrmLen);
        hxedtDat->Repaint();
}
Top
veket
普通灌水员
Rank: 2



UID 67658
Digest Posts 0
Credits 51
Posts 21
点点分 51
Reading Access 10
Registered 2012-9-10
Status Offline
Post at 2012-9-14 22:11  Profile | Blog | P.M. 
发现是显示的bug

进一步实验发现,hexedt的第二行的数字实际上似乎是有的,但是不显示。如果此时focus hexedit,在最末位随便输入一个hex数字,这时前边的数字就全显示出来了。哪位维护cnvcl的高手帮忙看看这个问题吧。
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2012-9-17 09:39  Profile | Blog | P.M. 
好的我们查查看。
Top
veket
普通灌水员
Rank: 2



UID 67658
Digest Posts 0
Credits 51
Posts 21
点点分 51
Reading Access 10
Registered 2012-9-10
Status Offline
Post at 2012-9-20 08:20  Profile | Blog | P.M. 
系统环境CB2007 + WinXP

不知道这个问题是否得到确认?
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2012-9-25 11:16  Profile | Blog | P.M. 
查了一把,问题初步定位到这儿:

直接操作MemoryStream改变内容后,还需要调用一方法重新更新其Size,从而在Repaint时才能保证长度得到更新。我在新单元里增加了一个DataChange方法,WriteBuffer后调用此方法即可完成界面刷新(此方法包含了invalidate,故不需再repaint了)。

如果行的话,我把新的单元发你验证一下?通过后再提交。
改动后的单元在附件里。


Attachment: CnHexEditor.pas (2012-9-25 11:16, 43.8 K)
Download count 38
Top
veket
普通灌水员
Rank: 2



UID 67658
Digest Posts 0
Credits 51
Posts 21
点点分 51
Reading Access 10
Registered 2012-9-10
Status Offline
Post at 2012-9-26 08:36  Profile | Blog | P.M. 
谢谢,辛苦了

Top
veket
普通灌水员
Rank: 2



UID 67658
Digest Posts 0
Credits 51
Posts 21
点点分 51
Reading Access 10
Registered 2012-9-10
Status Offline
Post at 2012-9-26 08:55  Profile | Blog | P.M. 
嗯,改好了,谢谢。

Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2012-10-15 16:14  Profile | Blog | P.M. 
好。此改动已提交。
Top
 




All times are GMT++8, the time now is 2024-3-28 20:04

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.008844 second(s), 8 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP