Delphi XEの警告文を消す方法

このQ&Aのポイント
  • Delphi XEにおいて、特定の警告文が表示される場合があります。これを解消する方法を紹介します。
  • 警告文の内容は、'SysUtils' ユニットの 'CharInSet' 関数で使用することを検討するように指示しています。
  • 具体的な解決方法としては、ソースコードの一部を変更することが必要です。
回答を見る
  • ベストアンサー

Delphi XEの警告文を消したい

[DCC 警告] Unit5.pas(216): W1050 set 式で WideChar がバイト char に縮小されました。'SysUtils' ユニットの 'CharInSet' 関数で使用することを検討してください。 との警告文が出ます。 ソースは procedure TForm5.Edit2KeyPress(Sender: TObject; var Key: Char); begin if not(key in['0'..'9','.',Char(VK_RETURN),Char(VK_BACK)]) then Key:=Char(0); end; です。何処をどうしたら良いのかさっぱりわかりません。 分かる人具体的に解決方法を教えてください、お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

CharInSetを使いましょう。 if not(key in['0'..'9','.',Char(VK_RETURN),Char(VK_BACK)]) then ↓ if not CharInSet(key, ['0'..'9','.',Char(VK_RETURN),Char(VK_BACK)]) then

taka0012
質問者

お礼

お陰さまで、一発解決できました。ありがとうございました。

関連するQ&A

  • Delphiプログラミングについて

    この内容ではいけないのでしょか? また、代わりの方法なども教えていただけると嬉しいです ボタン ラベル がフォーム1の上に1つずつあるだけです お願いいたします unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; i:integer; implementation {$R *.dfm} procedure hyouji; begin repeat form1.label1.caption:= 'strike'; until i = 10; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (KEY = VK_RIGHT) then i:=i+1; end; procedure TForm1.Button1Click(Sender: TObject); begin hyouji end; end.

  • delphi try文の使い方

    下記コードのようにエラーを回避したいのですが、try文が機能せずエラーになります。 procedure TForm1.Button1Click(Sender: TObject); var p:integer; begin edit1.text:='abc'; try p:=strtoint(edit1.Text); except p:=-1; end; label1.Caption:=inttostr(p); end; try文の使い方がわかりません。

  • delphi paintbox.invalidate

    ターボdeliphiのPaintBoxです procedure TForm1.Button1Click(Sender: TObject); begin PaintBox1.Invalidate; PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.Button2Click(Sender: TObject); begin PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.PaintBox1Paint(~~~~~ ボタン1でlineTo(100,100)は描画されず、ボタン2では描画されます。 つまりPaintBox1.Invalidateで再描画させている微妙なタイミングのせいでしょうか? 再描画が終了してからlineTo(100,100)を描画したいのですが、それを知るコマンド?関数?はありますか?

  • Delphi for文

    これって、Delphiのバグですか?特性ですか? procedure TForm1.Button1Click(Sender: TObject); begin test(); end; //-------------------------- procedure TForm1.test(); var k,x:integer; begin paintbox1.Canvas.pen.Color:=clBlack ; x:=0; for k:=1 to 3 do begin paintbox1.Canvas.moveto(x,0); paintbox1.Canvas.lineto(x,paintbox1.Height); x:=x+2; end; end; forループ内にブレークポイントを付けて「k」の値の変化を見ると、3,2,1と逆順になります。 「x:=x+2」を「x:=x+k」に変更すると、1,2,3と普通の順になります。 なぜ、こうなるのか? 対処法はありますか? Delphi Ver6・ターボDelphi どちらも同じ状況です。

  • delphiで検索機能を作成したいのですが・・・

    Edit1に数字を打ち込むとMemo1に表示されている同じ数字にカーソルが向かうようにしたいのですが procedure TForm1.Button1Click(Sender: TObject); begin FindAndSel(Edit1.Text,Memo1); end; としてしまうと、同じ数字があった場合でも下の行に移らずに同じ行を参照し続けてしまいます。 検索で表示されたそこから先を更に検索するにはどのようにすれば良いのでしょうか? また、001と打ってしまうと001 0012の両方が検索に引っ掛かってしまいますが完全に一致した場合のみ表示されるようにするにはどうすれば宜しいのでしょうか? ご存じの方がいらっしゃればご教授お願いします。また、このHPが分かりやすいなどありましたらお教えください。

  • DLLサンプルプログラムが動きません

    Delphi XE5 starter で、 http://www39.atwiki.jp/kgh07155/pages/28.html を参考にして以下のようなプログラムを作りました。 コンパイルはできたのですが、Button1をクリックすると「TDllFormリソースが見つかりません」というエラーメッセージが出ます。 どういう風に修正すればいいのでしょうか? //***************************** //SamoleUnit2.pasの内容 unit Unit_Sample2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} function ShowDLLForm(hOwner: HWND): TModalResult; stdcall; external 'DLLSample.dll'; procedure ShowDLLForm2; external 'DLLSample.dll'; // ここまで、DLLを呼び出すための記述。 procedure TForm1.Button1Click(Sender: TObject); begin ShowDLLForm(Application.Handle); // DLL側でフォームを作成した後、 // 通常のフォームのShowModalメソッドと同じ動作をして // 作成したフォームを破棄。 end; procedure TForm1.Button2Click(Sender: TObject); begin ShowDLLForm2; // DLL側でフォームを作成した後、 // 作成したフォームを表示。 end; end. //******************************** //DllSample.dprの内容 library DLLSample; uses System.SysUtils, System.Classes, Windows, Forms, Controls, Unit_DLLForm in 'Unit_DLLForm.pas' {Form1}, Unit_Sample2 in 'Unit_Sample2.pas' {Form2}; type TDllForm = class(TForm) end; {$R *.res} function ShowDLLForm(hOwner: HWND): TModalResult; stdcall; var DllForm:TDllForm; begin Application.Handle := hOwner; // 呼び出し元の情報をDLL側が受け取る。 DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。 // フォームに配置された各オブジェクトも、自動で作成される。 Result := DllForm.ShowModal; // 返し値を設定。 DllForm.Free; // DLL側で作成したフォームを破棄。 Application.Handle := 0; // 呼び出し元の情報を破棄。 end; procedure ShowDLLForm2; var DllForm:TDllForm; begin DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。 DllForm.Show; // 作成したフォームを表示。 end; exports ShowDLLForm, ShowDLLForm2; begin end. //******************************** //unit_DLLForm.pasの内容 unit Unit_DLLForm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} end.

  • Delphi XE5をアップデートしたら(2)

    前回アップデートしたら例外処理がおかしくなったという質問をしましたが、 あれから、いろいろやっていたら、exeファイルから実行すると正常にエラーメッセージが出て、RAD Studioから実行すると(デバッグモード?)、ShowMessageのエラーメッセージが出ないことがわかりました。 もしかしたらupdateは関係ないかもわかりません。 (今となっては検証しようがありません) でも、これってデバッガモード(?)の正常な動作なんでしょうか? //前回の質問 Delphi Xe5 Starterを使っています。 今日update2をインストールしたら、動作がおかしくなりました。 プログラムは次の通りです。 ------------------------------------------------- procedure TForm1.TestDoButtonClick(Sender: TObject); var Rep, pattern: string; begin pattern := FindEdit.Text; Rep := ReplaceEdit.Text; try Memo2.Lines.Text := TRegEx.Replace(Memo1.Lines.Text, pattern, Rep, []); except ShowMessage('正規表現にエラーがあります'); end; end; ---------------------------------- たしか、アップデートする前には正規表現にエラーがあれば、「正規表現にエラーがあります」が表示されたはずですが、システム?のエラー表示が出て、プログラムが停止します。 どこか間違ってますか?

  • Delphiで論理積の足し算?

    Delphiでa=17を 0x0Fで論理積したものにb=2を足したいのですが [DCC エラー] SDIMAIN.pas(92): E2015 この型には指定した演算子は使えません となります。Integer型の論理積や足し算をしてInteger型に代入する方法はありますか? procedure TSDIAppForm.Button1Click(Sender: TObject); var a, b, c : Integer; begin a := 17; b := 2; c := (a and #$0F) + b; //c := a + b; ShowMessage(Format('c=%6d', [c])); end;

  • 【delphi】クラスの継承、互換性について

    //Base.pas TSituation = class(TObject) public  procedure Update;virtual;abstract;  procedure Reflect;virtual;abstract; end; //Title.pas TSceneTitle = class(TSituation) private  ・  ・  ・ public  constructor Create;  destructor Destroy;override;  procedure Update;override;  procedure Reflect;override; end; //main.pas(メインフォーム) unit main; interface uses  ・・・, Base, Title;    ・    ・    ・ var  fm_main: Tfm_main;  Situation: TSituation; --------------------------------------------------- こう、きちんとクラスの宣言も継承もしているのに、(しているはず Situation := TSceneTitle.Create; とすると互換性がないといってコンパイルエラーになります。 なにかおかしいところがあるのでしょうか。

  • Delphiのフォーカスのデータの取得。

     嬉しくって、質問を締めちゃいました。 ごめんなさい、書き込んでくれる予定だった、ご主人様ぁ~♪。 数字のフォーマットは、 procedure TForm1.TextFormat(Sender: TObject); var i : Integer; begin  i := StrToInt( TEdit(Sender).text );  TEdit(Sender).Text := Format('%.2d',[i]); end; こんな感じにできました。 数行でこんなすごい事ができるなんて、信じられません! まだまだ、例外処理がありますが、がんばります!! ここまでは私の成長の報告で、次が本題です。^w^えへへぇ。 細かい用法や単語の説明ではなく、全体的なソフトの作り方を説明しているHPや、ソースが見られる簡単なソフトはないでしょうか? Delphiのソース付きのソフトもいくつか見ましたが、やはり初心者には敷居が高くって、もっとシンプルなものでいいのですが。 これからもがんばれるために、ご主人様よろしくおねがいますぅ。

専門家に質問してみよう