○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