○Textの入力文字チェック
▼TextのKeyReleaseイベントを取得して
改行と8文字以上の文字が入力された場合は削除されます。
#include <X11/StringDefs.h>
#include <X11/Intrinsic.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/AsciiText.h>
//Textウィジットから文字列を取得
void getStr(Widget w,char*str){
char*st;
Arg args[1];
XtSetArg(args[0],XtNstring,(XtArgVal)&st);
XtGetValues(w,args,1);
strcpy(str,st);
}
//Textウィジットに文字を入れる
void setStr(Widget w,char*str){
Arg args[1];
XtSetArg(args[0],XtNstring,(XtArgVal)str);
XtSetValues(w,args,1);
}
//テキストが入力された時の動作
void Edit1Callback( Widget w, XtPointer cld, XtPointer cad ){
}
//テキストで押されたキーが戻る時の動作
void Edit1KeyRelease( Widget w, caddr_t client_data, XEvent *event ){
//カレットの位置を取得して保存
int insertPos=XawTextGetInsertionPoint(w);
char str[128]="";
getStr(w,str);
//8文字以上の長さがあれば消す
if(strlen(str)>8){
insertPos--;
int i;
for(i=insertPos;i<strlen(str);i++) str[i]=str[i+1];
}
//文字列中に改行があれば消す
char*pos=str;
while(*pos){
if(*pos=='\n'){
while(*pos++=*(pos+1));
insertPos--;
break;
}
pos++;
}
setStr(w,str);
//カレットの位置を復元
XawTextSetInsertionPoint(w,insertPos);
}
main( int argc, char **argv )
{
XtAppContext app_context;
Widget top, form;
top = XtVaAppInitialize( &app_context, "test", NULL, 0, &argc, argv, NULL,
//XtNwidth,500,
//XtNheight,500,
NULL);
form = XtVaCreateManagedWidget("form",formWidgetClass,top,NULL);
//テキストの作成
Widget edit1 = XtVaCreateManagedWidget("edit1",//ウィジット名
asciiTextWidgetClass,//クラスを指定
form,
XtNeditType,XawtextEdit,//読み書き可能
XtNecho,True,//入力文字を表示
XtNwidth,200,//幅と高さ
XtNheight,50,
XtNborderWidth,1,//境界線
NULL);
//テキストボックスにテキストを入れる
setStr(edit1,"testTEXT");
//カレットを文字列の最後尾に移動
XawTextSetInsertionPoint(edit1,strlen("testTEXT"));
//XawTextSetSelection(edit1,1,strlen("testTest"));//テキストを選択
XtAddCallback( XawTextGetSource(edit1), XtNcallback,Edit1Callback, NULL );//コールバック関数を登録
XtAddEventHandler(edit1, KeyReleaseMask,False,(XtEventHandler)Edit1KeyRelease,NULL);//イベントのコールバック関数の登録
XtRealizeWidget( top );
XtAppMainLoop( app_context );
}
▲トップページ
>
Linux と C