~katsuhiko メッセージボード

back 1251-1300

1301-1350

1351-1400


1350 Re: AutoIndent コメント数:  0件
  本田勝彦   |  2001/06/23 (土) 00:07
 http://member.nifty.ne.jp/~katsuhiko
> ところをいじればいいのでしょうが、ちょっと自信がないです(^^;)。ソースを
> いじらずにアプリで対応できればその方がよいのですが。

結構大変だったりします(^^;

全角空白の数を返す関数の実装と、それを挿入するには、現在のところ
ソースコード書き換えしかありません。

この辺も、将来のバージョンの参考にさせて頂きたいと思います。




1349 Re^4: キーの割り当てについて コメント数:  0件
  本田勝彦   |  2001/06/23 (土) 00:04
 http://member.nifty.ne.jp/~katsuhiko
> TurboPowerからサンプル版はダウンロード出来たかと思いますが、サンプル版にはソースはついていません。

あら、残念ですね。

> お手本のエディタをダウンロードしてみました。
> 良く出来ているというか、表示設定用のたくさんのコンポーネント..力技ですね(^^;

TFountain もあぁなったら良いなぁという思いはあるのですが(^^;

> DOSの時代には一生懸命コードを書いていたのですがDelphiに染まってからは目的のコンポーネントを探すことばかりで複雑なコードは書けなくなってしまいました。

ん〜もったいない。

> やはり、最終的には痒いところに手が届くTEditorを使いたいのでキー割り当て機能の実装を心待ちにしております。

長い目でよしなにお願い致します。(^^;



1348 Re: トークンについて コメント数:  0件
  本田勝彦   |  2001/06/23 (土) 00:02
 http://member.nifty.ne.jp/~katsuhiko
2.02 の頃、
> toUrl = Char(20);
> toMail = Char(21);
でした。

2.10 以降は、heFountain.pas で
> toUrl = Char(21);
> toMail = Char(22);

となっています。

デバッガが見ている .dcu が古いままなのではないでしょうか?
該当プロジェクトを開いて、Delphi のメニューにある [プロジェクト|再構築]
を実行されてみてはいかがでしょう?



1347 Re^2: ダブルクリックによる単語の選択 コメント数:  0件
  本田勝彦   |  2001/06/22 (金) 23:58
 http://member.nifty.ne.jp/~katsuhiko
> Parser.NewData(Editor1.ListString[Row], Editor1.ListData[Row]);

ここを

>with Editor1 do
> Parser.NewData(ExpandTab(ListString[Row], ListData[Row]);

とするとうまく行くと思います。ヘルプファイルの SelectTokenxxxx のトピックも
参考にして見て下さいね。




1346 Re^3: キャレットを非表示に コメント数:  0件
  本田勝彦   |  2001/06/22 (金) 23:55
 http://member.nifty.ne.jp/~katsuhiko
> 何やら難しそうなことをしなければならないようなので,諦めました。
> どうもありがとうございました。

まぁ、そぉいわんと(^^;
http://compodev.at.infoseek.co.jp/arc/shibaeditor.lzh
参考にしてみて下さい。ShowCaret プロパティを False にすると
キャレットが表示されない TShibaEditor です。




1345 AutoIndent コメント数:  1件
  ゆうきひろ  | 2001/06/22 (金) 23:09
 http://homepage2.nifty.com/ultla7/mozart/_start.htm
 AutoIndent するとき現在行に全角空白がある場合、次の行では半角空白では
なく、そのまま全角空白を挿入するにはどうしたらよいでしょう?
 procedure TEditor.WMChar(var Message: TWMChar);の AutoIndent に関する
ところをいじればいいのでしょうが、ちょっと自信がないです(^^;)。ソースを
いじらずにアプリで対応できればその方がよいのですが。



1344 Re^3: キーの割り当てについて コメント数:  1件
  Mightien  | 2001/06/22 (金) 17:14
 http://www.milley.net
早速の御回答ありがとうございます。

TurboPowerからサンプル版はダウンロード出来たかと思いますが、サンプル版にはソースはついていません。

お手本のエディタをダウンロードしてみました。
良く出来ているというか、表示設定用のたくさんのコンポーネント..力技ですね(^^;
TurboPowerのコンポーネントはもっとエレガントな作りになっていますが、
難しいことを避けたい私にとってはこのコンポーネントのような方式が嬉しい気がします。
DOSの時代には一生懸命コードを書いていたのですがDelphiに染まってからは目的のコンポーネントを探すことばかりで複雑なコードは書けなくなってしまいました。
とりあえずは紹介していただいたコンポーネントをベースにすることも検討します。
やはり、最終的には痒いところに手が届くTEditorを使いたいのでキー割り当て機能の実装を心待ちにしております。



1343 トークンについて コメント数:  1件
  海苔巻  | 2001/06/22 (金) 14:33
こんにちは。海苔巻といいます。
今まで TEditor 2.02 を使っていましたが
Ver 2.10が出たというので早速ダウンロードして
インストールしてみました。が、トークンがちょっと
変なのです。

TokenFromPos でメールアドレスとホームページの
アドレスを取得するようにしていたのですが toUrl
toMail の値が違うのです。

C := Editor1.TokenFromPos(aPos);
で語句の種類を取得します。デバッガで見たところ
実際の C の値は、その語句がURLなら#21、メール
アドレスなら#22なのですが、監視式にtoUrl、toMail
を追加してその値を見てみるとそれぞれ#20,#21なの
です。
説明がうまくないですが状況は伝わるでしょうか。

これはこちらだけの症状かどうか知りたかったので
書き込みしました。
よろしくお願いします。



1342 Re: ダブルクリックによる単語の選択 コメント数:  1件
  清明  | 2001/06/22 (金) 10:39
(続き)
新バージョンで
Parser:TFountainParser;
begin
Col := Editor1.Col;
Row := Editor1.Row;
Parser := Editor1.ActiveFountain.ParserClass.Create(
Editor1.ActiveFountain);
try
Parser.NewData(Editor1.ListString[Row], Editor1.ListData[Row]);
while Parser.NextToken <> toEof do
begin
l := Length(Parser.TokenString);
if (Col >= Parser.SourcePos)
and (Col < Parser.SourcePos + l) then
begin
(Sender as TEditor).Col := Parser.SourcePos;
(Sender as TEditor).SelLength := l;
break;
end;
end;
finally
Parser.Free;
end;
・・・・・・・・
とした場合はタブが混じっていると上手く選択できません。
Parser.SourcePosの扱いが変わったのでしょうか?



1341 ダブルクリックによる単語の選択 コメント数:  2件
  清明  | 2001/06/22 (金) 10:38
お世話になってます。
ダブルクリックによる単語の選択で、以前のバージョン
Parser:TEditorParser;
begin
Col := Editor1.Col;
Row := Editor1.Row;
s := Editor1.ExpandTab(Editor1.ListString[Row]);
Parser := TEditorParser.Create(s);
try
while Parser.Token <> toEof do
・・・・・
と、やっていたころはタブのコードが混じっていてもOKだったのですが
(続く)



1340 Re^2: キャレットを非表示に コメント数:  1件
  しばやん  | 2001/06/22 (金) 03:15
 http://hp.vector.co.jp/authors/VA017625/
> 何かキャレットを表示非表示にするプロパティをこしらえて、CaretShow
> メソッドでそのプロパティ値を見て ShowCaret API を呼ぶ呼ばない
> という処理でいけると思いますよ。

何やら難しそうなことをしなければならないようなので,諦めました。
どうもありがとうございました。



1339 Re: キャレットを非表示に コメント数:  2件
  本田勝彦   |  2001/06/22 (金) 01:31
 http://member.nifty.ne.jp/~katsuhiko
> Enabled := Trueなので,クリックをするとキャレットが表示されてしまうの
> ですが,それを非表示にすることはできないでしょうか。URLをクリックする
> ことはできるけど,キャレットは表示させたくないという要望です。

CaretShow メソッドを override したコンポを作らないと実現できません。
たぶん。

何かキャレットを表示非表示にするプロパティをこしらえて、CaretShow
メソッドでそのプロパティ値を見て ShowCaret API を呼ぶ呼ばない
という処理でいけると思いますよ。




1338 Re^18: Windows2000 問題 コメント数:  0件
  本田勝彦   |  2001/06/22 (金) 01:27
 http://member.nifty.ne.jp/~katsuhiko
> メッセージ添付いたしました。

見せて頂きました。ご協力感謝です。

Windows2000 ひっでぇ〜って感じです(^^;
何処に文句言おうかなぁ。とりあえず Deko さんのところにでも(^^;
FDELPHI もいいなぁ



1337 キャレットを非表示に コメント数:  3件
  しばやん  | 2001/06/22 (金) 00:32
 http://hp.vector.co.jp/authors/VA017625/
新バージョンで盛り上がっているときに申し訳ないのですが・・・。

自作ソフト上で,HEditorを表示用に使用しています。ただの表示用だったら
Enabled := Falseでいいのですが,URLの部分をクリックしたときには,その
ページを表示するような仕組みにしてあります。

Enabled := Trueなので,クリックをするとキャレットが表示されてしまうの
ですが,それを非表示にすることはできないでしょうか。URLをクリックする
ことはできるけど,キャレットは表示させたくないという要望です。

うまく意図が伝わったかどうか心配ですが,よかったら教えて下さい。よろしく
お願い致します。



1336 Re^17: Windows2000 問題 コメント数:  1件
  Kou  | 2001/06/22 (金) 00:09
> ご協力の程よろしくお願い致します。m(_ _)m

大歓迎です。
明日からちょっとまた家を空けますが・・・。
日曜日には戻ってこれると思います。

とりあえず、役に立つか分かりませんが、
メッセージ添付いたしました。
よろしくお願いします。



1335 Re^16: Windows2000 問題 コメント数:  2件
  本田勝彦   |  2001/06/21 (木) 23:53
 http://member.nifty.ne.jp/~katsuhiko
> 何かテストする項目はありますでしょうか。

人柱されます?
http://compodev.at.infoseek.co.jp/arc/hedit212b13p.lzh
実行したら、左上の TEditor に Windows 2000 上で不具合の出る文字を
入力して下さい。右上の TMemo にデータが蓄積されます。
(^人^) など半角全角混じりの登録語がテストデータとしては強力です。

Windows2000 では WM_IME_CHAR を DefWindowProc で処理する際に
不定要素があるようです。
私が理解してない部分があるだけかもしれません。

ご協力の程よろしくお願い致します。m(_ _)m




1334 Re^2: キーの割り当てについて コメント数:  2件
  本田勝彦   |  2001/06/21 (木) 23:40
 http://member.nifty.ne.jp/~katsuhiko
ようこそいらっしゃいまし。

キーマッピングは今後の課題ということで、一応 todo リストにあります。
現在の仕様のままでは、ソースコード書き換えをしなければ実現出来ません。
後は、ジャンプマークの表示でしょうか。

そのあたりまでは、進化したいと思います。

実は、お手本にしているエディタコンポがありまして、TFountain の解説ページにも
書いたのですが、mwEdit という海外製フリー&ソースコード公開のエディタが
あります。現在は synedit と名前を変えて開発が進められているようです。
http://synedit.sourceforge.net/
これを知ったのは、2000年5月頃なので、基本仕様を変えることは出来なかったのですが、TFountain の実装では大変参考になりました。
コマンドプロセッサーの仕組みが実装されていますので、参考にしたいと思っています。

www からダウンロード出来るのでしょうか?< Orphous

ホームページ見せて頂きました。友達の嫁さんの名前がいきなり出てきて驚きました。(^^;




1333 Re^15: Windows2000 問題 コメント数:  3件
  Kou  | 2001/06/21 (木) 22:47
少しでもお役に立てるよう、
TEditorのサンプルプロジェクトで新規ページを開き試しています。
コーディングは一切なし。
新規にTEditorをインストールして「hedit212b4.lzh」を上書きしました。
この環境ではリターンキーが無視される現象と、
私の環境で発生している「E」が出てしまいました。

この後、「hedit212b12.lzh」を上書きしました。
リターンが無視されることはなさそうです。
半角文字を入力している場合にはまったく問題ないようです。
しかし、かな漢字変換ONでは、半角スペースを押すと半角SP一個とEが
挿入されることがあったり、半角SPが2個ずつ挿入されてしまいました。
かな漢字変換ONの場合は、初期状態でも半角SPが2個入るようです。
何かテストする項目はありますでしょうか。




1332 Re^14: Windows2000 問題 コメント数:  4件
  Kou  | 2001/06/21 (木) 20:54
> おりょ?てらおさんのところでは、リターンキーが無視されるとかで
> 地下で b4 まで進んでおりました(^^;

ちょっといない間にどんどんロジックが変わってるようですね。
今から確認してみます。
上にあるhedit212b12.lzh も試させて頂きます。
なんだか、わけがわからなくなってきました。(^^;
Win2000 おそるべし・・・。



1331 Re: キーの割り当てについて コメント数:  3件
  Mightien  | 2001/06/21 (木) 20:02
 http://www.milley.net
私はDOS時代からパソコンを使っているせいでWindows準拠キー割り当てのままでプログラミングをすることには強い抵抗があります。
要するにDelphiのキー割り当てのような機能をEditorに持たせたいのです。
TKeyMacroがそのような用途に使えるのかと思ってダウンロードしてみましたがちょっと違うようです。

自分で作るとして、考え方としては単純にTEditorのOnKeyDownイベントの中でキーコードを置き換えるようなロジックで問題ないものでしょうか?
カーソルキーなどの特殊なコードの振る舞いについては見えてないところがありますのでイベント、メッセージの動作に詳しい本田さんのご意見を伺えれば幸いと思い質問させていただきました。

実は別に購入しているTurboPower社( http://www.turbopower.com )のOrphousというコンポーネントセットにも拡張Editorがあり、それにはキーマッピングをするコンポーネントとそのインターフェースがあります。
しかしEditorコンポーネントとしてはTEditorの方が数段優れていますので、何とかTEditorをベースにしたいのです。

よろしくお願い致します。



1330 キーの割り当てについて コメント数:  4件
  Mightien  | 2001/06/21 (木) 20:01
 http://www.milley.net
TEditorを提供していただき感謝致しております。

出来の良さに感激してレジストしたものの、これまではTEditorの潜在能力を活用することが出来ていませんでした。
新たに組込み用のIDE(開発環境)を作る必要が生じ、TEditorを活用する機会だと張り切っています。
そこで初歩的な質問があるのですがアドバイスをいただければ幸いです。

(文字数制限のため、次へ)



1329 Re: TEditorバグ発見です コメント数:  0件
  本田勝彦   |  2001/06/20 (水) 23:21
 http://member.nifty.ne.jp/~katsuhiko
レポートありがとうございます。確認出来ました。

http://compodev.at.infoseek.co.jp/arc/hedit212b12.lzh

試して見て下さい。
b12 というのがアレですが(^^;

てらお さん見ていらっしゃいますか?
ver 2.11 の WM_IME_CHAR はやっぱり変だったんですね。
おかげさまで何とかなりそうです。まだだったりして(^^;




1328 TEditorバグ発見です コメント数:  1件
  あきら  | 2001/06/20 (水) 22:15
TEditor v2.11を使わせて頂いています。
バグを発見しましたので、ご報告します。

「渡邉」と入力すると、動作がおかしくなります。
文末に入力すると、リストがインデックスを超えています…
で、文末以外だと、一つ後ろの文字がおかしくなります。

それでは。



1327 Re^13: Windows2000 問題 コメント数:  5件
  本田勝彦   |  2001/06/18 (月) 23:40
 http://member.nifty.ne.jp/~katsuhiko
> ありがとうございます。
> 今のところ問題ないようです。(^^)

おりょ?てらおさんのところでは、リターンキーが無視されるとかで
地下で b4 まで進んでおりました(^^;

http://compodev.at.infoseek.co.jp/arc/hedit212b3.lzh

http://compodev.at.infoseek.co.jp/arc/hedit212b4.lzh

b4 の方は WM_CHAR メッセージハンドラに仕掛けがあります。






1326 Re^12: Windows2000 問題 コメント数:  6件
  Kou  | 2001/06/18 (月) 23:27
> これが決定打になることを祈りつつ・・・

ありがとうございます。
今のところ問題ないようです。(^^)



1325 Re^11: Windows2000 問題 コメント数:  7件
  本田勝彦   |  2001/06/16 (土) 02:03
 http://member.nifty.ne.jp/~katsuhiko
ReadOnly 対策が抜けておりました。

またまたロジックが変更されました。WM_IME_COMPOSITION を復活させました。
WM_IME_CHAR も処理出来るので、TKeyMacro にも対応出来ます。(^^)v

http://compodev.at.infoseek.co.jp/arc/hedit212b2.lzh

これが決定打になることを祈りつつ・・・



1324 Re^10: Windows2000 問題 コメント数:  8件
  本田勝彦   |  2001/06/16 (土) 01:24
 http://member.nifty.ne.jp/~katsuhiko
てらお さん、Kou さん、色々とありがとうございます。

>  // 2バイト文字だけ処理する
> // Inc(FImeCount); // コメントアウト

というのは、全角半角混在の登録文字列が入力されると、アウトでした。
(^人^)、オ・ネ・ガ・イ。とかいうやつ。おっと半角カタカナだぞ(^^;

で、正常動作するバージョンのベータ版(何か変^^;)を下記サイトに
おきましたので、皆様にもお試し頂けるとありがたいです。

http://compodev.at.infoseek.co.jp/arc/hedit212b.lzh



1323 Re^9: Windows2000 問題 コメント数:  0件
  Kou  | 2001/06/15 (金) 22:07
> E は $20$45 ですね。OnKeyPress で何かしているというのは無しですよね(^^;

特に何もしていません。
てらおさんの環境ではうまく動作しているようですので、
私の方で何か問題があるのかもしれません。
今晩、悩んでみます。(^^;



1322 Re^9: Windows2000 問題 コメント数:  9件
  てらお  | 2001/06/15 (金) 09:10
 http://www2s.biglobe.ne.jp/~t-susumu/toclip/
てらおですー

procedure TEditor.WMImeChar(var Msg: TMessage);
var
 CH, CL: Char;
begin
 // 2バイト文字だけ処理する
 if Msg.wParam > 255 then
 begin
  // TMemo が受け取る WM_CHAR と互換性を持たせる
  CL := Chr(Msg.wParam);
  Msg.wParam := Msg.wParam shr 8;
  CH := Chr(Msg.wParam);
  if CH in LeadBytes then
   PutStringToLine(CH + CL);
  Msg.Result := 0;
 end;
 inherited;
end;

で、今のところ問題なさそうですー(^-^)
もうちょい使ってみますー



1321 Re^8: Windows2000 問題 コメント数:  11件
  本田勝彦   |  2001/06/15 (金) 01:11
 http://member.nifty.ne.jp/~katsuhiko
> ただ、確定直後に半角スペースを挿入しようとすると、
> [E]が挿入されることが度々ありますが、もしかして私だけでしょうか。(^^;;

E は $20$45 ですね。OnKeyPress で何かしているというのは無しですよね(^^;

>  end
>  else
>   inherited;

スンマセン見落としてました(^^;
でも、これだと

1.WM_IME_COMPOSITION:
2.WM_IME_COMPOSITION:
3.WM_IME_CHAR: 82A0
4.WM_CHAR: 0082

4. の WM_CHAR が来ないような気がして、そうなるとTKeyMacro の動作が怪しく
なる気がします。

  if CH in LeadBytes then
   PutStringToLine(CH + CL);
  Msg.Result := 0; // 1行挿入
 end;
 inherited;
end;

とするとどうでしょう。同じかなぁ。

ハンドラの先頭で
inherited;
if Msg.Result <> 0 then
begin

とやるか・・・あ゛れ?

あの〜ですね。WM_CHAR のメッセージハンドラの一番下のところの

PutStringToLine(Char(Message.CharCode)); を

PutStringToLine(Chr(Message.CharCode)); Chr 関数呼び出しに変更すると
どうでしょう?

また乖離して行きそうだ(^^;



1320 Re^7: Windows2000 問題 コメント数:  12件
  Kou  | 2001/06/15 (金) 00:09
> というわけで、LeadByte 判別付き究極バージョンです。(余計かも^^;)

すばやい対応ありがとうございます。
試してみました。
Win2000Pro IME2000
変換確定直後の[Enter]無視は起こりません。
ただ、確定直後に半角スペースを挿入しようとすると、
[E]が挿入されることが度々ありますが、もしかして私だけでしょうか。(^^;;

最後の
>  end;
>  inherited;
> end;

というところを
 end
 else
  inherited;
end;

のようにinheritedを変えることで回避できるようなのですが・・・。
先の書き込みではこの部分を強調したかったのですが、忘れてました。(^^;;



1319 Re^6: Windows2000 問題 コメント数:  13件
  本田勝彦   |  2001/06/14 (木) 23:17
 http://member.nifty.ne.jp/~katsuhiko
Kou さん、てらお さんどうも有り難うございます。

> とすることでうまく動作しましたが、どうなんでしょう?

やはり、Inc(FImeCount); は不要なようですね。これ、無くても
Win98 + ATOK, MS-IME どちらもおっけ〜なんですよね(^^;
というわけで、LeadByte 判別付き究極バージョンです。(余計かも^^;)

procedure TEditor.WMImeChar(var Msg: TMessage);
var
 CH, CL: Char;
begin
 // 2バイト文字だけ処理する
 if Msg.wParam > 255 then
 begin
  // TMemo が受け取る WM_CHAR と互換性を持たせる
  CL := Chr(Msg.wParam);
  Msg.wParam := Msg.wParam shr 8;
  CH := Chr(Msg.wParam);
  if CH in LeadBytes then
   PutStringToLine(CH + CL);
 end;
 inherited;
end;

お試し頂けますでしょうか?何度もスイマセンです。
旨く行きますように(^人^)



1318 Re^5: Windows2000 問題 コメント数:  14件
  Kou  | 2001/06/14 (木) 21:54
> 近づいている気はするのですが(^^;)
ありがとうございます。
前回と同様に「E」が出る現象が出ましたが、

procedure TEditor.WMImeChar(var Msg: TMessage);
var
 S: String;
 C: Char;
begin
 if Msg.wParam > 255 then
 begin
  // 2バイト文字だけ処理する
  C := Chr(Msg.wParam);
  Msg.wParam := Msg.wParam shr 8;
  S := Chr(Msg.wParam) + C;
  //Inc(FImeCount); // WMChar メッセージハンドラでキャンセルする文字数
  PutStringToLine(S);
 end
 else
  inherited;
end;

とすることでうまく動作しましたが、どうなんでしょう?



1317 Re^4: Windows2000 問題 コメント数:  15件
  本田勝彦   |  2001/06/14 (木) 19:40
> W2K+IME2000で変換後にEnterが無視される現象を確認しましたー(T.T)

なかなか解へ辿り着けなくて申し訳ないです。

> >   Inc(FImeCount); // WMChar メッセージハンドラでキャンセルする文字数

この1行をコメントアウトするといかがでしょう?
近づいている気はするのですが(^^;)




1316 Re^3: Windows2000 問題 コメント数:  16件
  てらお  | 2001/06/14 (木) 17:41
 http://www2s.biglobe.ne.jp/~t-susumu/toclip/
てらおです。

> procedure TEditor.WMImeChar(var Msg: TMessage);
> var
>  S: String;
>  C: Char;
> begin
>  if Msg.wParam > 255 then
>  begin
>   // 2バイト文字だけ処理する
>   C := Chr(Msg.wParam);
>   Msg.wParam := Msg.wParam shr 8;
>   S := Chr(Msg.wParam) + C;
>   Inc(FImeCount); // WMChar メッセージハンドラでキャンセルする文字数
>   PutStringToLine(S);
>  end;
>  inherited;
> end;

W2K+IME2000で変換後にEnterが無視される現象を確認しましたー(T.T)



1315 Re^2: Windows2000 問題 コメント数:  17件
  本田勝彦   |  2001/06/14 (木) 02:30
 http://member.nifty.ne.jp/~katsuhiko
何度もすいません。変換が確定した文字全部を処理するという
WM_IME_COMPOSITION の実装スタイルにとらわれすぎていたようです。
全角文字だけ処理して、後は知らん顔するバージョンです。
たぶんこれでうまく行ってくれると思うのですが、いかがでしょう?

procedure TEditor.WMImeChar(var Msg: TMessage);
var
 S: String;
 C: Char;
begin
 if Msg.wParam > 255 then
 begin
  // 2バイト文字だけ処理する
  C := Chr(Msg.wParam);
  Msg.wParam := Msg.wParam shr 8;
  S := Chr(Msg.wParam) + C;
  Inc(FImeCount); // WMChar メッセージハンドラでキャンセルする文字数
  PutStringToLine(S);
 end;
 inherited;
end;

お試し下さいませ。






1314 Re: Windows2000 問題 コメント数:  18件
  本田勝彦   |  2001/06/14 (木) 00:49
 http://member.nifty.ne.jp/~katsuhiko
> Windows2000 をお使いの方でご協力頂けるにはよろしくお願い致します。

メールをくださった皆様ありがとうございました。で、あらためて WM_IME_CHAR
メッセージハンドラを眺めていると怪しい部分がありましたので、以下に修正版
を掲載します。

procedure TEditor.WMImeChar(var Msg: TMessage);
var
 S: String;
 C: Char;
begin
 if Msg.wParam > 255 then
 begin
  C := Chr(Msg.wParam);
  Msg.wParam := Msg.wParam shr 8;
  S := Chr(Msg.wParam) + C;
  Inc(FImeCount); // (*1)
  PutStringToLine(S);
 end
 else
 begin
  if TWMChar(Msg).CharCode in [$20..$7E, $A0..$FF] then
  begin
   S := Chr(Msg.wParam);
   // Inc(FImeCount); // コメントアウト
   PutStringToLine(S);
  end;
  Inc(FImeCount); // ここに移動する
 end;
 inherited;
end;

(*1)の部分はコメントアウトするしないで変換後のリターンキーに
関わる部分です。

お試し頂けましたら、ご報告頂けると有り難いです。



1313 TStoreComponent コメント数:  0件
  本田勝彦   |  2001/06/13 (水) 23:58
 http://member.nifty.ne.jp/~katsuhiko
ReadReg, WriteReg メソッドの引数が
(const Root, Ident: String);
となっていましたが、
(const Root, Section, Ident: String);
に変更致します。TRegManager との互換性を計るためです。

近日中に TEditor ver 2.12, TStringsPrinter ver 1.51 として
公開致します。お手数をお掛け致しますが、ユーザーの皆様には
よろしくお願い申しあげます。



1312 Re^2: 追伸:[エラー] MainU.pas(97): 未定義の識別子 : 'TEditorParser' コメント数:  0件
  清明  | 2001/06/13 (水) 09:11
あるがとうございます。
>サンプルコードも記載されていますので、参考にして頂けますでしょうか?

procedure TDoubleDE.Ed1DblClick(Sender: TObject);
var
s:string;
Col,Row,l:integer;
Parser: TFountainParser;
begin
Col := (Sender as TEditor).Col;
Row := (Sender as TEditor).Row;
Parser := (Sender as TEditor).ActiveFountain.ParserClass.Create(
(Sender as TEditor).ActiveFountain);
try
Parser.NewData((Sender as TEditor).ListString[Row], (Sender as TEditor).ListData[Row]);
while Parser.NextToken <> toEof do
begin
l := Length(Parser.TokenString);
if (Col >= Parser.SourcePos)
and (Col < Parser.SourcePos + l) then
begin
(Sender as TEditor).Col := Parser.SourcePos;
(Sender as TEditor).SelLength := l;
break;
end;
end;
finally
Parser.Free;
end;
end;

このようにすることでうまく行きました。



1311 Windows2000 問題 コメント数:  19件
  本田勝彦   |  2001/06/13 (水) 01:00
 http://member.nifty.ne.jp/~katsuhiko
に対処するため、皆様のご協力を仰ぎたく思います。
http://homepage3.nifty.com/~katsuhiko/app/getmes/getmes.lzh
に TMemo へやってくる WM_IME_COMPOSITION, WM_IME_CHAR, WM_CHAR
メッセージを記録するアプリを置きました。コンパイル実行後の
テスト結果をご連絡頂ければ有り難いです。

Windows2000 をお使いの方でご協力頂けるにはよろしくお願い致します。



1310 色々 コメント数:  0件
  本田勝彦   |  2001/06/12 (火) 23:55
 http://member.nifty.ne.jp/~katsuhiko
TEditor ver 2.11 を公開しました。
TStringsPrinter ver 1.5 を公開しました。
Component Help Install help を公開しました。





1309 Re: WMImeCharについて コメント数:  0件
  本田勝彦   |  2001/06/12 (火) 23:27
 http://member.nifty.ne.jp/~katsuhiko
> 環境は Win2000Pro MS IME2000です。

やはり一筋縄では旨く行かないようですね。調査してみますので、
それまでの間、以前のバージョンの WM_IME_COMPOSITION メッセージ
ハンドラをご利用下さい。



1308 Re: 追伸:[エラー] MainU.pas(97): 未定義の識別子 : 'TEditorParser' コメント数:  1件
  本田勝彦   |  2001/06/12 (火) 23:25
 http://member.nifty.ne.jp/~katsuhiko
ヘルプファイルの TFountain の導入というトピックに今回のバージョンアップで
大きく変わったパーサークラスについて記述があります。
サンプルコードも記載されていますので、参考にして頂けますでしょうか?




1307 WMImeCharについて コメント数:  1件
  Kou  | 2001/06/12 (火) 22:22
お世話になってます。
てらおさんの発言と本田さんの回答をもとに
Inc(FImeCount); // WMChar メッセージハンドラでキャンセルする文字数
というところをコメントアウトすることで
[Enter]は効くようになりましたが、
たとえば
「あ」と入力し、その後、半角スペースを一つ挿入しようとすると
「 E」というように半角スペースとアルファベットの「E」が挿入される
現象がでています。
何か回避策はありますでしょうか。

環境は Win2000Pro MS IME2000です。



1306 追伸:[エラー] MainU.pas(97): 未定義の識別子 : 'TEditorParser' コメント数:  2件
  清明  | 2001/06/12 (火) 14:53
追伸です。処理はダブルクリックでワードを選択させる処理をしています。
たしか、本田さんに教えていただいた方法だと思っております。

procedure TDoubleDE.Ed1DblClick(Sender: TObject);
var
s:string;
Col,Row,l:integer;
Parser:TEditorParser;
begin
Col := (Sender as TEditor).Col;
Row := (Sender as TEditor).Row;
s := (Sender as TEditor).ExpandTab((Sender as TEditor).ListString[Row]);
Parser := TEditorParser.Create(s);
try
while Parser.Token <> toEof do
begin
l := Length(Parser.TokenString);
if (Col >= Parser.SourcePos)
and (Col < Parser.SourcePos + l) then
begin
(Sender as TEditor).Col := Parser.SourcePos;
(Sender as TEditor).SelLength := l;
break;
end;
Parser.NextToken;
end;
finally
Parser.Free;
end;
end;



1305 [エラー] MainU.pas(97): 未定義の識別子 : 'TEditorParser' コメント数:  3件
  清明  | 2001/06/12 (火) 14:46
ご無沙汰してます。
表題のとおり
[エラー] MainU.pas(97): 未定義の識別子 : 'TEditorParser'
でコンパイル出来なくなりました。

どう変更すればよいのでしょうか。



1304 Re^2: TFountain.FileExtList の活かし方 コメント数:  0件
  本田勝彦   |  2001/06/12 (火) 03:02
 http://member.nifty.ne.jp/~katsuhiko
> 結局 TEditor の機能としては実装不可能ということでしょうかね(爆)

わはは。いや失礼。
そういうコンポをこしらえて、OpenDialog.FileName を知っている人が
そのコンポに問い合わせて、取得した TFountain を該当 TEditor にあてがって
やるというのは可能だと思います。

TFountainCollecter でしょうか?(^^;
Application.Components 配列から拾い集められますよね?
パンタグラフさんよろしくお願い致します。(^_^)



1303 Re: TFountain.FileExtList の活かし方 コメント数:  1件
  パンタグラフ  | 2001/06/12 (火) 01:05
 http://homepage1.nifty.com/cosmic/
やるとすれば

 案1)TEditorStrings は LoadFromFile メソッドにて、
FEditor.Owner のコンポを全て検索し、TFountain がいれば、
HasExt をして一致すれば FEditor.Fountain にセット

 案2)TFountain は生成時に、グローバルに作った FountainList に
    自分自身を登録する。TEditorStrings は LoadFromFile 時に
    FountainList を検索し、TFountain に対して HasExt をして
    一致すれば FEditor.Fountain にセット

どうでしょう?

案1は、実装は簡単ですが、次の欠点があります。
TEditor がメインフォームにあり、TFountain から派生したコンポが
データモジュールにある場合など、Owner が違うものだと使えません。
案2は、実装は大変ですが、他のフォームに置いた TFountain も使えます。
ただし、自動的に使われるので、THTMLFountain を複数使い分ける場合など
に不都合が出てきます。

結局 TEditor の機能としては実装不可能ということでしょうかね(爆)




1302 TFountain.FileExtList の活かし方 コメント数:  2件
  パンタグラフ  | 2001/06/12 (火) 01:00
 http://homepage1.nifty.com/cosmic/
またまた TFountain についてです。
FileExtList に格納された値って、自動的に使われることはないんですよね。

TPicture は LoadFromFile メソッドで、ファイルの拡張子によって
適切な TGraphic を生成して読み込みを行ないますが、そのようなことが
TEditor.Lines.LoadFromFile でもできないかな、と。

.html のファイルの場合は THTMLFountain が、
.pas のファイルの場合は、TDelphiFountain が自動的にセットされたら
いいと思うのですが・・・。

とりあえず Form で TFountain を検索して、拡張子が一致していたら
TEditor にセットするというコードは書けたのですが、TEditor の機能として
実装できないでしょうか。





1301 Re^3: TEditorFountain コメント数:  0件
  パンタグラフ  | 2001/06/12 (火) 00:47
 http://homepage1.nifty.com/cosmic/
なるほどー。詳しい説明有り難うございました。

TEditorFountain をパレットにインストールして、
フォームに貼り付けて使えばいいかな?とか考えていたのですが、
それでも再接続がうまく行かないんですね(^^;

フォームにすでに置いてあるコンポーネントを破棄して入れ替えるとなると、
設計時に接続をしているコンポなど、いろいろ影響がありそうですね。

そのあたりのうまい解決策を盛り込んだ次バージョンに期待です(^^;