掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
oleコントロールのウィンドウハンドルの取得に失敗しました (ID:43865)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
記載漏れ失礼しました。 客先のPCは、Win7 Proです。 恐らく32bitだと思うのですが、 今ちょっと分かりません… Win7 Proで動く環境と動かない環境があります。 ちなみに、MS Win Server 2008 x64 R2 SP1 SE のサーバ上では InkEditを含むフォームを開くと「クラスが登録されていません」という エラーが出ていましたが、 ご教授いただいたものを試してみましたら、エラーは起こりませんでした。 ただ、手入力ができない状態です。マウスを動かしても、 カーソルが出て、キーボード入力状態になってしまいます。 客先のPCでは試せないので、サーバ上で動作できれば 大丈夫かと思っているのですが…原因がはっきりしません。 以下、DEKOさんのInkEdit再びをそのまま引用させていただき、 インク入力タイムアウト時間のプロパティを追加しました。 見よう見まねなのですが… //------------------------- unit uInkEdit; interface uses Winapi.Windows, Winapi.Messages, Winapi.RichEdit, Vcl.Controls, Vcl.ComCtrls; type TInkMode = (IM_Disabled = 0, IM_Ink = 1, IM_InkAndGesture = 2); TInkInsertMode = (IEM_InsertAsText = 0, IEM_InsertAsInk = 1); TInkDisplayMode = (IDM_Ink = 0, IDM_Text = 1); TInkEditStatus = (IES_Idle = 0, IES_Collecting = 1, IES_Recognizing = 2); TInkEdit = class(Vcl.ComCtrls.TRichEdit) private function GetUseMouseForInput: Boolean; procedure SetUseMouseForInput(const Value: Boolean); function GetRecTimeOut: Integer; procedure SetRecTimeOut(const Value: Integer); protected procedure CreateParams(var Params: TCreateParams); override; published property UseMouseForInput: Boolean read GetUseMouseForInput write SetUseMouseForInput; property UseRecTimeOut: Integer read GetRecTimeOut write SetRecTimeOut; // インク入力タイムアウト時間 end; const InkEditClassName = 'INKEDIT'; IEC__BASE = WM_USER + $0200; EM_GETINKMODE = IEC__BASE + 1; EM_SETINKMODE = IEC__BASE + 2; EM_GETINKINSERTMODE = IEC__BASE + 3; EM_SETINKINSERTMODE = IEC__BASE + 4; EM_GETDRAWATTR = IEC__BASE + 5; EM_SETDRAWATTR = IEC__BASE + 6; EM_GETRECOTIMEOUT = IEC__BASE + 7; EM_SETRECOTIMEOUT = IEC__BASE + 8; EM_GETGESTURESTATUS = IEC__BASE + 9; EM_SETGESTURESTATUS = IEC__BASE + 10; EM_GETRECOGNIZER = IEC__BASE + 11; EM_SETRECOGNIZER = IEC__BASE + 12; EM_GETFACTOID = IEC__BASE + 13; EM_SETFACTOID = IEC__BASE + 14; EM_GETSELINK = IEC__BASE + 15; EM_SETSELINK = IEC__BASE + 16; EM_GETMOUSEICON = IEC__BASE + 17; EM_SETMOUSEICON = IEC__BASE + 18; EM_GETMOUSEPOINTER = IEC__BASE + 19; EM_SETMOUSEPOINTER = IEC__BASE + 20; EM_GETSTATUS = IEC__BASE + 21; EM_RECOGNIZE = IEC__BASE + 22; EM_GETUSEMOUSEFORINPUT = IEC__BASE + 23; EM_SETUSEMOUSEFORINPUT = IEC__BASE + 24; EM_SETSELINKDISPLAYMODE = IEC__BASE + 25; EM_GETSELINKDISPLAYMODE = IEC__BASE + 26; IECN__BASE = $0800; IECN_STROKE = IECN__BASE + 1; IECN_GESTURE = IECN__BASE + 2; IECN_RECOGNITIONRESULT = IECN__BASE + 3; var FInkEditModule: THandle; implementation { TInkEdit } procedure TInkEdit.CreateParams(var Params: TCreateParams); const dHideScrollBars: array[Boolean] of DWORD = (ES_DISABLENOSCROLL, 0); dHideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0); begin if FInkEditModule = 0 then begin FInkEditModule := LoadLibrary('InkEd.dll'); if FInkEditModule <= HINSTANCE_ERROR then FInkEditModule := 0; end; inherited CreateParams(Params); CreateSubClass(Params, InkEditClassName); with Params do begin Style := Style or dHideScrollBars[HideScrollBars] or dHideSelections[HideSelection]; WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW); end; end; function TInkEdit.GetUseMouseForInput: Boolean; begin result := SendMessage(Self.Handle, EM_GETUSEMOUSEFORINPUT, 0, 0) <> 0; end; procedure TInkEdit.SetUseMouseForInput(const Value: Boolean); begin SendMessage(Self.Handle, EM_SETUSEMOUSEFORINPUT, WPARAM(Value), 0); end; // インク入力タイムアウト時間 function TInkEdit.GetRecTimeOut: Integer; begin result := SendMessage(Self.Handle, EM_GETRECOTIMEOUT, 0, 0); end; procedure TInkEdit.SetRecTimeOut(const Value: Integer); begin SendMessage(Self.Handle, EM_SETRECOTIMEOUT, WPARAM(Value), 0); end; initialization FInkEditModule := 0; finalization if FInkEditModule <> 0 then FreeLibrary(FInkEditModule); end. procedure TForm1.FormCreate(Sender: TObject); begin RichEdit1.UseMouseForInput := True; RichEdit1.UseRecTimeOut := 1000; end; なにか原因がありますでしょうか?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.