お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"RE:TEditの操り方"

この発言は
#01264 ぺけでび さんのRE:TEditの操り方
に対するコメントです

 TEdit の上書きを全角文字に対応させてみました。 かなりメンドーなんですね。 unit Uts2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; // インスペクタで指定しました procedure Edit1KeyPress(Sender: TObject; var Key: Char); // コードをタイプして追加しました function KNJCHK(C: Char): Boolean; private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.DFM} // 文字入力があるたびに呼ばれる procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var c1,c2: Char; begin if (Length(Edit1.Text) <= 0) then exit; // 空の場合は実行しない c1 := Edit1.Text[Edit1.SelStart+1]; // カーソルの次の文字 c2 := Edit1.Text[Edit1.SelStart+2]; // カーソルの次の次の文字 if KNJCHK(Key) then begin // 入力は全角か? // 全角の場合 if (KNJCHK(c1)) or ((not KNJCHK(c1)) and (not KNJCHK(c2))) then begin // 'A'を全角で上書きすると'B'となる // 'AA'を全角で上書きすると'A'となる Edit1.SelLength := 2; // 2文字削除 Edit1.ClearSelection; end else begin // 'AB'を全角で上書きすると'C 'となる Edit1.SelLength := 3; // 3文字削除 Edit1.ClearSelection; Edit1.SelText := ' '; // 1つスペースを挿入 Edit1.SelStart := Edit1.SelStart-1; end; end else begin // 半角の場合 if KNJCHK(c1) then begin // 上書き位置は全角か? // 'A'を半角で上書きすると'A 'となる Edit1.SelLength := 2; // 2文字削除 Edit1.ClearSelection; Edit1.SelText := ' '; // 1つスペースを挿入 Edit1.SelStart := Edit1.SelStart-1; end else begin // 'A'を半角で上書きすると'B'となる Edit1.SelLength := 1; // 1文字削除 Edit1.ClearSelection; end; end; end; function TForm1.KNJCHK(C: Char): Boolean; begin Result := IsDBCSLeadByte( Byte(C) ); // 漢字なら真 // IsDBCSLeadByteはWin32APIヘルプを参照 end; end.  - FDELPHI MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/02/01 - Original document by ぺけでび 氏 ID:(YQJ03146)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum