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);
}
}
}
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是最简单的,不过有时会有问题