查看完整版本: 文本域修改,是个基本的问题。但没发现错在那里?

pcode 2006-5-31 21:05

文本域修改,是个基本的问题。但没发现错在那里?

为什么我的函数不会改变文本域的内容?
这段是我的函数
static void Convert(FieldType *field )
{
       
        MemHandle textH;

        if (FldGetTextLength(field)>0){

                textH=FldGetTextHandle(field);

                if (textH){
                        char* s;
                        FldSetTextHandle(field,NULL);
                        s=MemHandleLock(textH);
                        s="test";
                        MemHandleUnlock(textH);
                        FldSetTextHandle(field,textH);
                        FldDrawField(field);

                }
        }

}
这段是人家的例子函数
static void ReverseField (FieldType *field)
{
        MemHandle textH;
       
        if(FldGetTextLength(field)>0)
        {
                textH=FldGetTextHandle(field);
                if(textH)
                {
                        char *str,*p,*q;
                        char temp;
                        int n;
                        FldSetTextHandle(field,NULL);
                        str=MemHandleLock(textH);
                        n=StrLen(str);
                        q=(n>0)?str+n-1:str;
                        for(p=str;p<q;++p,--q)
                        {
                                temp=*p;
                                *p=*q;
                                *q=temp;
                       
                        }
                        MemHandleUnlock(textH);
                        FldSetTextHandle(field,textH);
                        FldDrawField(field);
               
                }
       
        }

}

pcode 2006-5-31 21:06

谁能给我一个修改文本域的简单方法?

sinon 2006-6-1 01:19

s=MemHandleLock(textH);
s="test";
MemHandleUnlock(textH);

中对s赋值有问题,应该用StrCopy(s, "test");


其中还要注意s的长度不应该超过FIELD的允许内容的长度
sinon 编辑于 2006-5-31 17:19:29

pcode 2006-6-1 04:15

[quote]sinon 写道:

s=MemHandleLock(textH);
s="test";
MemHandleUnlock(textH);

中对s赋值有问题,应该用StrCopy(s, "test");


其中还要注意s的长度不应该超过FIELD的允许内容的长度[/quote]
谢谢。
另外知道如何对原来没有内容的文本域进行赋值吗?


ecool 2006-6-1 19:25

[quote]pcode 写道:

[quote]sinon 写道:

s=MemHandleLock(textH);
s="test";
MemHandleUnlock(textH);

中对s赋值有问题,应该用StrCopy(s, "test");


其中还要注意s的长度不应该超过FIELD的允许内容的长度[/quote]
谢谢。
另外知道如何对原来没有内容的文本域进行赋值吗?

[/quote]
最简单的方法就是直接用FldInsert()这个函数来插入文本到文本域中


FirstFan 2006-6-1 19:31

不需要简单吧,也不需要自己写啊
每次我的工程都会先引进自己常用的一组函数,其中就有这个
static Err SetFieldTextFromStr (FieldPtr field, Char *s, Boolean redraw)
{
        MemHandle h;
       
        h = FldGetTextHandle(field);
        if(h)
        {
                Err err;
                FldSetTextHandle(field, NULL);
                err = MemHandleResize(h, StrLen(s)+1);
                if(err!=errNone)
                {
                        FldSetTextHandle(field, h);
                        return err;
                }
        } else {
                h = MemHandleNew(StrLen(s)+1);
                if(!h)
                        return memErrNotEnoughSpace;
        }
       
        StrCopy((Char *)MemHandleLock(h), s);
        MemHandleUnlock(h);
       
        FldSetTextHandle(field, h);
        if(redraw)
                FldDrawField(field);
        return errNone;
}



pcode 2006-6-1 20:41

[quote]FirstFan 写道:

不需要简单吧,也不需要自己写啊
每次我的工程都会先引进自己常用的一组函数,其中就有这个
static Err SetFieldTextFromStr (FieldPtr field, Char *s, Boolean redraw)
{
        MemHandle h;
       
        h = FldGetTextHandle(field);
        if(h)
        {
                Err err;
                FldSetTextHandle(field, NULL);
                err = MemHandleResize(h, StrLen(s)+1);
                if(err!=errNone)
                {
                        FldSetTextHandle(field, h);
                        return err;
                }
        } else {
                h = MemHandleNew(StrLen(s)+1);
                if(!h)
                        return memErrNotEnoughSpace;
        }
       
        StrCopy((Char *)MemHandleLock(h), s);
        MemHandleUnlock(h);
       
        FldSetTextHandle(field, h);
        if(redraw)
                FldDrawField(field);
        return errNone;
}


[/quote]
好。受教了。觊觎你的函数库了开始。


FirstFan 2006-6-2 05:36

laf...
反正也不是我自己写的,光这个东西我就改过好几个版本,都是从其它源程序里面看来的,后来发现这个最好用就留这个版本了。
先FldDelete再FldInsert是最简单的,不过有时会有问题

geillizer 2006-6-2 05:56

这些是在CW中写的呢,还是在其他环境中写的呢?

遊戲人生 2008-6-1 02:26

写的不错,路过支持!!!!!!!!
页: [1]
查看完整版本: 文本域修改,是个基本的问题。但没发现错在那里?